diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java index 5d60428b2..1a878aa4b 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java @@ -44,14 +44,14 @@ import org.apache.commons.io.output.NullOutputStream; */ public class RuleSet implements IRuleSet{ - Writer logFile; + WriterActiveObject logFile; public RuleSet() { super(); - logFile = new OutputStreamWriter(new NullOutputStream()); + logFile = new WriterActiveObject(new OutputStreamWriter(new NullOutputStream())); } - RuleSet(Writer logFile) { + RuleSet(WriterActiveObject logFile) { this.logFile = logFile; } @@ -867,14 +867,8 @@ public class RuleSet implements IRuleSet{ UnifyType r = x.getRhsType(); if (r instanceof PlaceholderType) { ((PlaceholderType)r).disableWildcardtable(); } } ); - try { - logFile.write("FUNgreater: " + pair + "\n"); - logFile.write("FUNred: " + result + "\n"); - logFile.flush(); - } - catch (IOException e) { - System.out.println("logFile-Error"); - } + logFile.write("FUNgreater: " + pair + "\n"); + logFile.write("FUNred: " + result + "\n"); return Optional.of(result); } @@ -917,14 +911,10 @@ public class RuleSet implements IRuleSet{ UnifyType r = x.getRhsType(); if (r instanceof PlaceholderType) { ((PlaceholderType)r).disableWildcardtable(); } } ); - try { - logFile.write("FUNgreater: " + pair + "\n"); - logFile.write("FUNgreater: " + result + "\n"); - logFile.flush(); - } - catch (IOException e) { - System.out.println("lofFile-Error"); - } + + logFile.write("FUNgreater: " + pair + "\n"); + logFile.write("FUNgreater: " + result + "\n"); + return Optional.of(result); } @@ -967,14 +957,9 @@ public class RuleSet implements IRuleSet{ UnifyType r = x.getRhsType(); if (r instanceof PlaceholderType) { ((PlaceholderType)r).disableWildcardtable(); } } ); - try { - logFile.write("FUNgreater: " + pair + "\n"); - logFile.write("FUNsmaller: " + result + "\n"); - logFile.flush(); - } - catch (IOException e) { - System.out.println("lofFile-Error"); - } + + logFile.write("FUNgreater: " + pair + "\n"); + logFile.write("FUNsmaller: " + result + "\n"); return Optional.of(result); } diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java index 3745521bf..f314d21e8 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java @@ -1,19 +1,13 @@ package de.dhbwstuttgart.typeinference.unify; -import java.io.FileWriter; import java.io.IOException; import java.io.Writer; -import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.concurrent.ForkJoinPool; -import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.typeinference.constraints.Constraint; -import de.dhbwstuttgart.typeinference.constraints.ConstraintSet; -import de.dhbwstuttgart.typeinference.constraints.Pair; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; -import de.dhbwstuttgart.typeinference.unify.model.FiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.UnifyPair; public class TypeUnify { @@ -30,7 +24,7 @@ public class TypeUnify { * @return */ public Set> unify(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { - TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, true, logFile, log, 0, ret, usedTasks); + TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, true, new WriterActiveObject(logFile), log, 0, ret, usedTasks); ForkJoinPool pool = new ForkJoinPool(); pool.invoke(unifyTask); Set> res = unifyTask.join(); @@ -56,7 +50,7 @@ public class TypeUnify { * @return */ public UnifyResultModel unifyAsync(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { - TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, true, logFile, log, 0, ret, usedTasks); + TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, true, new WriterActiveObject(logFile), log, 0, ret, usedTasks); ForkJoinPool pool = new ForkJoinPool(); pool.invoke(unifyTask); return ret; @@ -75,15 +69,15 @@ public class TypeUnify { */ public UnifyResultModel unifyParallel(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { TypeUnifyTask unifyTask = //new TypeUnifyTask(undConstrains, oderConstraints, fc, true, logFile, log, 0, ret, usedTasks); - new TypeUnifyTask(undConstrains, oderConstraints, fc, true, logFile, log, 0, ret, usedTasks, statistics); + new TypeUnifyTask(undConstrains, oderConstraints, fc, true, new WriterActiveObject(logFile), log, 0, ret, usedTasks, statistics); ForkJoinPool pool = new ForkJoinPool(); pool.invoke(unifyTask); Set> res = unifyTask.join(); try { logFile.write("\nnoShortendElements: " + unifyTask.noShortendElements +"\n"); logFile.flush(); - unifyTask.statistics.write("Backtracking: " + unifyTask.noBacktracking); - unifyTask.statistics.write("\nLoops: " + unifyTask.noLoop); + unifyTask.statisticsFile.write("Backtracking: " + unifyTask.noBacktracking); + unifyTask.statisticsFile.write("\nLoops: " + unifyTask.noLoop); } catch (IOException e) { System.err.println("no log-File"); @@ -110,8 +104,8 @@ public class TypeUnify { * @return */ public Set> unifyOderConstraints(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { - TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, false, logFile, log, 0, ret, usedTasks); - unifyTask.statistics = statistics; + TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, false, new WriterActiveObject(logFile), log, 0, ret, usedTasks); + unifyTask.statisticsFile = statistics; Set> res = unifyTask.compute(); try { logFile.write("\nnoShortendElements: " + unifyTask.noShortendElements +"\n"); diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify2Task.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify2Task.java index 61d6ce8ef..f182851f4 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify2Task.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify2Task.java @@ -23,13 +23,13 @@ public class TypeUnify2Task extends TypeUnifyTask { TypeUnify2Task(Set> setToFlatten, Set eq, List>> oderConstraints, Set nextSetElement, - IFiniteClosure fc, boolean parallel, Writer logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks, + IFiniteClosure fc, boolean parallel, WriterActiveObject logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks, Set methodSignatureConstraintUebergabe, Writer statistics) { this(setToFlatten, eq, oderConstraints, nextSetElement, fc, parallel, logFile, log, rekTiefe, urm, usedTasks, methodSignatureConstraintUebergabe ); } - public TypeUnify2Task(Set> setToFlatten, Set eq, List>> oderConstraints, Set nextSetElement, IFiniteClosure fc, boolean parallel, Writer logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks, Set methodSignatureConstraintUebergabe) { + public TypeUnify2Task(Set> setToFlatten, Set eq, List>> oderConstraints, Set nextSetElement, IFiniteClosure fc, boolean parallel, WriterActiveObject logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks, Set methodSignatureConstraintUebergabe) { super(eq, oderConstraints, fc, parallel, logFile, log, rekTiefe, urm, usedTasks); this.setToFlatten = setToFlatten; this.nextSetElement = nextSetElement; @@ -64,13 +64,6 @@ public class TypeUnify2Task extends TypeUnifyTask { } public void closeLogFile() { - - try { - logFile.close(); - } - catch (IOException ioE) { - System.err.println("no log-File" + thNo); - } - + logFile.close(); } } diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index 0b90cdc03..e2ae03b17 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -17,17 +17,12 @@ import java.util.concurrent.RecursiveTask; import java.util.function.BiFunction; import java.util.function.BinaryOperator; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.apache.commons.io.output.NullOutputStream; -import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.exceptions.TypeinferenceException; import de.dhbwstuttgart.parser.NullToken; -import de.dhbwstuttgart.syntaxtree.factory.UnifyTypeFactory; import de.dhbwstuttgart.typeinference.constraints.Constraint; -import de.dhbwstuttgart.typeinference.constraints.ConstraintSet; -import de.dhbwstuttgart.typeinference.result.ResultSet; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; import de.dhbwstuttgart.typeinference.unify.interfaces.IMatch; import de.dhbwstuttgart.typeinference.unify.interfaces.IRuleSet; @@ -47,7 +42,6 @@ import de.dhbwstuttgart.typeinference.unify.model.UnifyType; import de.dhbwstuttgart.typeinference.unify.model.WildcardType; import de.dhbwstuttgart.util.Pair; import de.dhbwstuttgart.typeinference.unify.model.OrderingUnifyPair; -import de.dhbwstuttgart.core.JavaTXCompiler; import java.io.File; import java.io.FileWriter; @@ -55,8 +49,6 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; -import com.google.common.collect.Ordering; - /** * Implementation of the type unification algorithm @@ -85,8 +77,7 @@ public class TypeUnifyTask extends RecursiveTask>> { Integer MaxNoOfThreads = 128; public static final String rootDirectory = System.getProperty("user.dir")+"/test/logFiles/"; - Writer logFile; - + protected WriterActiveObject logFile; /** * The implementation of setOps that will be used during the unification */ @@ -135,7 +126,7 @@ public class TypeUnifyTask extends RecursiveTask>> { volatile UnifyTaskModel usedTasks; - static Writer statistics; + static Writer statisticsFile; public TypeUnifyTask() { rules = new RuleSet(); @@ -156,11 +147,11 @@ public class TypeUnifyTask extends RecursiveTask>> { */ //statistics - public TypeUnifyTask(Set eq, List>> oderConstraints, IFiniteClosure fc, boolean parallel, Writer logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks, Writer statistics) { + public TypeUnifyTask(Set eq, List>> oderConstraints, IFiniteClosure fc, boolean parallel, WriterActiveObject logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks, Writer statisticsFile) { this(eq,oderConstraints, fc, parallel, logFile, log, rekTiefe, urm, usedTasks); - this.statistics = statistics; + this.statisticsFile = statisticsFile; } - public TypeUnifyTask(Set eq, List>> oderConstraints, IFiniteClosure fc, boolean parallel, Writer logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks) { + public TypeUnifyTask(Set eq, List>> oderConstraints, IFiniteClosure fc, boolean parallel, WriterActiveObject logFile, Boolean log, int rekTiefe, UnifyResultModel urm, UnifyTaskModel usedTasks) { this.eq = eq; //this.oderConstraints = oderConstraints.stream().map(x -> x.stream().map(y -> new HashSet<>(y)).collect(Collectors.toSet(HashSet::new))).collect(Collectors.toList(ArrayList::new)); this.oderConstraintsField = oderConstraints; /*.stream().map(x -> { @@ -186,8 +177,11 @@ public class TypeUnifyTask extends RecursiveTask>> { thNo = totalnoOfThread; writeLog("thNo2 " + thNo); try { - this.logFile = log ? new FileWriter(new File(System.getProperty("user.dir") + "/logFiles/" + "Thread_"+thNo)) - : new OutputStreamWriter(new NullOutputStream()); + if(log){ + this.logFile = new WriterActiveObject(new FileWriter(new File(System.getProperty("user.dir") + "/logFiles/" + "Thread_"+thNo))); + }else{ + this.logFile = new WriterActiveObject(new OutputStreamWriter(new NullOutputStream())); + } logFile.write(""); } catch (IOException e) { @@ -269,12 +263,9 @@ public class TypeUnifyTask extends RecursiveTask>> { .collect(Collectors.toCollection(ArrayList::new)); Set> res = unify(neweq, remainingOderconstraints, fc, parallel, rekTiefeField, new HashSet<>()); noOfThread--; - try { - logFile.close(); - } - catch (IOException ioE) { - System.err.println("no log-File"); - } + + logFile.close(); + if (isUndefinedPairSetSet(res)) { //fuer debug-Zwecke ArrayList al = res.stream().map(x -> x.stream().collect(Collectors.toCollection(ArrayList::new))) @@ -2608,24 +2599,19 @@ public class TypeUnifyTask extends RecursiveTask>> { void writeLog(String str) { if (log && finalresult) { - try { - logFile.write("Thread no.:" + thNo + "\n"); - logFile.write("noOfThread:" + noOfThread + "\n"); - logFile.write("parallel:" + parallel + "\n"); - logFile.write(str+"\n\n"); - logFile.flush(); - } - catch (IOException e) { - System.err.println("kein LogFile"); - } + logFile.write("Thread no.:" + thNo + "\n" + + "noOfThread:" + noOfThread + "\n" + + "parallel:" + parallel + "\n" + + str+"\n\n" + ); } } void writeStatistics(String str) { if (finalresult) { try { - statistics.write("Thread No. " + thNo + ": " + str + "\n"); - statistics.flush(); + statisticsFile.write("Thread No. " + thNo + ": " + str + "\n"); + statisticsFile.flush(); } catch (IOException e) {