From d1ad6e218aa04f8a1d4a342d708351db7d306e8d Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Mon, 29 Mar 2021 10:45:21 +0200 Subject: [PATCH] modified: src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java modified: src/test/java/insertGenerics/TestTwoArgs.java --- .../FamilyOfGeneratedGenerics.java | 24 +++++++++++-------- src/test/java/insertGenerics/TestTwoArgs.java | 2 ++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java b/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java index cd479b20..5f691554 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java @@ -513,8 +513,8 @@ public class FamilyOfGeneratedGenerics { public static List secondLineMethodDefinition(List allConstraints, HashMap>> posOfTphs, MethodAndTPH methodAndTPH, ResultSet resSet, Set oldCons) { List tempMC = new ArrayList<>(); //für Ergebnisse basierend auf der neuen Datenstruktur (Ali) - Set tempSet = new HashSet<>(); //für Ergebnisse des ersten Teils basierend auf der alten Datenstruktur - Set tempSet2 = new HashSet<>(); //für Ergebnisse des zweiten Teils basierend auf der alten Datenstruktur + Set tempSet = new HashSet<>(); //für Ergebnisse des ersten Teils der Bedinung basierend auf der alten Datenstruktur + Set tempSet2 = new HashSet<>(); //für Ergebnisse des zweiten Teils der Bedingung basierend auf der alten Datenstruktur Set tcOfoldConsSet = buildTransitiveClosureForCP(oldCons, resSet); List tcOfCs = buildTransitiveClosure(allConstraints); MethodAndTPH methAndTphs = methodAndTPH; @@ -572,7 +572,7 @@ public class FamilyOfGeneratedGenerics { // Constraint extendsSetAllOfOr = new Constraint(); // Constraint equalSetAllOfOr = new Constraint(); - // Berechnung des ersten Teils der Regel + // Berechnung des ersten Teils der Bedingung der Regel for(int i=0; i extendsSet = new Constraint(); Constraint equalSet = new Constraint(); @@ -597,15 +597,18 @@ public class FamilyOfGeneratedGenerics { while(itEqual.hasNext()) { Pair pairEqual = itEqual.next(); // tphR = (TypePlaceholder) (pairEqual.TA2); + //newPair entspricht \sigma(T'_0) < \sigma(R_0) + //TODO: Überprüfen: newPair und tras clos ohne resolvedType 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()) { + while(itTC.hasNext()) {//ueberpruefen ob newPair in transitiv closure Pair pairTC = itTC.next(); if(resSet.resolveType((TypePlaceholder)(pairTC.TA1)).resolvedType == newPair.TA1 && resSet.resolveType((TypePlaceholder)(pairTC.TA2)).resolvedType == newPair.TA2 && pairTC.OperatorSmallerDot() && newPair.OperatorSmallerDot()) { //erst hier bei pairTC resolvedType, damit Pairs aus oldCons in der Methode zur Berechnung von der transitiven Hülle nicht in eine Endlosschleife kommen (Cycles!) if(newPair.TA1 != newPair.TA2) { //eliminieren der Fälle wie AA<.AA if (!checkForDuplicatesForSets(newPair, tempSet)) { - tempSet.add(newPair); + //TODO: evtl. pairExtends hinzufuegen + tempSet.add(newPair); } } } @@ -637,7 +640,7 @@ public class FamilyOfGeneratedGenerics { } - // Berechnung des zweiten Teils der Regel + // Berechnung des zweiten Teils der Bedingung der Regel for(int i=0; i extendsSet = new Constraint(); Constraint equalSet = new Constraint(); @@ -658,6 +661,7 @@ public class FamilyOfGeneratedGenerics { Iterator itEqual2 = equalSet.iterator(); while (itEqual2.hasNext()) { Pair pairEqual2 = itEqual2.next(); + //TODO: Auf trans.FamilyOfGeneratedGenerics Huelle pruefen Pair newPair2 = new Pair(resSet.resolveType((TypePlaceholder) (pairExtends2.TA2)).resolvedType, resSet.resolveType((TypePlaceholder) (pairEqual2.TA1)).resolvedType, PairOperator.SMALLERDOT); TypePlaceholder tphR = (TypePlaceholder) pairEqual2.TA2; Iterator itUndCons = undCons.iterator(); @@ -731,7 +735,7 @@ public class FamilyOfGeneratedGenerics { } else if (p.GetOperator() == PairOperator.EQUALSDOT) { r = Relation.EQUAL; } - for(TPHConstraint tphCons: tcOfCs) { + for(TPHConstraint tphCons: tcOfCs) {//TODO: hier werden Elemente der Trans. clo herausgenommen, aber die dazugehoerigen OrCons nicht. if(ta1 == tphCons.getLeft() && ta2 == tphCons.getRight() && r==Relation.EXTENDS) { MethodConstraint mc = new MethodConstraint(ta1, ta2, r); if(!checkForDuplicates(mc, tempMC)) { @@ -815,7 +819,7 @@ public class FamilyOfGeneratedGenerics { - public static List methodTypesWithoutClassTypesNEW(List tphsToCompute, List cs_m, HashMap>> posOfTphs) { + public static List methodTypesWithoutClassTypesNEW(List tphsToCompute, List cs_m) { List tempMC = new ArrayList<>(cs_m); List tempMC2 = new ArrayList<>(cs_m); List toRemove = new ArrayList<>(); @@ -824,7 +828,7 @@ public class FamilyOfGeneratedGenerics { if(tphCons.getLeft() == tph) { toRemove.add(tphCons.getRight()); tempMC2.remove(tphCons); - tempMC2 = methodTypesWithoutClassTypesNEW(toRemove,tempMC2,posOfTphs); + tempMC2 = methodTypesWithoutClassTypesNEW(toRemove,tempMC2); } } } @@ -884,7 +888,7 @@ public class FamilyOfGeneratedGenerics { for (PairTphMethod p : posOfTphs.get(tph)) { if(p.fst == PositionFinder.Position.FIELD) { tphs.add(tph); - mcWithoutCc = methodTypesWithoutClassTypesNEW(tphs, listToAdd, posOfTphs); + mcWithoutCc = methodTypesWithoutClassTypesNEW(tphs, listToAdd); } } } diff --git a/src/test/java/insertGenerics/TestTwoArgs.java b/src/test/java/insertGenerics/TestTwoArgs.java index faa405e2..95d1876c 100644 --- a/src/test/java/insertGenerics/TestTwoArgs.java +++ b/src/test/java/insertGenerics/TestTwoArgs.java @@ -80,6 +80,8 @@ public class TestTwoArgs { lmc.add(new MethodConstraint("AG", "P", Relation.EXTENDS)); lmc.add(new MethodConstraint("AH", "T", Relation.EXTENDS)); lmc.add(new MethodConstraint("T", "AP", Relation.EXTENDS)); + lmc.add(new MethodConstraint("AL", "AF", Relation.EXTENDS)); + lmc.add(new MethodConstraint("P", "AL", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH AFmain(TPH AGTPH AH)", lmc); FamilyOfGeneratedGenerics fogg = compiler.fogg;