From 2c9f085cca10f3b9a4e566d97890d6f11df72e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Thu, 9 Aug 2018 18:41:28 +0200 Subject: [PATCH] modified: src/de/dhbwstuttgart/core/JavaTXCompiler.java modified: src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java Zeilen 606 - 623 eingefuegt, um die parallel berechneten Ergebnisse richtig zu filtern TODO - Fuer Variance -1 muss das gleiche gemacht werden - ab Zeile 550: nextSetasListRest muss nach jedem fork aufruf gefiltert werden. --- src/de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- .../typeinference/unify/TypeUnifyTask.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/de/dhbwstuttgart/core/JavaTXCompiler.java index f97d9657..65aa57c5 100644 --- a/src/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -39,7 +39,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; public class JavaTXCompiler { - final boolean parallel = false; + final boolean parallel = true; 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? diff --git a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index 0af05b05..8d0303b9 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -526,7 +526,7 @@ public class TypeUnifyTask extends RecursiveTask>> { //if (remainingSets.isEmpty()) {//muss immer gegeben sein, weil nur 1 Element der topLevelSets mehr als ein Elemet enthaelt //writeLog("Vor unify2 Aufruf: " + eq.toString()); Set> res = new HashSet<>(); - Set> add_res = new HashSet<>(); + Set>> add_res = new HashSet<>(); if(parallel && (variance == 1)) { /* elems.add(a); @@ -560,7 +560,7 @@ public class TypeUnifyTask extends RecursiveTask>> { res = forkOrig.join(); for(TypeUnifyTask fork : forks) { Set> fork_res = fork.join(); - add_res.addAll(fork_res); + add_res.add(fork_res); } } @@ -603,7 +603,24 @@ public class TypeUnifyTask extends RecursiveTask>> { Iterator> nextSetasListIt = new ArrayList>(nextSetasList).iterator(); if (variance == 1) { if (parallel) { - result.addAll(add_res); + for (Set> par_res : add_res) { + if (!isUndefinedPairSetSet(par_res) && isUndefinedPairSetSet(result)) { + //wenn korrektes Ergebnis gefunden alle Fehlerfaelle loeschen + result = par_res; + if (par_res.iterator().next() instanceof WildcardType) { + System.out.println(""); + } + } + else { + if ((isUndefinedPairSetSet(par_res) && isUndefinedPairSetSet(result)) + || (!isUndefinedPairSetSet(par_res) && !isUndefinedPairSetSet(result)) + || result.isEmpty()) { + //alle Fehlerfaelle und alle korrekten Ergebnis jeweils adden + writeLog("RESADD:" + result.toString() + " " + par_res.toString()); + result.addAll(par_res); + } + } + } break; } /* nextSetasList = nextSetasListRest; */