diff --git a/pom.xml b/pom.xml index d69740e0..3c31a7e8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ +http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 de.dhbwstuttgart JavaTXcompiler @@ -11,6 +11,12 @@ JavaTXcompiler http://maven.apache.org + + junit + junit + 4.0 + test + org.antlr antlr4 @@ -37,12 +43,6 @@ asm 7.0 - - junit - junit - 4.0 - - - - org.apache.maven.plugins - maven-compiler-plugin - - - ${project.basedir}/src/test/resources/testBytecode/generatedBC/*.java - - - + @@ -189,3 +169,5 @@ + + diff --git a/src/build_compiler.sh b/src/build_compiler.sh deleted file mode 100755 index 6ccc2dc4..00000000 --- a/src/build_compiler.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# A basic script to compile the necessary packages and their subpackages to work with the parser. -# Messages are logged to stderr. ->&2 echo "Building de.dhbwstuttgart.typecheck..." -javac -d ../bin ./de/dhbwstuttgart/typecheck/*.java ->&2 echo "Building de.dhbwstuttgart.syntaxtree..." -javac -d ../bin ./de/dhbwstuttgart/syntaxtree/*.java ->&2 echo "Building de.dhbwstuttgart.syntaxtree.factory..." -javac -d ../bin ./de/dhbwstuttgart/syntaxtree/factory/*.java ->&2 echo "Building de.dhbwstuttgart.syntaxtree.operator..." -javac -d ../bin ./de/dhbwstuttgart/syntaxtree/operator/*.java ->&2 echo "Building de.dhbwstuttgart.syntaxtree.statement..." -javac -d ../bin ./de/dhbwstuttgart/syntaxtree/statement/*.java ->&2 echo "Building de.dhbwstuttgart.syntaxtree.statement.literal..." -javac -d ../bin ./de/dhbwstuttgart/syntaxtree/statement/literal/*.java ->&2 echo "Building de.dhbwstuttgart.syntaxtree.type..." -javac -d ../bin ./de/dhbwstuttgart/syntaxtree/type/*.java ->&2 echo "Building de.dhbwstuttgart.parser..." -javac -d ../bin ./de/dhbwstuttgart/parser/*.java ->&2 echo "Building de.dhbwstuttgart.parser.SyntaxTreeGenerator..." -javac -d ../bin ./de/dhbwstuttgart/parser/SyntaxTreeGenerator/*.java ->&2 echo "Building de.dhbwstuttgart.parser.antlr..." -javac -d ../bin ./de/dhbwstuttgart/parser/antlr/*.java -echo "Done. Now its your turn to debug:)." diff --git a/src/main/java/de/dhbwstuttgart/.DS_Store b/src/main/java/de/dhbwstuttgart/.DS_Store deleted file mode 100644 index aa8a1074..00000000 Binary files a/src/main/java/de/dhbwstuttgart/.DS_Store and /dev/null differ diff --git a/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGen.java b/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGen.java index 2ac10fcc..0dea801d 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGen.java @@ -70,6 +70,7 @@ public class BytecodeGen implements ASTVisitor { // stores generics and their bounds of class HashMap genericsAndBounds = new HashMap<>(); + private int constructorPos = 0; private final TPHExtractor tphExtractor = new TPHExtractor(); private final ArrayList commonPairs = new ArrayList<>(); @@ -272,7 +273,8 @@ public class BytecodeGen implements ASTVisitor { for(String paramName : methodParamsAndTypes.keySet()) { String typeOfParam = methodParamsAndTypes.get(paramName).acceptTV(new TypeToSignature()); - if(genericsAndBounds.containsKey(typeOfParam) ||typeOfParam.substring(0, 4).equals("TPH ") + System.out.println(typeOfParam); + if(genericsAndBounds.containsKey(typeOfParam) ||typeOfParam.contains("$") || typeOfParam.contains("<")) { hasGen = true; break; @@ -291,10 +293,14 @@ public class BytecodeGen implements ASTVisitor { desc = constructor.accept(new DescriptorToString(resultSet)); System.out.println("Constructor: " + field.getName() + " Sig: "+ sig + " Desc: " + desc); MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "", desc, sig, null); - mv.visitCode(); + mv.visitCode(); + Block block = fieldInitializations.get().block; + + constructorPos += 1; + BytecodeGenMethod gen = new BytecodeGenMethod(className,superClass,resultSet,field, mv,paramsAndLocals,cw, - genericsAndBoundsMethod,genericsAndBounds,isInterface,classFiles, sf,path, block); + genericsAndBoundsMethod,genericsAndBounds,isInterface,classFiles, sf,path, block, constructorPos); if(!field.getParameterList().iterator().hasNext() && !(field.block.statements.get(field.block.statements.size()-1) instanceof ReturnVoid)) { mv.visitInsn(Opcodes.RETURN); } diff --git a/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java b/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java index 24611f75..ff2c49a3 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java @@ -85,13 +85,15 @@ public class BytecodeGenMethod implements StatementVisitor { private boolean isRightSideALambda = false; private KindOfLambda kindOfLambda; private HashMap classFiles; + + private int constructorPos = 0; private ArrayList varsFunInterface = new ArrayList<>();; // generate bytecode for constructor public BytecodeGenMethod(String className, String superClass,ResultSet resultSet, Method m, MethodVisitor mv, HashMap paramsAndLocals, ClassWriter cw, HashMap genericsAndBoundsMethod, HashMap genericsAndBounds, boolean isInterface, HashMap classFiles, - SourceFile sf,String path, Block block) { + SourceFile sf,String path, Block block, int constructorPos) { this.className = className; this.superClass = superClass; @@ -106,6 +108,7 @@ public class BytecodeGenMethod implements StatementVisitor { this.classFiles = classFiles; this.sf = sf; this.path = path; + this.constructorPos = constructorPos; if(block != null) this.blockFieldInit = block; this.m.block.accept(this); @@ -634,20 +637,20 @@ public class BytecodeGenMethod implements StatementVisitor { // Desc: (this/nothing)TargetType String fiMethodDesc = samMethod.accept(new DescriptorToString(resultSet)); mv.visitInvokeDynamicInsn("apply", fiMethodDesc, bootstrap, arg1, arg2, arg3); - - MethodVisitor mvLambdaBody = cw.visitMethod(Opcodes.ACC_PRIVATE + staticOrInstance + Opcodes.ACC_SYNTHETIC, - methodName, newDesc, null, null); - - ArrayList usedVars = kindOfLambda.getUsedVars(); - - new BytecodeGenMethod(lambdaExpression, usedVars,this.resultSet, mvLambdaBody, indexOfFirstParamLam, isInterface, - classFiles,this.path, lamCounter, sf); - - mvLambdaBody.visitMaxs(0, 0); - mvLambdaBody.visitEnd(); - cw.visitInnerClass("java/lang/invoke/MethodHandles$Lookup", "java/lang/invoke/MethodHandles", "Lookup", - Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC + Opcodes.ACC_FINAL); - + if(constructorPos<2) { + MethodVisitor mvLambdaBody = cw.visitMethod(Opcodes.ACC_PRIVATE + staticOrInstance + Opcodes.ACC_SYNTHETIC, + methodName, newDesc, null, null); + + ArrayList usedVars = kindOfLambda.getUsedVars(); + + new BytecodeGenMethod(lambdaExpression, usedVars,this.resultSet, mvLambdaBody, indexOfFirstParamLam, isInterface, + classFiles,this.path, lamCounter, sf); + + mvLambdaBody.visitMaxs(0, 0); + mvLambdaBody.visitEnd(); + cw.visitInnerClass("java/lang/invoke/MethodHandles$Lookup", "java/lang/invoke/MethodHandles", "Lookup", + Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC + Opcodes.ACC_FINAL); + } // generateBCForFunN(lambdaExpression, typeErasure); } diff --git a/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java b/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java index 5464aa91..07471ae1 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/descriptor/DescriptorToString.java @@ -106,7 +106,14 @@ public class DescriptorToString implements DescriptorVisitor{ if(constructor.getGenericsAndBounds().containsKey(fpDesc)){ desc += "L"+constructor.getGenericsAndBounds().get(fpDesc)+ ";"; }else { - desc += "L"+resultSet.resolveType(fp.getType()).resolvedType.acceptTV(new TypeToDescriptor())+ ";"; +// desc += "L"+resultSet.resolveType(fp.getType()).resolvedType.acceptTV(new TypeToDescriptor())+ ";"; + String resType = resultSet.resolveType(fp.getType()).resolvedType.acceptTV(new TypeToDescriptor()); + if(resType.subSequence(0, 4).equals("TPH ")) { + // Bound ist immer Object + desc += "L"+Type.getInternalName(Object.class)+ ";"; + } else { + desc += "L"+resType+ ";"; + } } }else { // System.out.println("Cons has NO Gens"); diff --git a/src/main/java/de/dhbwstuttgart/bytecode/utilities/KindOfLambda.java b/src/main/java/de/dhbwstuttgart/bytecode/utilities/KindOfLambda.java index b897684a..aeefda62 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/utilities/KindOfLambda.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/utilities/KindOfLambda.java @@ -162,7 +162,7 @@ public class KindOfLambda implements StatementVisitor{ @Override public void visit(UnaryExpr unaryExpr) { - throw new NotImplementedException(); + } @Override @@ -202,7 +202,8 @@ public class KindOfLambda implements StatementVisitor{ @Override public void visit(WhileStmt whileStmt) { - // TODO Auto-generated method stub + whileStmt.expr.accept(this); + whileStmt.loopBlock.accept(this); } diff --git a/src/main/java/de/dhbwstuttgart/bytecode/utilities/Simplify.java b/src/main/java/de/dhbwstuttgart/bytecode/utilities/Simplify.java index 49b1b4f4..d19d38dc 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/utilities/Simplify.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/utilities/Simplify.java @@ -174,9 +174,11 @@ public class Simplify { allCons.addAll(result.keySet()); if(!allCons.isEmpty() && allCons.size()<2) { - - if(!result.containsKey(allCons.get(0))) - result.put(allCons.get(0), null); + TPHConstraint cons = allCons.get(0); + if(!result.containsKey(cons)) { + result.put(cons, null); + result.put(new ExtendsConstraint(cons.getRight(), Type.getInternalName(Object.class), Relation.EXTENDS), null); + } return result; } diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 8729dd3e..c7959005 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -122,7 +122,9 @@ public class JavaTXCompiler { TypeUnify unify = new TypeUnify(); Set> results = new HashSet<>(); try { - FileWriter logFile = new FileWriter(new File(System.getProperty("user.dir")+"/test/logFiles/"+"log")); + File logPath = new File(System.getProperty("user.dir")+"/target/logFiles/"); + logPath.mkdirs(); + FileWriter logFile = new FileWriter(new File(logPath, "log")); logFile.write("FC:\\" + finiteClosure.toString()+"\n"); for(SourceFile sf : this.sourceFiles.values()) { logFile.write(ASTTypePrinter.print(sf)); @@ -223,7 +225,9 @@ public class JavaTXCompiler { logFile.write("PLACEHOLDERS: " + PlaceholderType.EXISTING_PLACEHOLDERS); logFile.flush(); } - catch (IOException e) { } + catch (IOException e) { + e.printStackTrace(); + } return results.stream().map((unifyPairs -> new ResultSet(UnifyTypeFactory.convert(unifyPairs, generateTPHMap(cons))))).collect(Collectors.toList()); } diff --git a/src/test/java/asp/typeinference/ASPTest.java b/src/test/java/asp/typeinference/ASPTest.java index 632d288e..5a43b6a9 100644 --- a/src/test/java/asp/typeinference/ASPTest.java +++ b/src/test/java/asp/typeinference/ASPTest.java @@ -20,7 +20,7 @@ import java.util.Set; public class ASPTest { - public static final String rootDirectory = System.getProperty("user.dir")+"/test/javFiles/"; + public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/javFiles/"; private static final List filesToTest = new ArrayList<>(); protected File fileToTest = null; diff --git a/src/test/java/bytecode/FacultyTest.java b/src/test/java/bytecode/FacultyTest.java index dd7bb51e..44a0e1c5 100644 --- a/src/test/java/bytecode/FacultyTest.java +++ b/src/test/java/bytecode/FacultyTest.java @@ -27,7 +27,7 @@ public class FacultyTest { path = System.getProperty("user.dir")+"/src/test/resources/bytecode/javFiles/Faculty.jav"; fileToTest = new File(path); compiler = new JavaTXCompiler(fileToTest); - compiler.generateBytecode(System.getProperty("user.dir")+"//src/test/resources/testBytecode/generatedBC/"); + compiler.generateBytecode(System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"); pathToClassFile = System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"; loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)}); classToTest = loader.loadClass("Faculty"); diff --git a/src/test/java/bytecode/FieldTphConsMethTest.java b/src/test/java/bytecode/FieldTphConsMethTest.java new file mode 100644 index 00000000..ecf992d0 --- /dev/null +++ b/src/test/java/bytecode/FieldTphConsMethTest.java @@ -0,0 +1,49 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; + +import org.junit.BeforeClass; +import org.junit.Test; + +import de.dhbwstuttgart.core.JavaTXCompiler; + +public class FieldTphConsMethTest { + + private static String path; + private static File fileToTest; + private static JavaTXCompiler compiler; + private static ClassLoader loader; + private static Class classToTest; + private static String pathToClassFile; + private static Object instanceOfClass; + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + path = System.getProperty("user.dir")+"/src/test/resources/bytecode/javFiles/FieldTphConsMeth.jav"; + fileToTest = new File(path); + compiler = new JavaTXCompiler(fileToTest); + compiler.generateBytecode(System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"); + pathToClassFile = System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"; + loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)}); + classToTest = loader.loadClass("FieldTphConsMeth"); + instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); + } + + @Test + public void test() throws Exception { + Field a = classToTest.getDeclaredField("a"); + a.setAccessible(true); + + Method m = classToTest.getDeclaredMethod("m", Object.class); + Object result = m.invoke(instanceOfClass, 42); + + assertEquals(42,result); + } + +} diff --git a/src/test/java/bytecode/IdTest.java b/src/test/java/bytecode/IdTest.java new file mode 100644 index 00000000..d8392e55 --- /dev/null +++ b/src/test/java/bytecode/IdTest.java @@ -0,0 +1,38 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.lang.reflect.Field; +import java.net.URL; +import java.net.URLClassLoader; + +import org.junit.BeforeClass; +import org.junit.Test; + +import de.dhbwstuttgart.core.JavaTXCompiler; + +public class IdTest { + + private static String path; + private static File fileToTest; + private static JavaTXCompiler compiler; + private static ClassLoader loader; + private static Class classToTest; + private static String pathToClassFile; + private static Object instanceOfClass; + + + @Test + public void test() throws Exception { + path = System.getProperty("user.dir")+"/src/test/resources/bytecode/javFiles/Id.jav"; + fileToTest = new File(path); + compiler = new JavaTXCompiler(fileToTest); + compiler.generateBytecode(System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"); + pathToClassFile = System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"; + loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)}); + classToTest = loader.loadClass("Id"); + instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); + } + +} diff --git a/src/test/java/bytecode/Tph6Test.java b/src/test/java/bytecode/Tph6Test.java new file mode 100644 index 00000000..da368151 --- /dev/null +++ b/src/test/java/bytecode/Tph6Test.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; + +import org.junit.BeforeClass; +import org.junit.Test; + +import de.dhbwstuttgart.core.JavaTXCompiler; + +public class Tph6Test { + + private static String path; + private static File fileToTest; + private static JavaTXCompiler compiler; + private static ClassLoader loader; + private static Class classToTest; + private static String pathToClassFile; + private static Object instanceOfClass; + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + path = System.getProperty("user.dir")+"/src/test/resources/bytecode/javFiles/Tph6.jav"; + fileToTest = new File(path); + compiler = new JavaTXCompiler(fileToTest); + pathToClassFile = System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"; + compiler.generateBytecode(pathToClassFile); + loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)}); + classToTest = loader.loadClass("Tph6"); + instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); + } + + @Test + public void test() throws Exception { +// Method m = classToTest.getDeclaredMethod("m", Object.class, Object.class, Object.class); + Method m = classToTest.getDeclaredMethod("m", Object.class, Object.class); +// Object result = m.invoke(instanceOfClass, "xx",2,3); + + //assertEquals(2,result); + } +} diff --git a/src/test/java/javFiles/AddLong.jav b/src/test/java/javFiles/AddLong.jav new file mode 100644 index 00000000..d6d47e9f --- /dev/null +++ b/src/test/java/javFiles/AddLong.jav @@ -0,0 +1,9 @@ +import java.lang.Integer; +import java.lang.Long; + +public class AddLong{ + Long add(Integer a, Long b) { + Long c = a+b; + return c; + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/EmptyClass.jav b/src/test/java/javFiles/EmptyClass.jav new file mode 100644 index 00000000..8160d7da --- /dev/null +++ b/src/test/java/javFiles/EmptyClass.jav @@ -0,0 +1,3 @@ +public class EmptyClass{ + +} \ No newline at end of file diff --git a/src/test/java/javFiles/EmptyMethod.jav b/src/test/java/javFiles/EmptyMethod.jav new file mode 100644 index 00000000..dd28fc69 --- /dev/null +++ b/src/test/java/javFiles/EmptyMethod.jav @@ -0,0 +1,37 @@ +public class EmptyMethod{ + static String s1 =""; + String s2; + public void m1(){ + //String s = ""; + System.out.println("test"); + //Integer ab = Math.abs(1); + //Math.abs(1); + //String lV = "local"; + //s1 = "1"; + //s1.concat("2"); + s2 = s1; + //m2(); + Clazz i = new Clazz(); + Integer i = new Integer(1); + } + + public void m2(){} +} + +class Clazz{} +/* +public class EmptyMethod2{ + public static test = "5"; + public void m1(Integer i, String j, Boolean b){ + //String s = ""; + EmptyMethod em = new EmptyMethod(); + em.m1(); + em.s1 = ""; + //Integer ab = Math.abs(1); + //Math.abs(1); + //String lV = "local"; + //s1 = "1"; + //s1.concat("2"); + //s2 = s1; + } +}*/ \ No newline at end of file diff --git a/src/test/java/javFiles/Expressions.jav b/src/test/java/javFiles/Expressions.jav new file mode 100644 index 00000000..e2e992a1 --- /dev/null +++ b/src/test/java/javFiles/Expressions.jav @@ -0,0 +1,8 @@ +class Expressions{ + +void test(){ + var x = 2; + x = x + 2; +} + +} \ No newline at end of file diff --git a/src/test/java/javFiles/FC_Matrix.jav b/src/test/java/javFiles/FC_Matrix.jav new file mode 100644 index 00000000..75ead472 --- /dev/null +++ b/src/test/java/javFiles/FC_Matrix.jav @@ -0,0 +1,10 @@ +import java.util.Vector; + +class Matrix extends Vector> { + + methode(m) { + m.add(1); + Matrix i; + methode(i); + } + } diff --git a/src/test/java/javFiles/Faculty.jav b/src/test/java/javFiles/Faculty.jav new file mode 100644 index 00000000..ca539add --- /dev/null +++ b/src/test/java/javFiles/Faculty.jav @@ -0,0 +1,15 @@ +import java.lang.Integer; + +class Faculty { + + Integer mul(Integer x, Integer y) { + return x; + } + + m () { + var fact = (Integer x) -> { + return mul(x, fact.apply(x)); + }; + return fact; + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/FacultyIf.jav b/src/test/java/javFiles/FacultyIf.jav new file mode 100644 index 00000000..3c368923 --- /dev/null +++ b/src/test/java/javFiles/FacultyIf.jav @@ -0,0 +1,17 @@ +import java.lang.Integer; + +class Faculty { + + m () { + + var fact = (Integer x) -> { + if (x == 1) { + return x; + } + else { + return x * (fact.apply(x-1)); + } + }; + return fact; + } +} diff --git a/src/test/java/javFiles/FacultyTyped.jav b/src/test/java/javFiles/FacultyTyped.jav new file mode 100644 index 00000000..089d2f33 --- /dev/null +++ b/src/test/java/javFiles/FacultyTyped.jav @@ -0,0 +1,19 @@ +import java.lang.Integer; + +class Faculty { + + Integer mul(Integer x, Integer y) { + return x; + } + + Fun1 m () { + var fact = (Integer x) -> { + return mul(x, fact.apply(x)); + }; + return fact; + } +} + +interface Fun1{ + B apply(A a); +} \ No newline at end of file diff --git a/src/test/java/javFiles/Fields.jav b/src/test/java/javFiles/Fields.jav new file mode 100644 index 00000000..cd2add71 --- /dev/null +++ b/src/test/java/javFiles/Fields.jav @@ -0,0 +1,11 @@ +import java.lang.String; + +class Fields{ +test2 = "test"; +test; +m(){ + var test3; + return test; +} + +} \ No newline at end of file diff --git a/src/test/java/javFiles/Generics.jav b/src/test/java/javFiles/Generics.jav new file mode 100644 index 00000000..dd7b4eba --- /dev/null +++ b/src/test/java/javFiles/Generics.jav @@ -0,0 +1,22 @@ +import java.lang.String; + +class Generics { + // A mt1(A a, B b){ + B mt1(B a, B b){ + return mt1(a, a); + } +} + +class Test { + methode(String s){ + return new Generics().mt1(s,s); + } +} + +/* +Problem: +auto test = new List(); +auto test2 = new List(); +... //code, welcher möglicherweise test und test2 vertauscht +test.add("hallo"); +*/ \ No newline at end of file diff --git a/src/test/java/javFiles/IfTest.jav b/src/test/java/javFiles/IfTest.jav new file mode 100644 index 00000000..1e1141df --- /dev/null +++ b/src/test/java/javFiles/IfTest.jav @@ -0,0 +1,14 @@ +import java.lang.Integer; +import java.lang.Boolean; +import java.lang.Object; + +public class IfTest{ + Object m1(b) { + Integer i; + if(b) { + return i; + }else{ + return b; + } + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/Import.jav b/src/test/java/javFiles/Import.jav new file mode 100644 index 00000000..c48082ba --- /dev/null +++ b/src/test/java/javFiles/Import.jav @@ -0,0 +1,8 @@ +import java.util.Vector; + +class Import { + void methode(){ + Vector v; + v.add(v); + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/Lambda.jav b/src/test/java/javFiles/Lambda.jav new file mode 100644 index 00000000..5bd67a0b --- /dev/null +++ b/src/test/java/javFiles/Lambda.jav @@ -0,0 +1,13 @@ + +class Apply { } + +public class Lambda { + + m () { + var lam1 = (x) -> { + return x; + }; + return lam1.apply(new Apply()); + } +} + diff --git a/src/test/java/javFiles/Lambda2.jav b/src/test/java/javFiles/Lambda2.jav new file mode 100644 index 00000000..cf1e910b --- /dev/null +++ b/src/test/java/javFiles/Lambda2.jav @@ -0,0 +1,33 @@ +import java.lang.String; + +public class Lambda2 +{ + public static void main(List args){ + var listOfStrings = new List(); + var listOfObjects; + listOfObjects = map(listOfStrings, (a) -> a); +} + +public map(a , b){ + b.apply(a); + return a; +} + +/* +public static List map(List input, Function func) { + List output; + output = new List(); + output.add(func.apply(input.get())); + return output; +} +*/ +} + +class List{ + A get(); + void add(A); +} + +class Function{ + B apply(A a); +} \ No newline at end of file diff --git a/src/test/java/javFiles/Lambda3.jav b/src/test/java/javFiles/Lambda3.jav new file mode 100644 index 00000000..9e22f302 --- /dev/null +++ b/src/test/java/javFiles/Lambda3.jav @@ -0,0 +1,24 @@ +import java.lang.String; + +public class Lambda2 +{ + /* + public static List map(List input, + Function func){ + input.add(func.apply(input.get())); + } + */ + public map(input,func){ + input.add(func.apply(input.get())); + return map(new List(), func); + } +} + +class List{ + A get(); + void add(A); +} + +class Function{ + B apply(A a); +} \ No newline at end of file diff --git a/src/test/java/javFiles/LambdaField.jav b/src/test/java/javFiles/LambdaField.jav new file mode 100644 index 00000000..4eb53738 --- /dev/null +++ b/src/test/java/javFiles/LambdaField.jav @@ -0,0 +1,6 @@ +public class LambdaField { + + f = x -> x; + +} + diff --git a/src/test/java/javFiles/LambdaRunnable.jav b/src/test/java/javFiles/LambdaRunnable.jav new file mode 100644 index 00000000..37924ea2 --- /dev/null +++ b/src/test/java/javFiles/LambdaRunnable.jav @@ -0,0 +1,14 @@ +import java.lang.Runnable; +import java.lang.String; +import java.lang.System; + +public class LamRunnable{ + + public LamRunnable(){ + + + Runnable lam = () -> {System.out.println("lambda");}; + lam.run(); + } +} + diff --git a/src/test/java/javFiles/ListenerOverload.jav b/src/test/java/javFiles/ListenerOverload.jav new file mode 100644 index 00000000..e1a8d65d --- /dev/null +++ b/src/test/java/javFiles/ListenerOverload.jav @@ -0,0 +1,20 @@ +import java.lang.Integer; +import java.lang.String; + +class ListenerOverload{ + +call(p){ + call(p.left); + call(p.right); +} + +call(Integer i){} + +call(String s){} + +} + +class Pair{ + A left; + B right; +} \ No newline at end of file diff --git a/src/test/java/javFiles/Matrix.jav b/src/test/java/javFiles/Matrix.jav new file mode 100644 index 00000000..5e1eac08 --- /dev/null +++ b/src/test/java/javFiles/Matrix.jav @@ -0,0 +1,28 @@ +import java.util.Vector; +import java.lang.Integer; + +class Matrix extends Vector> { + Integer mul1(Integer x, Integer y) { return x;} + Integer add1(Integer x, Integer y) { return x;} + mul(m) { + var ret = new Matrix(); + var i = 0; + while(i < size()) { + var v1 = this.elementAt(i); + var v2 = new Vector(); + var j = 0; + while(j < v1.size()) { + var erg = 0; + var k = 0; + while(k < v1.size()) { + erg = erg + v1.elementAt(k) * m.elementAt(k).elementAt(j); + //erg = add1(erg, mul1(v1.elementAt(k), + // m.elementAt(k).elementAt(j))); + k++; } + v2.addElement(new Integer(erg)); + j++; } + ret.addElement(v2); + i++; } + return ret; + } +} diff --git a/src/test/java/javFiles/Meth_Gen.jav b/src/test/java/javFiles/Meth_Gen.jav new file mode 100644 index 00000000..056dd82f --- /dev/null +++ b/src/test/java/javFiles/Meth_Gen.jav @@ -0,0 +1,11 @@ +class Meth_Gen { + + m1(x, y) { + m2(x); + x = y; + } + + m2(y) { + m1(y, y); + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/MethodCallGenerics.jav b/src/test/java/javFiles/MethodCallGenerics.jav new file mode 100644 index 00000000..0d02509b --- /dev/null +++ b/src/test/java/javFiles/MethodCallGenerics.jav @@ -0,0 +1,14 @@ +import java.lang.String; + +class Generics { + // A mt1(A a, B b){ + B mt1(B a, B b){ + return mt1(a, a); + } +} + +class Test { + methode(String s){ + return new Generics().mt1(s,s); + } +} diff --git a/src/test/java/javFiles/Methods.jav b/src/test/java/javFiles/Methods.jav new file mode 100644 index 00000000..e45d9830 --- /dev/null +++ b/src/test/java/javFiles/Methods.jav @@ -0,0 +1,17 @@ + +class Methods { + mt4(a,b,c) { return a.add(b).sub(c) ; } + + mt1(a) {return a;} + + mt2(a) {return a.f; } + + mt3(a) {return a.add(); } +} + +class Test { + java.lang.Object f; + add(){} + add(b){return b;} + sub(b){} +} \ No newline at end of file diff --git a/src/test/java/javFiles/MethodsEasy.jav b/src/test/java/javFiles/MethodsEasy.jav new file mode 100644 index 00000000..ee6f9daf --- /dev/null +++ b/src/test/java/javFiles/MethodsEasy.jav @@ -0,0 +1,7 @@ + +class Methods { + mt4(a,b,c) { return a.mt3(b).mt3(c) ; } + + mt3(a) {return a.mt3(a); } +} + diff --git a/src/test/java/javFiles/Op1.jav b/src/test/java/javFiles/Op1.jav new file mode 100644 index 00000000..800f58b8 --- /dev/null +++ b/src/test/java/javFiles/Op1.jav @@ -0,0 +1,11 @@ +public class Op1{ + public Op1() { + + Runnable lam = () -> { + String test = ""; + String b = "b"; + test = b; + System.out.println(test);}; + //lam.run(); + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/Package.jav b/src/test/java/javFiles/Package.jav new file mode 100644 index 00000000..bbc1e51d --- /dev/null +++ b/src/test/java/javFiles/Package.jav @@ -0,0 +1,5 @@ +package strucType.input; + +class Neu +{ +} \ No newline at end of file diff --git a/src/test/java/javFiles/Sorting.jav b/src/test/java/javFiles/Sorting.jav new file mode 100644 index 00000000..04ef23e5 --- /dev/null +++ b/src/test/java/javFiles/Sorting.jav @@ -0,0 +1,8 @@ +import java.util.List; +import java.util.Collection; + +class Sorting{ + void merge(a, b){ + a.addAll(b); + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/Subclass.jav b/src/test/java/javFiles/Subclass.jav new file mode 100644 index 00000000..fe6e9208 --- /dev/null +++ b/src/test/java/javFiles/Subclass.jav @@ -0,0 +1,6 @@ +public class Subclass extends Superclass { + + public void printMethod() { + super.printMethod(); + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/Superclass.jav b/src/test/java/javFiles/Superclass.jav new file mode 100644 index 00000000..d58089de --- /dev/null +++ b/src/test/java/javFiles/Superclass.jav @@ -0,0 +1,6 @@ +public class Superclass { + + public void printMethod() { + System.out.println("Printed in Superclass."); + } +} diff --git a/src/test/java/javFiles/Vector.jav b/src/test/java/javFiles/Vector.jav new file mode 100644 index 00000000..5c21cfff --- /dev/null +++ b/src/test/java/javFiles/Vector.jav @@ -0,0 +1,23 @@ +import java.util.ArrayList; +import java.util.Vector; +import java.lang.Object; + +class MyVector{ + +id(x){ + Object i; + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + x.add(i); + return x; +} +} \ No newline at end of file diff --git a/src/test/java/javFiles/fc.jav b/src/test/java/javFiles/fc.jav new file mode 100644 index 00000000..a3278cbc --- /dev/null +++ b/src/test/java/javFiles/fc.jav @@ -0,0 +1,18 @@ +import java.util.List; + +class Test{ + methode(param1, param2, param3) { + param2.add(param3); + return param1.meth(param2); + } +} + +interface Klasse1{ + Klasse1 meth(List p); + Klasse1 meth(Klasse2 p); +} + +interface Klasse2{ + Klasse1 meth(Klasse1 p); + Klasse2 meth(Klasse2 p); +} \ No newline at end of file diff --git a/src/test/java/javFiles/mathStruc.jav b/src/test/java/javFiles/mathStruc.jav new file mode 100644 index 00000000..93f901ce --- /dev/null +++ b/src/test/java/javFiles/mathStruc.jav @@ -0,0 +1,13 @@ + +class mathStruc { + +mathStruc(A a) { } + +A model(){ A a; return a; } + +methode(){ +var innerOp = o -> ms -> + new mathStruc(o.apply(this.model(),ms.model())); + return innerOp; + } +} \ No newline at end of file diff --git a/src/test/java/javFiles/test.jav b/src/test/java/javFiles/test.jav new file mode 100644 index 00000000..303d167a --- /dev/null +++ b/src/test/java/javFiles/test.jav @@ -0,0 +1,15 @@ +class Test{ + methode(param1, param2, param3) { + return param1.meth(param2.meth(param3)); + } +} + +interface Klasse1{ + Klasse1 meth(Klasse1 p); + Klasse1 meth(Klasse2 p); +} + +interface Klasse2{ + Klasse1 meth(Klasse1 p); + Klasse2 meth(Klasse2 p); +} \ No newline at end of file diff --git a/src/test/java/javFiles/test1.jav b/src/test/java/javFiles/test1.jav new file mode 100644 index 00000000..4b34948e --- /dev/null +++ b/src/test/java/javFiles/test1.jav @@ -0,0 +1,7 @@ +class Faculty { + + int a; + m (int x) { + return a+x; + } +} diff --git a/src/test/java/log4jTesting.xml b/src/test/java/log4jTesting.xml new file mode 100755 index 00000000..dc30c245 --- /dev/null +++ b/src/test/java/log4jTesting.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/typeinference/JavaTXCompilerTest.java b/src/test/java/typeinference/JavaTXCompilerTest.java index 233e8b24..26f5db09 100644 --- a/src/test/java/typeinference/JavaTXCompilerTest.java +++ b/src/test/java/typeinference/JavaTXCompilerTest.java @@ -22,7 +22,7 @@ import java.util.Set; public class JavaTXCompilerTest { - public static final String rootDirectory = System.getProperty("user.dir")+"/test/javFiles/"; + public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/javFiles/"; @Test public void finiteClosure() throws IOException, ClassNotFoundException { execute(new File(rootDirectory+"fc.jav")); diff --git a/src/test/java/typeinference/Meth_GenTest.java b/src/test/java/typeinference/Meth_GenTest.java index f5e64f9f..d879408c 100644 --- a/src/test/java/typeinference/Meth_GenTest.java +++ b/src/test/java/typeinference/Meth_GenTest.java @@ -22,7 +22,7 @@ import java.util.Set; public class Meth_GenTest { - public static final String rootDirectory = System.getProperty("user.dir")+"/test/javFiles/"; + public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/javFiles/"; /* @Test public void finiteClosure() throws IOException, ClassNotFoundException { diff --git a/src/test/java/typeinference/UnifyTest.java b/src/test/java/typeinference/UnifyTest.java index f8b6ec2e..38af248e 100644 --- a/src/test/java/typeinference/UnifyTest.java +++ b/src/test/java/typeinference/UnifyTest.java @@ -22,7 +22,7 @@ import java.util.Set; public class UnifyTest { - public static final String rootDirectory = System.getProperty("user.dir")+"/test/javFiles/"; + public static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/javFiles/"; /* @Test public void finiteClosure() throws IOException, ClassNotFoundException { diff --git a/src/test/resources/bytecode/javFiles/FieldTphConsMeth.jav b/src/test/resources/bytecode/javFiles/FieldTphConsMeth.jav new file mode 100644 index 00000000..e749bb4f --- /dev/null +++ b/src/test/resources/bytecode/javFiles/FieldTphConsMeth.jav @@ -0,0 +1,11 @@ +public class FieldTphConsMeth { + + a; + public FieldTphConsMeth(c) { + a = m(c); + } + + m(b) { + return b; + } +} \ No newline at end of file diff --git a/src/test/resources/bytecode/javFiles/Id.jav b/src/test/resources/bytecode/javFiles/Id.jav new file mode 100644 index 00000000..6cb5d4b0 --- /dev/null +++ b/src/test/resources/bytecode/javFiles/Id.jav @@ -0,0 +1,6 @@ +public class Id { + + id(b){ + return b; + } +} \ No newline at end of file diff --git a/src/test/resources/bytecode/javFiles/Tph6.jav b/src/test/resources/bytecode/javFiles/Tph6.jav new file mode 100644 index 00000000..2f9e4294 --- /dev/null +++ b/src/test/resources/bytecode/javFiles/Tph6.jav @@ -0,0 +1,14 @@ +public class Tph6 { +// m(a,b,c){ +// a = c; +// b = c; +// return a; +// } + + m(x,y){ + var c = m2(y); + c = m2(x); + } + + m2(y) { return y; } +} diff --git a/src/test/resources/testBytecode/Field.java b/src/test/resources/testBytecode/Field.java new file mode 100644 index 00000000..50002082 --- /dev/null +++ b/src/test/resources/testBytecode/Field.java @@ -0,0 +1,6 @@ +public class Field{ + public void m(){ + MethFieldVar mF = new MethFieldVar(); + mF.s1 = "Field S1"; + } +} diff --git a/src/test/resources/testBytecode/Import.java b/src/test/resources/testBytecode/Import.java new file mode 100644 index 00000000..f3519acb --- /dev/null +++ b/src/test/resources/testBytecode/Import.java @@ -0,0 +1,8 @@ +import java.util.Vector; + +class Import { + void methode(){ + Vector v = new Vector(); + v.add(v); + } +} diff --git a/src/test/resources/testBytecode/Lam1.java b/src/test/resources/testBytecode/Lam1.java new file mode 100644 index 00000000..142feed2 --- /dev/null +++ b/src/test/resources/testBytecode/Lam1.java @@ -0,0 +1,10 @@ +import java.util.function.Function; +public class Lam1{ + public Lam1() { + Function fun = (x) -> x+"1"; + fun.apply("2"); + + Runnable lam = () -> System.out.println("lambda"); + lam.run(); + } +} diff --git a/src/test/resources/testBytecode/LamRun.java b/src/test/resources/testBytecode/LamRun.java new file mode 100644 index 00000000..fdaf0852 --- /dev/null +++ b/src/test/resources/testBytecode/LamRun.java @@ -0,0 +1,8 @@ +public class LamRun{ + + public void mRun(){ + + Runnable lam = () -> System.out.println("lambda"); + lam.run(); + } +} diff --git a/src/test/resources/testBytecode/MethFieldVar.java b/src/test/resources/testBytecode/MethFieldVar.java new file mode 100644 index 00000000..74086a01 --- /dev/null +++ b/src/test/resources/testBytecode/MethFieldVar.java @@ -0,0 +1,38 @@ +public class MethFieldVar{ + String s1;// = ""; + String s2; + +/* public void meth(Integer i, String j, Boolean b){ + //String local = "a"; + //int localL = local.length(); + //int l = s.length(); + String s = null; + //s = ""; + //return s.length();//l+localL; + } +*/ + public void mm(){ +// return "mm"; + } + public void m2(){ + System.out.println(""); + // Math.abs(1); + // String lV = "local"; + // s1 = "1"; + // s1.concat("2"); + s2 = s1; + + mm(); + + Clazz i = new Clazz(); + + Runnable lam = ()->{ + String test = ""; + String b = "b"; + test = b; + System.out.println(test); + }; + } +} + +class Clazz{} diff --git a/src/test/resources/testBytecode/Subclass.java b/src/test/resources/testBytecode/Subclass.java new file mode 100644 index 00000000..3e8b5853 --- /dev/null +++ b/src/test/resources/testBytecode/Subclass.java @@ -0,0 +1,6 @@ +public class Subclass extends Superclass { + + public void printMethod() { + super.printMethod(); + } +} diff --git a/src/test/resources/testBytecode/SuperTest.java b/src/test/resources/testBytecode/SuperTest.java new file mode 100644 index 00000000..1b6ac268 --- /dev/null +++ b/src/test/resources/testBytecode/SuperTest.java @@ -0,0 +1,14 @@ +public class Superclass { + + public void printMethod() { + System.out.println("Printed in Superclass."); + } +} + +public class Subclass extends Superclass { + + public void printMethod() { + super.printMethod(); + + } +} diff --git a/src/test/resources/testBytecode/Superclass.java b/src/test/resources/testBytecode/Superclass.java new file mode 100644 index 00000000..d58089de --- /dev/null +++ b/src/test/resources/testBytecode/Superclass.java @@ -0,0 +1,6 @@ +public class Superclass { + + public void printMethod() { + System.out.println("Printed in Superclass."); + } +} diff --git a/src/test/resources/testBytecode/TestMyTest.java b/src/test/resources/testBytecode/TestMyTest.java new file mode 100644 index 00000000..e1305f76 --- /dev/null +++ b/src/test/resources/testBytecode/TestMyTest.java @@ -0,0 +1,11 @@ +class TestMyTest{ +public static void main(String[] a){ + //test1 + //new TestClass(); + //test if statement + //new TestIf(new Boolean(true)); + // test lambda + //new TestClass(); + new LamRun(); +} +} diff --git a/src/test/resources/testBytecode/public b/src/test/resources/testBytecode/public new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/test/resources/testBytecode/public @@ -0,0 +1 @@ + diff --git a/src/test/resources/testBytecode/testF.java b/src/test/resources/testBytecode/testF.java new file mode 100644 index 00000000..fa4a50b7 --- /dev/null +++ b/src/test/resources/testBytecode/testF.java @@ -0,0 +1,5 @@ +public class testTets(){ + public static void main(String[] args){ + new tetsF(); + } +} diff --git a/src/test/resources/testBytecode/testTets.java b/src/test/resources/testBytecode/testTets.java new file mode 100644 index 00000000..4f95cbc0 --- /dev/null +++ b/src/test/resources/testBytecode/testTets.java @@ -0,0 +1,5 @@ +public class testTets{ + public static void main(String[] args){ + new TetsF(); + } +} diff --git a/src/test/resources/testBytecode/testTetsF.java b/src/test/resources/testBytecode/testTetsF.java new file mode 100644 index 00000000..fa4a50b7 --- /dev/null +++ b/src/test/resources/testBytecode/testTetsF.java @@ -0,0 +1,5 @@ +public class testTets(){ + public static void main(String[] args){ + new tetsF(); + } +}