From e19dee4c9970c5f36187717c406b62cd3cfd56a1 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 17 Jun 2016 13:55:14 +0200 Subject: [PATCH] Umstellung auf Intellij IDEA --- .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ JavaCompilerCore.iml | 75 ++++++++++++++++++ lib/commons-bcel6-6.0-SNAPSHOT.jar | Bin 690897 -> 690928 bytes .../bytecode/MethodGenerator.java | 3 +- .../KomplexeMenge/KeineDoppeltenVerweise.java | 19 +++-- test/bytecode/IfTest.java | 9 --- test/bytecode/SourceFileBytecodeTest.java | 2 + test/bytecode/Test.java | 27 ------- test/bytecode/Test2.java | 6 -- test/bytecode/Test3.java | 6 -- test/bytecode/TestStackMap.java | 8 -- test/bytecode/WhileTest.java | 6 ++ .../InsertSingleTypeTest.java | 6 +- .../MartinTestCases/Tester.java | 7 +- test/plugindevelopment/TypeInsertTester.java | 8 +- 16 files changed, 126 insertions(+), 70 deletions(-) create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 JavaCompilerCore.iml delete mode 100644 test/bytecode/IfTest.java delete mode 100644 test/bytecode/Test.java delete mode 100644 test/bytecode/Test2.java delete mode 100644 test/bytecode/Test3.java delete mode 100644 test/bytecode/TestStackMap.java diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..905ecb00 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/JavaCompilerCore.iml b/JavaCompilerCore.iml new file mode 100644 index 00000000..cb1e6970 --- /dev/null +++ b/JavaCompilerCore.iml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/commons-bcel6-6.0-SNAPSHOT.jar b/lib/commons-bcel6-6.0-SNAPSHOT.jar index 1dab98d7dc06b030f7703972c434646f0d7cd7fb..13725c508ff40bb9a71c07baaafdbe8137737c74 100644 GIT binary patch delta 30506 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 diff --git a/src/de/dhbwstuttgart/bytecode/MethodGenerator.java b/src/de/dhbwstuttgart/bytecode/MethodGenerator.java index 88add712..effb63e2 100644 --- a/src/de/dhbwstuttgart/bytecode/MethodGenerator.java +++ b/src/de/dhbwstuttgart/bytecode/MethodGenerator.java @@ -70,7 +70,8 @@ public class MethodGenerator extends MethodGen{ il.append(factory.createReturn( org.apache.commons.bcel6.generic.Type.VOID)); } } - + + method.getInstructionList().setPositions(); method.stripAttributes(true); method.setMaxStack(); //Die Stack Größe automatisch berechnen lassen (erst nach dem alle Instructions angehängt wurden) method.setMaxLocals(); diff --git a/test/KomplexeMenge/KeineDoppeltenVerweise.java b/test/KomplexeMenge/KeineDoppeltenVerweise.java index 43eea37c..606783f8 100644 --- a/test/KomplexeMenge/KeineDoppeltenVerweise.java +++ b/test/KomplexeMenge/KeineDoppeltenVerweise.java @@ -2,6 +2,7 @@ package KomplexeMenge; import static org.junit.Assert.*; +import java.util.Set; import java.util.Vector; import org.junit.Test; @@ -36,7 +37,7 @@ class TestKlasseOderMenge extends OderMenge{ } public void addItem(TestKlasse string) { - TestUndMenge toAdd = new TestKlasseUndMenge(); + TestKlasseUndMenge toAdd = new TestKlasseUndMenge(); toAdd.addItem(string); set.add(toAdd); } @@ -61,24 +62,28 @@ class TestKlasseUndMenge extends UndMenge{ } } +/** + * @Depreciated + * Tests möglicherweise obsolet + */ public class KeineDoppeltenVerweise { @Test public void test() { - OderMenge oM1 = new TestOderMenge(); - OderMenge oM2 = new OderMenge<>(); - UndMenge oM3 = new UndMenge<>(); + TestKlasseOderMenge oM1 = new TestKlasseOderMenge(); + TestKlasseOderMenge oM2 = new TestKlasseOderMenge(); + TestKlasseUndMenge oM3 = new TestKlasseUndMenge(); 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(); + Set> cP = oM3.cartesianProduct(); System.out.println(cP); - cP.firstElement().firstElement().name="neu"; + cP.iterator().next().iterator().next().name="neu"; System.out.println(cP); - check(cP); + //check(cP); //TODO Muss neu implementiert werden } private void check(Menge> cP){ diff --git a/test/bytecode/IfTest.java b/test/bytecode/IfTest.java deleted file mode 100644 index 1c2c1464..00000000 --- a/test/bytecode/IfTest.java +++ /dev/null @@ -1,9 +0,0 @@ -class IfTest{ - -public static void main(String[] args){ - - System.out.println(new IfElseStatement().method(true)); - System.out.println(new IfElseStatement().method(false)); -} - -} diff --git a/test/bytecode/SourceFileBytecodeTest.java b/test/bytecode/SourceFileBytecodeTest.java index 8e1245ba..3cf8ce2a 100644 --- a/test/bytecode/SourceFileBytecodeTest.java +++ b/test/bytecode/SourceFileBytecodeTest.java @@ -21,6 +21,7 @@ public abstract class SourceFileBytecodeTest extends TestCase{ protected String testName; public SourceFileBytecodeTest(){ + super("Bytecode Test"); init(); if(testName != null){ @@ -29,6 +30,7 @@ public abstract class SourceFileBytecodeTest extends TestCase{ outputDirectory = ""; SingleClassTester.compileToBytecode(rootDirectory+testFile, rootDirectory+outputDirectory); + System.out.println("Test"); }else{ throw new RuntimeException("rootDirectory, testFile or outputFile is null."); } diff --git a/test/bytecode/Test.java b/test/bytecode/Test.java deleted file mode 100644 index cd86d699..00000000 --- a/test/bytecode/Test.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Diese Klasse testet die generierte EmptyClass.class-Datei - */ -class Test{ -public static void main(String[] args){ - new EmptyClass(); - new Assign(); - System.out.println(new Return().method()); - new MethodCall().method(); - System.out.println(new FieldDeclaration().field); - System.out.println(new Runnable().method().apply()); - Runnable r = new Runnable().method().apply(); - Test t = new Identity().op.apply(new Test()); - System.out.println(t); -} -} - -class Test2{ - Fun1 m() { - Fun1 f = new Identity().op; - return f; - } -public static void main(String[] args){ - Matrix2 m2 = new Matrix2<>(); - System.out.println(m2.op.apply((Integer x) -> x)); -} -} diff --git a/test/bytecode/Test2.java b/test/bytecode/Test2.java deleted file mode 100644 index 767f6522..00000000 --- a/test/bytecode/Test2.java +++ /dev/null @@ -1,6 +0,0 @@ -class Test2{ - - public static void main(java.lang.String[] args){ - new NewStatement(1).method(); -} -} diff --git a/test/bytecode/Test3.java b/test/bytecode/Test3.java deleted file mode 100644 index 6bc9a737..00000000 --- a/test/bytecode/Test3.java +++ /dev/null @@ -1,6 +0,0 @@ -class Test3{ - -public static void main(String[] args){ -System.out.println(new LambdaExpr2Test().op.apply()); -} -} diff --git a/test/bytecode/TestStackMap.java b/test/bytecode/TestStackMap.java deleted file mode 100644 index a9931cbe..00000000 --- a/test/bytecode/TestStackMap.java +++ /dev/null @@ -1,8 +0,0 @@ -class TestStackMap{ - -public static void main(String[] args){ - IfElseStatement test = new IfElseStatement(); - System.out.println(test.method(false)); -} - -} diff --git a/test/bytecode/WhileTest.java b/test/bytecode/WhileTest.java index be51a813..dde969ed 100644 --- a/test/bytecode/WhileTest.java +++ b/test/bytecode/WhileTest.java @@ -1,8 +1,14 @@ package bytecode; import org.junit.Test; +import org.junit.runners.Suite; public class WhileTest extends SourceFileBytecodeTest{ + + public WhileTest(){ + super(); + } + @Override protected void init() { testName = "WhileTest"; diff --git a/test/plugindevelopment/InsertSingleTypeTest.java b/test/plugindevelopment/InsertSingleTypeTest.java index ac88cdd9..916f45fc 100644 --- a/test/plugindevelopment/InsertSingleTypeTest.java +++ b/test/plugindevelopment/InsertSingleTypeTest.java @@ -7,6 +7,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -43,8 +44,9 @@ public class InsertSingleTypeTest { String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); try { - compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Menge results = compiler.typeReconstruction(); + SourceFile parsed = compiler.parse(new File(rootDirectory + sourceFileToInfere));Menge sourceFiles = new Menge<>(); + sourceFiles.add(parsed); + Menge results = compiler.typeReconstruction(sourceFiles); 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/MartinTestCases/Tester.java b/test/plugindevelopment/MartinTestCases/Tester.java index 66488c7a..d739fd49 100644 --- a/test/plugindevelopment/MartinTestCases/Tester.java +++ b/test/plugindevelopment/MartinTestCases/Tester.java @@ -3,6 +3,7 @@ package plugindevelopment.MartinTestCases; import java.io.File; import java.io.IOException; +import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.typeinference.Menge; import org.junit.Test; @@ -27,8 +28,10 @@ public class Tester extends TypeInsertTester{ String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(new LoggerConfiguration().setOutput(Section.TYPEINFERENCE, System.out)); try { - compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Menge results = compiler.typeReconstruction(); + SourceFile parsed = compiler.parse(new File(rootDirectory + sourceFileToInfere)); + Menge sourceFiles = new Menge<>(); + sourceFiles.add(parsed); + Menge results = compiler.typeReconstruction(sourceFiles); //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/TypeInsertTester.java b/test/plugindevelopment/TypeInsertTester.java index 25f8676a..6737c6a3 100755 --- a/test/plugindevelopment/TypeInsertTester.java +++ b/test/plugindevelopment/TypeInsertTester.java @@ -8,6 +8,8 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; + +import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.logger.Logger; @@ -44,8 +46,10 @@ public class TypeInsertTester{ String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); try { - compiler.parse(new File(rootDirectory + sourceFileToInfere)); - Menge results = compiler.typeReconstruction(); + SourceFile parsed = compiler.parse(new File(rootDirectory + sourceFileToInfere)); + Menge sourceFiles = new Menge<>(); + sourceFiles.add(parsed); + Menge results = compiler.typeReconstruction(sourceFiles); 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();