diff --git a/src/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/de/dhbwstuttgart/core/JavaTXCompiler.java index 05edbaa1..8646b484 100644 --- a/src/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -41,11 +41,17 @@ public class JavaTXCompiler { final CompilationEnvironment environment; public final Map sourceFiles = new HashMap<>(); + Boolean log = true; //gibt an ob ein Log-File nach System.getProperty("user.dir")+"/test/logFiles/log" geschrieben werden soll? public JavaTXCompiler(File sourceFile) throws IOException, ClassNotFoundException { this(Arrays.asList(sourceFile)); } + public JavaTXCompiler(File sourceFile, Boolean log) throws IOException, ClassNotFoundException { + this(sourceFile); + this.log = log; + } + public JavaTXCompiler(List sources) throws IOException, ClassNotFoundException { environment = new CompilationEnvironment(sources); for (File s : sources) { @@ -169,7 +175,7 @@ public class JavaTXCompiler { return y; } ) .collect(Collectors.toCollection(HashSet::new)); varianceInheritance(xConsSet); - Set> result = unify.unifySequential(xConsSet, finiteClosure, logFile); + Set> result = unify.unifySequential(xConsSet, finiteClosure, logFile, log); //Set> result = unify.unify(xConsSet, finiteClosure); System.out.println("RESULT: " + result); logFile.write("RES: " + result.toString()+"\n"); diff --git a/src/de/dhbwstuttgart/typeinference/unify/TypeUnify.java b/src/de/dhbwstuttgart/typeinference/unify/TypeUnify.java index 69ed93b2..fa190cb7 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/TypeUnify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/TypeUnify.java @@ -8,16 +8,16 @@ import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.UnifyPair; public class TypeUnify { - public Set> unify(Set eq, IFiniteClosure fc, FileWriter logFile) { - TypeUnifyTask unifyTask = new TypeUnifyTask(eq, fc, true, logFile); + public Set> unify(Set eq, IFiniteClosure fc, FileWriter logFile, Boolean log) { + TypeUnifyTask unifyTask = new TypeUnifyTask(eq, fc, true, logFile, log); ForkJoinPool pool = new ForkJoinPool(); pool.invoke(unifyTask); Set> res = unifyTask.join(); return res; } - public Set> unifySequential(Set eq, IFiniteClosure fc, FileWriter logFile) { - TypeUnifyTask unifyTask = new TypeUnifyTask(eq, fc, false, logFile); + public Set> unifySequential(Set eq, IFiniteClosure fc, FileWriter logFile, Boolean log) { + TypeUnifyTask unifyTask = new TypeUnifyTask(eq, fc, false, logFile, log); Set> res = unifyTask.compute(); return res; } diff --git a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index b066115b..0545fb95 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -47,6 +47,7 @@ public class TypeUnifyTask extends RecursiveTask>> { private static final long serialVersionUID = 1L; private static int i = 0; private boolean printtag = false; + Boolean log = true; //gibt an ob ein Log-File nach System.getProperty("user.dir")+"/test/logFiles/log" geschrieben werden soll? public static final String rootDirectory = System.getProperty("user.dir")+"/test/logFiles/"; FileWriter logFile; @@ -86,12 +87,13 @@ public class TypeUnifyTask extends RecursiveTask>> { rules = new RuleSet(); } - public TypeUnifyTask(Set eq, IFiniteClosure fc, boolean parallel, FileWriter logFile) { + public TypeUnifyTask(Set eq, IFiniteClosure fc, boolean parallel, FileWriter logFile, Boolean log) { this.eq = eq; this.fc = fc; this.oup = new OrderingUnifyPair(fc); this.parallel = parallel; this.logFile = logFile; + this.log = log; rules = new RuleSet(logFile); } @@ -320,13 +322,13 @@ public class TypeUnifyTask extends RecursiveTask>> { eqPrimePrimeSet.add(eqPrime); else if(eqPrimePrime.isPresent()) { //System.out.println("nextStep: " + eqPrimePrime.get()); - TypeUnifyTask fork = new TypeUnifyTask(eqPrimePrime.get(), fc, true, logFile); + TypeUnifyTask fork = new TypeUnifyTask(eqPrimePrime.get(), fc, true, logFile, log); forks.add(fork); fork.fork(); } else { //System.out.println("nextStep: " + eqPrime); - TypeUnifyTask fork = new TypeUnifyTask(eqPrime, fc, true, logFile); + TypeUnifyTask fork = new TypeUnifyTask(eqPrime, fc, true, logFile, log); forks.add(fork); fork.fork(); } @@ -799,10 +801,14 @@ public class TypeUnifyTask extends RecursiveTask>> { if (first) { //writeLog(pair.toString()+"\n"); Set> x1 = unifyCase1(pair, fc); if (pairOp == PairOperator.SMALLERNEQDOT) { - Set remElem = new HashSet<>(); - remElem.add(pair.getRhsType()); - remElem.add(new ExtendsType(pair.getRhsType())); - remElem.add(new SuperType(pair.getRhsType())); + Set remElem = new HashSet<>(); + remElem.add(new UnifyPair(pair.getLhsType(), pair.getRhsType(), PairOperator.EQUALSDOT)); + x1.remove(remElem); + remElem = new HashSet<>(); + remElem.add(new UnifyPair(pair.getLhsType(), new ExtendsType(pair.getRhsType()), PairOperator.EQUALSDOT)); + x1.remove(remElem); + remElem = new HashSet<>(); + remElem.add(new UnifyPair(pair.getLhsType(), new SuperType(pair.getRhsType()), PairOperator.EQUALSDOT)); x1.remove(remElem); } //System.out.println(x1); @@ -860,17 +866,10 @@ public class TypeUnifyTask extends RecursiveTask>> { // result.get(3).add(unifyCase4((PlaceholderType) lhsType, rhsType, fc)); // Case 5: (Theta <. a) - else if (((pairOp == PairOperator.SMALLERDOT) || (pairOp == PairOperator.SMALLERNEQDOT)) && rhsType instanceof PlaceholderType) + else if ((pairOp == PairOperator.SMALLERDOT) && rhsType instanceof PlaceholderType) if (first) { //writeLog(pair.toString()+"\n"); Set> x1 = unifyCase5(pair, fc); result.get(4).add(x1); - if (pairOp == PairOperator.SMALLERNEQDOT) { - Set remElem = new HashSet<>(); - remElem.add(pair.getLhsType()); - remElem.add(new ExtendsType(pair.getLhsType())); - remElem.add(new SuperType(pair.getLhsType())); - x1.remove(remElem); - } if (x1.isEmpty()) { undefined.add(pair); //Theta ist nicht im FC } @@ -1215,11 +1214,13 @@ public class TypeUnifyTask extends RecursiveTask>> { } void writeLog(String str) { - try { - logFile.write(str+"\n"); - logFile.flush(); + if (log) { + try { + logFile.write(str+"\n"); + logFile.flush(); - } - catch (IOException e) { } + } + catch (IOException e) { } + } } } diff --git a/target/JavaTXcompiler-0.1-jar-with-dependencies.jar b/target/JavaTXcompiler-0.1-jar-with-dependencies.jar index e681dd03..a79c625f 100644 Binary files a/target/JavaTXcompiler-0.1-jar-with-dependencies.jar and b/target/JavaTXcompiler-0.1-jar-with-dependencies.jar differ diff --git a/test/bytecode/javFiles/OL.jav b/test/bytecode/javFiles/OL.jav index 493c2499..dbd746b8 100644 --- a/test/bytecode/javFiles/OL.jav +++ b/test/bytecode/javFiles/OL.jav @@ -1,9 +1,23 @@ import java.lang.Integer; +import java.lang.Double; import java.lang.Boolean; class OL { - m(Integer x) { return x + x; } + m(x) { return x + x; } - m(Boolean x) {return x || x; } -} \ No newline at end of file + //m(x) { return x || x; } + + + } + + +class Main { + + main(x) { + var ol; + ol = new OL(); + return ol.m(x); + } +} + diff --git a/test/bytecode/javFiles/While.jav b/test/bytecode/javFiles/While.jav index 5b983f3e..f4d9d0e9 100644 --- a/test/bytecode/javFiles/While.jav +++ b/test/bytecode/javFiles/While.jav @@ -2,10 +2,10 @@ import java.lang.Integer; // wenn nur ein Import da steht,wird die Type von // dem Literal 2 Number berechnet => Deswegen kann // nicht auf den Stack geladen. -//import java.lang.Long; +import java.lang.Long; public class While { - m(x) { + m(x) { while(x < 2) { x = x+1; }