diff --git a/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java b/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java index ed4566f2..cf9abbfd 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java @@ -520,9 +520,9 @@ public class FamilyOfGeneratedGenerics { List>> orConsListConverted = new ArrayList<>(); //gehe die OrConstraints der aktuellen Methode durch und teile nach Operator auf ( for(int i=0; i> orConsInternal = new HashMap<>(); List orConsWithEQUAL = new ArrayList(); List orConsWithEXTENDS = new ArrayList(); + HashMap> orConsInternal = new HashMap<>(); for(Constraint con: orCons.get(i)) { Iterator it = con.iterator(); while(it.hasNext()) { @@ -564,10 +564,13 @@ public class FamilyOfGeneratedGenerics { oldConsListConverted.add(new TPHConstraint(((TypePlaceholder) pair.TA1).getName(), ((TypePlaceholder) pair.TA2).getName(), r)); } - // Berechnung der Regel + // dies ist das "R" aus dem ersten Teil, wird im zweiten Teil gebraucht + TypePlaceholder tphR = null; + + // Berechnung des ersten Teils der Regel + Constraint extendsSet = new Constraint(); + Constraint equalSet = new Constraint(); for(int i=0; i extendsSet = new Constraint(); - Constraint equalSet = new Constraint(); //für jede einzelne OrConstraint-Menge gehe durch for(Constraint con: orCons.get(i)) { Iterator it = con.iterator(); @@ -586,6 +589,7 @@ public class FamilyOfGeneratedGenerics { Iterator itEqual = equalSet.iterator(); while(itEqual.hasNext()) { Pair pairEqual = itEqual.next(); + tphR = (TypePlaceholder) (pairEqual.TA2); Pair newPair = new Pair(resSet.resolveType((TypePlaceholder)(pairExtends.TA2)).resolvedType, resSet.resolveType((TypePlaceholder)(pairEqual.TA1)).resolvedType, PairOperator.SMALLERDOT); Iterator itTC = tcOfoldConsSet.iterator(); while(itTC.hasNext()) { @@ -601,6 +605,25 @@ public class FamilyOfGeneratedGenerics { } } } + // Berechnung des zweiten Teils der Regel + Iterator itEqual = equalSet.iterator(); + while(itEqual.hasNext()) { + Pair pairEqual = itEqual.next(); + // prüfe, ob das "R" von vorhin in einem EqualConstraint links auftaucht + if(tphR == pairEqual.TA1) { + tempSet.add(); + } + } + Iterator itExtends = equalSet.iterator(); + while(itExtends.hasNext()) { + Pair pairExtends = itExtends.next(); + // prüfe, ob das "R" von vorhin in einem EqualConstraint links auftaucht + if(tphR == pairExtends.TA1) { + tempSet.add(); + } + + } + } // aus der alten Datenstruktur in die neue Datenstruktur (von Ali)