diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java index 5be20f2d..7e89e755 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java @@ -3,16 +3,14 @@ */ package de.dhbwstuttgart.bytecode.genericsGenerator; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; +import java.util.*; import de.dhbwstuttgart.bytecode.TPHExtractor; +import de.dhbwstuttgart.bytecode.constraint.ExtendsConstraint; +import de.dhbwstuttgart.bytecode.constraint.TPHConstraint; +import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.*; +import de.dhbwstuttgart.bytecode.insertGenerics.ClassConstraint; import de.dhbwstuttgart.bytecode.insertGenerics.FamilyOfGeneratedGenerics; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericsGeneratorResultForClass; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.MethodAndConstraints; import de.dhbwstuttgart.bytecode.utilities.MethodAndTPH; import de.dhbwstuttgart.bytecode.utilities.MethodUtility; import de.dhbwstuttgart.bytecode.utilities.Resolver; @@ -127,6 +125,7 @@ public class GeneratedGenericsFinder implements ASTVisitor { ConstraintsSimplierResult simplifiedConstraints = null; GenericsGeneratorResultForClass ggResult = null; + GenericsGeneratorResultForClass ggResultAlternative = null; for (int i = 0; i < listOfResultSetsList.size(); i++) { resultSet = listOfResultSetsList.get(i); @@ -160,7 +159,35 @@ public class GeneratedGenericsFinder implements ASTVisitor { if(ggResult != null) generatedGenericsForSF.addGenericGeneratorResultClass(ggResult); - System.out.println("ddd"); + + + List listOfClassCons = new ArrayList<>(); + for(TPHConstraint clCons: fogg.classConstraints) { +// ExtendsConstraint ec = new ExtendsConstraint(clCons.getLeft(), clCons.getRight()); + GenericsGeneratorResult ggR = new GenericsGeneratorResult(clCons, new HashSet<>()); + listOfClassCons.add(ggR); + } + + GenericGeneratorResultsForAllMethods ggRfaM = null; + List listOfMethAndCons = new ArrayList<>(); + for(String methID: fogg.methodConstraintsWithPosition.keySet()) { + List listOfGGR = new ArrayList<>(); + for(TPHConstraint methCons: fogg.methodConstraintsWithPosition.get(methID)) { +// ExtendsConstraint ec = new ExtendsConstraint(methCons.getLeft(),methCons.getRight()); + GenericsGeneratorResult ggR = new GenericsGeneratorResult(methCons, new HashSet<>()); + listOfGGR.add(ggR); + } + MethodAndConstraints mac = new MethodAndConstraints(methID, listOfGGR); + listOfMethAndCons.add(mac); + } + ggRfaM = new GenericGeneratorResultsForAllMethods(listOfMethAndCons); + ggResultAlternative = new GenericsGeneratorResultForClass(className, listOfClassCons, ggRfaM); + + if(ggResultAlternative != null) { + generatedGenericsForSF.addGenericGeneratorResultClass(ggResultAlternative); + System.out.println(generatedGenericsForSF); + } + System.out.println(ggResultAlternative); } diff --git a/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java b/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java index b1d2510b..92f13760 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java @@ -128,8 +128,8 @@ public class FamilyOfGeneratedGenerics { for(String curMeth: tempMethodConstraintsWithPosition.keySet()){ for(int i=0; i results = compiler.typeInference(); - - GeneratedGenericsFinder ggf = new GeneratedGenericsFinder(sf, results); - ClassOrInterface coiHere = coi; - ggf.visit(coiHere); - //assert results.size()>0; - } -} diff --git a/src/test/java/insertGenerics/TryTest.java b/src/test/java/insertGenerics/TestTwoArgs2.java similarity index 66% rename from src/test/java/insertGenerics/TryTest.java rename to src/test/java/insertGenerics/TestTwoArgs2.java index d0b1ae2f..084eeb1c 100644 --- a/src/test/java/insertGenerics/TryTest.java +++ b/src/test/java/insertGenerics/TestTwoArgs2.java @@ -20,13 +20,13 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -public class TryTest { +public class TestTwoArgs2 { public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/insertGenericsJav/"; @Test public void ggFinder() throws IOException, ClassNotFoundException { - execute(new File(rootDirectory+"TestGGFinder.jav")); + execute(new File(rootDirectory+"TestTwoArgs2.jav")); } private static class TestResultSet{ @@ -34,25 +34,9 @@ public class TryTest { } public TestResultSet execute(File fileToTest) throws IOException, ClassNotFoundException { - //filesToTest.add(new File(rootDirectory+"fc.jav")); - //filesToTest.add(new File(rootDirectory+"Lambda.jav")); - //filesToTest.add(new File(rootDirectory+"Lambda2.jav")); - //filesToTest.add(new File(rootDirectory+"Lambda3.jav")); - //filesToTest.add(new File(rootDirectory+"Vector.jav")); - //filesToTest.add(new File(rootDirectory+"Generics.jav")); - //filesToTest.add(new File(rootDirectory+"MethodsEasy.jav")); - //filesToTest.add(new File(rootDirectory+"Matrix.jav")); - //filesToTest.add(new File(rootDirectory+"Import.jav")); - // //filesToTest.add(new File(rootDirectory+"Faculty.jav")); - // //filesToTest.add(new File(rootDirectory+"mathStruc.jav")); - // //filesToTest.add(new File(rootDirectory+"test.jav")); JavaTXCompiler compiler = new JavaTXCompiler(fileToTest); for(File f : compiler.sourceFiles.keySet()){ SourceFile sf = compiler.sourceFiles.get(f); -// System.out.println(ASTTypePrinter.print(sf)); -// System.out.println("---------------------------1"); -// System.out.println(ASTPrinter.print(sf)); -// System.out.println("---------------------------2"); } List results = compiler.typeInference(); List simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); @@ -60,9 +44,7 @@ public class TryTest { for(File f : compiler.sourceFiles.keySet()){ SourceFile sf = compiler.sourceFiles.get(f); System.out.println(ASTTypePrinter.print(sf)); -// System.out.println("---------------------------3"); System.out.println(ASTPrinter.print(sf)); -// System.out.println("---------------------------4"); //List results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen assert results.size()>0; Set insertedTypes = new HashSet<>(); @@ -75,9 +57,7 @@ public class TryTest { } } for(String s : insertedTypes){ - System.out.println("---------------------------51"); System.out.println(s); - System.out.println("---------------------------52"); } } return new TestResultSet(); diff --git a/src/test/resources/insertGenericsJav/TestTwoArgs2.jav b/src/test/resources/insertGenericsJav/TestTwoArgs2.jav new file mode 100644 index 00000000..a1913bfc --- /dev/null +++ b/src/test/resources/insertGenericsJav/TestTwoArgs2.jav @@ -0,0 +1,22 @@ +class TestTwoArgs { + a; + + id(b) { + var c = b; + return c; + } + + setA(x) { + a = x; + return a; + } + + m(x,y) { + x = id(y); + return x; + } + + main(x,y) { + return m(id(x),setA(y)); + } +} \ No newline at end of file