From a6ca31d509a4fc01de08428cde167091da7ed9d9 Mon Sep 17 00:00:00 2001 From: NoName11234 <47484268+NoName11234@users.noreply.github.com> Date: Tue, 30 Jan 2024 19:37:47 +0100 Subject: [PATCH] changed UnifyTaskModel to UnifyTaskModelParallel --- .../de/dhbwstuttgart/core/JavaTXCompiler.java | 11 ++--------- .../typeinference/unify/TypeUnify.java | 11 +++++++---- .../typeinference/unify/UnifyTaskModel.java | 18 ------------------ .../unify/UnifyTaskModelParallel.java | 4 +++- src/test/java/typeinference/UnifyTest.java | 11 +++-------- 5 files changed, 15 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModel.java diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 1c2184f5a..97eee0d13 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -37,20 +37,13 @@ import de.dhbwstuttgart.typeinference.constraints.ConstraintSet; import de.dhbwstuttgart.typeinference.constraints.Pair; import de.dhbwstuttgart.typeinference.result.ResultSet; import de.dhbwstuttgart.typeinference.typeAlgo.TYPE; -import de.dhbwstuttgart.typeinference.unify.RuleSet; -import de.dhbwstuttgart.typeinference.unify.TypeUnify; -import de.dhbwstuttgart.typeinference.unify.distributeVariance; +import de.dhbwstuttgart.typeinference.unify.*; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.PairOperator; import de.dhbwstuttgart.typeinference.unify.model.PlaceholderType; import de.dhbwstuttgart.typeinference.unify.model.UnifyPair; import de.dhbwstuttgart.typeinference.unify.model.UnifyType; import de.dhbwstuttgart.util.BiRelation; -import de.dhbwstuttgart.typeinference.unify.TypeUnifyTask; -import de.dhbwstuttgart.typeinference.unify.UnifyResultListener; -import de.dhbwstuttgart.typeinference.unify.UnifyResultListenerImpl; -import de.dhbwstuttgart.typeinference.unify.UnifyResultModel; -import de.dhbwstuttgart.typeinference.unify.UnifyTaskModel; import java.io.File; import java.io.FileOutputStream; @@ -73,7 +66,7 @@ public class JavaTXCompiler { Boolean resultmodel = true; public final Map sourceFiles = new HashMap<>(); Boolean log = false; //gibt an ob ein Log-File nach System.getProperty("user.dir")+""/logFiles/"" geschrieben werden soll? - public volatile UnifyTaskModel usedTasks = new UnifyTaskModel(); + public UnifyTaskModelParallel usedTasks = new UnifyTaskModelParallel(); private final DirectoryClassLoader classLoader; static Writer statistics; diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java index 59c23e5df..236049b3b 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnify.java @@ -23,8 +23,9 @@ public class TypeUnify { * @param cons * @return */ - public Set> unify(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { + public Set> unify(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModelParallel taskModel) { ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors(), ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true); + taskModel.setPool(pool); TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, true, new WriterActiveObject(logFile, pool), log, 0, ret, pool); pool.invoke(unifyTask); Set> res = unifyTask.join(); @@ -49,8 +50,9 @@ public class TypeUnify { * @param ret * @return */ - public UnifyResultModel unifyAsync(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { + public UnifyResultModel unifyAsync(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModelParallel taskModel) { ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors(), ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true); + taskModel.setPool(pool); TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, true, new WriterActiveObject(logFile, pool), log, 0, ret, pool); pool.invoke(unifyTask); return ret; @@ -67,8 +69,9 @@ public class TypeUnify { * @param ret * @return */ - public UnifyResultModel unifyParallel(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { + public UnifyResultModel unifyParallel(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModelParallel taskModel) { ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors(), ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true); + taskModel.setPool(pool); TypeUnifyTask unifyTask = //new TypeUnifyTask(undConstrains, oderConstraints, fc, true, logFile, log, 0, ret, usedTasks); new TypeUnifyTask(undConstrains, oderConstraints, fc, true, new WriterActiveObject(logFile, pool), log, 0, ret, pool, statistics); @@ -104,7 +107,7 @@ public class TypeUnify { * @param cons * @return */ - public Set> unifyOderConstraints(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModel usedTasks) { + public Set> unifyOderConstraints(Set undConstrains, List>> oderConstraints, IFiniteClosure fc, Writer logFile, Boolean log, UnifyResultModel ret, UnifyTaskModelParallel taskModel) { TypeUnifyTask unifyTask = new TypeUnifyTask(undConstrains, oderConstraints, fc, false, new WriterActiveObject(logFile, ForkJoinPool.commonPool()), log, 0, ret, ForkJoinPool.commonPool()); unifyTask.statisticsFile = statistics; Set> res = unifyTask.compute(); diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModel.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModel.java deleted file mode 100644 index e60054f0e..000000000 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModel.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.dhbwstuttgart.typeinference.unify; - -import java.util.ArrayList; - -public class UnifyTaskModel { - - ArrayList usedTasks = new ArrayList<>(); - - public synchronized void add(TypeUnifyTask t) { - usedTasks.add(t); - } - - public synchronized void cancel() { - for(TypeUnifyTask t : usedTasks) { - t.myCancel(true); - } - } -} diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModelParallel.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModelParallel.java index 2d6bb040b..2f38facff 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModelParallel.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/UnifyTaskModelParallel.java @@ -10,6 +10,8 @@ public class UnifyTaskModelParallel { } public void cancel(){ - this.pool.shutdown(); + if(this.pool != null) { + this.pool.shutdown(); + } } } diff --git a/src/test/java/typeinference/UnifyTest.java b/src/test/java/typeinference/UnifyTest.java index 3a65aaccf..c080a8605 100644 --- a/src/test/java/typeinference/UnifyTest.java +++ b/src/test/java/typeinference/UnifyTest.java @@ -1,13 +1,8 @@ package typeinference; -import com.google.common.base.Optional; import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.core.JavaTXCompiler; -import de.dhbwstuttgart.parser.scope.JavaClassName; -import de.dhbwstuttgart.syntaxtree.ClassOrInterface; -import de.dhbwstuttgart.syntaxtree.Constructor; import de.dhbwstuttgart.syntaxtree.SourceFile; -import de.dhbwstuttgart.syntaxtree.factory.UnifyTypeFactory; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; import de.dhbwstuttgart.syntaxtree.visual.ASTTypePrinter; import de.dhbwstuttgart.typedeployment.TypeInsert; @@ -18,7 +13,7 @@ import de.dhbwstuttgart.typeinference.constraints.Pair; import de.dhbwstuttgart.typeinference.result.ResultSet; import de.dhbwstuttgart.typeinference.unify.TypeUnify; import de.dhbwstuttgart.typeinference.unify.UnifyResultModel; -import de.dhbwstuttgart.typeinference.unify.UnifyTaskModel; +import de.dhbwstuttgart.typeinference.unify.UnifyTaskModelParallel; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.*; import org.apache.commons.io.output.NullWriter; @@ -93,7 +88,7 @@ public class UnifyTest { TypeUnify unifyAlgo = new TypeUnify(); ConstraintSet< Pair> cons = new ConstraintSet<>(); UnifyResultModel urm = new UnifyResultModel(cons, finiteClosure); - UnifyTaskModel tasks = new UnifyTaskModel(); + UnifyTaskModelParallel tasks = new UnifyTaskModelParallel(); Set> solution = unifyAlgo.unify(undConstraints, oderConstraints, finiteClosure, new NullWriter(), false, urm, tasks); System.out.println(solution.size()); } @@ -122,7 +117,7 @@ public class UnifyTest { TypeUnify unifyAlgo = new TypeUnify(); ConstraintSet< Pair> cons = new ConstraintSet<>(); UnifyResultModel urm = new UnifyResultModel(cons, finiteClosure); - UnifyTaskModel tasks = new UnifyTaskModel(); + UnifyTaskModelParallel tasks = new UnifyTaskModelParallel(); Set> solution = unifyAlgo.unify(undConstraints, oderConstraints, finiteClosure, new NullWriter(), false, urm, tasks); System.out.println(solution.size()); System.out.println(solution);