diff --git a/.gitignore b/.gitignore index 10266eb8..98b5964b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ CVS bin *.class +*.log # Mobile Tools for Java (J2ME) .mtj.tmp/ diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 4a4dd4fa..bd10be77 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -665,29 +665,34 @@ public class Unify if(filter){ Cloner cloner = new Cloner(); - Menge>> temp = new Menge<>(); + Menge>> temp = new Menge<>(); //hier werden gefilterte Constraints gesammelt Menge undMenge = new Menge(); //Die Menge von Pairs, welche in jedem Kartesischen Produkt enthalten sind. undMenge.addAll(cloner.deepClone(Eq1)); - for (Menge> vecvecpair : cartProduktSets){ - Menge> temp2 = new Menge<>(); + Menge>> oderConstraints = new Menge<>();//Die zu filternden Constraints + for (Menge> vecvecpair : cartProduktSets){ if(vecvecpair.size() == 1){//gibt es nur eine UndMenge in diesem Set, dann kommt diese in jedem Karthesischen Produkt vor: undMenge.addAll(cloner.deepClone(vecvecpair.firstElement())); - temp2 = vecvecpair; + temp.add(vecvecpair); }else{//gibt es mehrere Mengen, kann gefiltert werden: - for(Menge pairs : vecvecpair){ - Menge testMenge = new Menge(); - testMenge.addAll(cloner.deepClone(undMenge)); - testMenge.addAll(cloner.deepClone(pairs)); - Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); - if(test.size()>0){ - temp2.add(pairs); - } - else{ - log.debug("Ausgesondertes Constraint: "+pairs); - } - } + oderConstraints.add(vecvecpair); //die Menge zu den zu filternden OderConstraints anfügen } - temp.add(temp2); + } + //Filtere die OderConstraints: + for(Menge> oderConstraint : oderConstraints){ + Menge> filteredOCons = new Menge<>(); //diese Menge sammelt nur Cons + for(Menge pairs : oderConstraint){ + Menge testMenge = new Menge(); + testMenge.addAll(cloner.deepClone(undMenge)); + testMenge.addAll(cloner.deepClone(pairs)); + Menge> test = Unify.unifyFiltered(testMenge, fc_tto, false); + if(test.size()>0){ + filteredOCons.add(pairs); + } + else{ + log.debug("Ausgesondertes Constraint: "+pairs); + } + } + temp.add(filteredOCons); } SetView>> difference = Sets.difference(cartProduktSets, temp); log.debug("Ausgelöschte Constraints: "+difference.toString());