From f33002e9983f9d61aa58e7ceb475afd92eb88a2a Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" <pl@gohorb.ba-horb.de> Date: Fri, 29 Jan 2021 22:48:20 +0100 Subject: [PATCH 1/2] new file: src/test/java/insertGenerics/TestTwoArgs.java new file: src/test/resources/insertGenericsJav/TestTwoArgs.jav --- src/test/java/insertGenerics/TestTwoArgs.java | 72 +++++++++++++++++++ .../insertGenericsJav/TestTwoArgs.jav | 21 ++++++ 2 files changed, 93 insertions(+) create mode 100644 src/test/java/insertGenerics/TestTwoArgs.java create mode 100644 src/test/resources/insertGenericsJav/TestTwoArgs.jav diff --git a/src/test/java/insertGenerics/TestTwoArgs.java b/src/test/java/insertGenerics/TestTwoArgs.java new file mode 100644 index 00000000..7513b65f --- /dev/null +++ b/src/test/java/insertGenerics/TestTwoArgs.java @@ -0,0 +1,72 @@ +package insertGenerics; + +import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; +import de.dhbwstuttgart.core.JavaTXCompiler; +import de.dhbwstuttgart.syntaxtree.SourceFile; +import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; +import de.dhbwstuttgart.syntaxtree.visual.ASTTypePrinter; +import de.dhbwstuttgart.typedeployment.TypeInsert; +import de.dhbwstuttgart.typedeployment.TypeInsertFactory; +import de.dhbwstuttgart.typeinference.result.ResultSet; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class TestTwoArgs { + + public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/insertGenericsJav/"; + + @Test + public void ggFinder() throws IOException, ClassNotFoundException { + execute(new File(rootDirectory+"TestTwoArgs.jav")); + } + + private static class TestResultSet{ + + } + + public TestResultSet execute(File fileToTest) throws IOException, ClassNotFoundException { + JavaTXCompiler compiler = new JavaTXCompiler(fileToTest); + for(File f : compiler.sourceFiles.keySet()){ + SourceFile sf = compiler.sourceFiles.get(f); + } + List<ResultSet> results = compiler.typeInference(); + List<GenericGenratorResultForSourceFile> simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); + //compiler.generateBytecode(rootDirectory+"xxx.class", results, simplifyResultsForAllSourceFiles); + for(File f : compiler.sourceFiles.keySet()){ + SourceFile sf = compiler.sourceFiles.get(f); + System.out.println(ASTTypePrinter.print(sf)); + System.out.println(ASTPrinter.print(sf)); + //List<ResultSet> results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen + assert results.size()>0; + Set<String> insertedTypes = new HashSet<>(); + for(ResultSet resultSet : results){ + Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, results, simplifyResultsForAllSourceFiles); + assert result.size()>0; + String content = readFile(f.getPath(), StandardCharsets.UTF_8); + for(TypeInsert tip : result){ + insertedTypes.add(tip.insert(content)); + } + } + for(String s : insertedTypes){ + System.out.println(s); + } + } + return new TestResultSet(); + } + + static String readFile(String path, Charset encoding) + throws IOException + { + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); + } +} diff --git a/src/test/resources/insertGenericsJav/TestTwoArgs.jav b/src/test/resources/insertGenericsJav/TestTwoArgs.jav new file mode 100644 index 00000000..78b274e4 --- /dev/null +++ b/src/test/resources/insertGenericsJav/TestTwoArgs.jav @@ -0,0 +1,21 @@ +class TestTwoArgs { + a; + + id(b) { + var c = b; + return c; + } + + setA(x) { + a = x; + return a; + } + + m(x,y) { + x = id(y); + } + + main(x,y) { + return m(id(x),setA(y)); + } +} \ No newline at end of file From c6d896fa3bdf8f6ecae01776cc30dbf500e1850c Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" <pl@gohorb.ba-horb.de> Date: Sat, 30 Jan 2021 22:06:27 +0100 Subject: [PATCH 2/2] modified: ../../../main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java modified: ../../java/insertGenerics/TestGGFinder.java modified: TestGGFinder.jav --- .../GeneratedGenericsFinder.java | 8 +-- .../java/insertGenerics/TestGGFinder.java | 52 ++++++------------- .../insertGenericsJav/TestGGFinder.jav | 2 +- 3 files changed, 22 insertions(+), 40 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java index 7e89e755..7a7f876e 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java @@ -157,9 +157,9 @@ public class GeneratedGenericsFinder implements ASTVisitor { } /**/ - if(ggResult != null) - generatedGenericsForSF.addGenericGeneratorResultClass(ggResult); - + if(ggResult != null) { //Hinzufuegen von Fayez ggResult + //generatedGenericsForSF.addGenericGeneratorResultClass(ggResult); + } List<GenericsGeneratorResult> listOfClassCons = new ArrayList<>(); for(TPHConstraint clCons: fogg.classConstraints) { @@ -183,7 +183,7 @@ public class GeneratedGenericsFinder implements ASTVisitor { ggRfaM = new GenericGeneratorResultsForAllMethods(listOfMethAndCons); ggResultAlternative = new GenericsGeneratorResultForClass(className, listOfClassCons, ggRfaM); - if(ggResultAlternative != null) { + if(ggResultAlternative != null) {//hinzufuegen von Alis ggResult generatedGenericsForSF.addGenericGeneratorResultClass(ggResultAlternative); System.out.println(generatedGenericsForSF); } diff --git a/src/test/java/insertGenerics/TestGGFinder.java b/src/test/java/insertGenerics/TestGGFinder.java index c517136c..3b9e378e 100644 --- a/src/test/java/insertGenerics/TestGGFinder.java +++ b/src/test/java/insertGenerics/TestGGFinder.java @@ -12,6 +12,9 @@ import org.junit.Test; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.net.URLClassLoader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -22,51 +25,30 @@ import java.util.Set; public class TestGGFinder { - public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/insertGenericsJav/"; - + private static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/insertGenericsJav/"; + private String pathToClassFile = System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"; + private static ClassLoader loader; + private static Class<?> classToTest; + private static Object instanceOfClass; + private static String className = "TestGGFinder"; + @Test - public void ggFinder() throws IOException, ClassNotFoundException { - execute(new File(rootDirectory+"TestGGFinder.jav")); + public void ggFinder() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { + execute(new File(rootDirectory+className+".jav")); } private static class TestResultSet{ } - public TestResultSet execute(File fileToTest) throws IOException, ClassNotFoundException { + public TestResultSet execute(File fileToTest) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { JavaTXCompiler compiler = new JavaTXCompiler(fileToTest); - for(File f : compiler.sourceFiles.keySet()){ - SourceFile sf = compiler.sourceFiles.get(f); - } List<ResultSet> results = compiler.typeInference(); List<GenericGenratorResultForSourceFile> simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); - //compiler.generateBytecode(rootDirectory+"xxx.class", results, simplifyResultsForAllSourceFiles); - for(File f : compiler.sourceFiles.keySet()){ - SourceFile sf = compiler.sourceFiles.get(f); - System.out.println(ASTTypePrinter.print(sf)); - System.out.println(ASTPrinter.print(sf)); - //List<ResultSet> results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen - assert results.size()>0; - Set<String> insertedTypes = new HashSet<>(); - for(ResultSet resultSet : results){ - Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, results, simplifyResultsForAllSourceFiles); - assert result.size()>0; - String content = readFile(f.getPath(), StandardCharsets.UTF_8); - for(TypeInsert tip : result){ - insertedTypes.add(tip.insert(content)); - } - } - for(String s : insertedTypes){ - System.out.println(s); - } - } + compiler.generateBytecode(new File(pathToClassFile), results, simplifyResultsForAllSourceFiles); + loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)}); + classToTest = loader.loadClass(className); + instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); return new TestResultSet(); } - - static String readFile(String path, Charset encoding) - throws IOException - { - byte[] encoded = Files.readAllBytes(Paths.get(path)); - return new String(encoded, encoding); - } } diff --git a/src/test/resources/insertGenericsJav/TestGGFinder.jav b/src/test/resources/insertGenericsJav/TestGGFinder.jav index 9ce2691f..cc94cad5 100644 --- a/src/test/resources/insertGenericsJav/TestGGFinder.jav +++ b/src/test/resources/insertGenericsJav/TestGGFinder.jav @@ -1,4 +1,4 @@ -class TestGGFinder { +public class TestGGFinder { a; id(b) {