forked from JavaTX/JavaCompilerCore
modified: src/main/java/de/dhbwstuttgart/bytecode/genericsGenerator/GeneratedGenericsFinder.java
modified: src/main/java/de/dhbwstuttgart/bytecode/insertGenerics/FamilyOfGeneratedGenerics.java
This commit is contained in:
parent
c15953bbac
commit
1a135ebe5c
@ -136,7 +136,7 @@ public class GeneratedGenericsFinder implements ASTVisitor {
|
|||||||
//PL 2020-10-16: Ab hier GGenerics implementieren durch Ali
|
//PL 2020-10-16: Ab hier GGenerics implementieren durch Ali
|
||||||
//Rueckgabe an generatedGenericsForSF
|
//Rueckgabe an generatedGenericsForSF
|
||||||
fogg = new FamilyOfGeneratedGenerics(tphExtractor);
|
fogg = new FamilyOfGeneratedGenerics(tphExtractor);
|
||||||
|
|
||||||
System.out.println("fogg.allConstraints: "+ fogg.allConstraints);
|
System.out.println("fogg.allConstraints: "+ fogg.allConstraints);
|
||||||
System.out.println("fogg.posOfTPHs: "+ fogg.posOfTPHs);
|
System.out.println("fogg.posOfTPHs: "+ fogg.posOfTPHs);
|
||||||
System.out.println("fogg.classConstraints: "+ fogg.classConstraints);
|
System.out.println("fogg.classConstraints: "+ fogg.classConstraints);
|
||||||
|
@ -35,12 +35,26 @@ public class FamilyOfGeneratedGenerics {
|
|||||||
cs_cl.add(cons);
|
cs_cl.add(cons);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List<ClassConstraint> classConstraints2 = transitiveSubtypeForClassTypes(cs, cs_cl); // in Klammer classConstraints1 oder constraintsSet? beides eher
|
boolean equalsConstraintsList = false;
|
||||||
for (ClassConstraint cons: classConstraints2) {
|
List<ClassConstraint> tempList = new ArrayList<>();
|
||||||
if (!checkForDuplicates(cons, cs_cl)) {
|
do {
|
||||||
cs_cl.add(cons);
|
List<ClassConstraint> classConstraints2 = new ArrayList<>();
|
||||||
|
classConstraints2 = transitiveSubtypeForClassTypes(cs, cs_cl); // in Klammer classConstraints1 oder constraintsSet? beides eher
|
||||||
|
if (classConstraints2 == tempList) {
|
||||||
|
equalsConstraintsList = true;
|
||||||
}
|
}
|
||||||
}
|
for (ClassConstraint cons: classConstraints2) {
|
||||||
|
if (!checkForDuplicates(cons, cs_cl)) {
|
||||||
|
cs_cl.add(cons);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tempList = new ArrayList<>(classConstraints2);
|
||||||
|
for (ClassConstraint cc : tempList) {
|
||||||
|
classConstraints2.remove(cc);
|
||||||
|
System.out.println(classConstraints2);
|
||||||
|
}
|
||||||
|
}while(!equalsConstraintsList);
|
||||||
|
|
||||||
List<ClassConstraint> classConstraints3 = hasNoSupertypeForClassTypes(cs, cs_cl, posOfTphs);
|
List<ClassConstraint> classConstraints3 = hasNoSupertypeForClassTypes(cs, cs_cl, posOfTphs);
|
||||||
for (ClassConstraint cons: classConstraints3) {
|
for (ClassConstraint cons: classConstraints3) {
|
||||||
if (!checkForDuplicates(cons, cs_cl)) {
|
if (!checkForDuplicates(cons, cs_cl)) {
|
||||||
@ -113,7 +127,7 @@ public class FamilyOfGeneratedGenerics {
|
|||||||
*/
|
*/
|
||||||
public static List<ClassConstraint> typeOfANodeOfAField(List<TPHConstraint> allConstraints, HashMap<String, PairTphMethod<PositionFinder.Position, String>> posOfTphs) {
|
public static List<ClassConstraint> typeOfANodeOfAField(List<TPHConstraint> allConstraints, HashMap<String, PairTphMethod<PositionFinder.Position, String>> posOfTphs) {
|
||||||
//RuntimeException re = new RuntimeException("enthält EQUALS-Relation");
|
//RuntimeException re = new RuntimeException("enthält EQUALS-Relation");
|
||||||
List<ClassConstraint> tempCC= new ArrayList<>();
|
List<ClassConstraint> tempCC = new ArrayList<>();
|
||||||
for(TPHConstraint allCons: allConstraints){
|
for(TPHConstraint allCons: allConstraints){
|
||||||
if(posOfTphs.containsKey(allCons.getLeft()) && allCons.getRight()!=null && allCons.getRel()==Relation.EXTENDS) {
|
if(posOfTphs.containsKey(allCons.getLeft()) && allCons.getRight()!=null && allCons.getRel()==Relation.EXTENDS) {
|
||||||
for(String tph: posOfTphs.keySet()) {
|
for(String tph: posOfTphs.keySet()) {
|
||||||
@ -137,15 +151,19 @@ public class FamilyOfGeneratedGenerics {
|
|||||||
* {T' <. T'' | \exists T: (T <. T') \in cs_cl, (T' <. T'') \in cs }
|
* {T' <. T'' | \exists T: (T <. T') \in cs_cl, (T' <. T'') \in cs }
|
||||||
*/
|
*/
|
||||||
public static List<ClassConstraint> transitiveSubtypeForClassTypes(List<TPHConstraint> allConstraints, List<ClassConstraint> cs_cl) {
|
public static List<ClassConstraint> transitiveSubtypeForClassTypes(List<TPHConstraint> allConstraints, List<ClassConstraint> cs_cl) {
|
||||||
List<ClassConstraint> tempCC= new ArrayList<>();
|
List<ClassConstraint> tempCC = new ArrayList<>();
|
||||||
|
ClassConstraint consToAdd;
|
||||||
for(ClassConstraint cCons: cs_cl) {
|
for(ClassConstraint cCons: cs_cl) {
|
||||||
if(cCons.getLeft() != null && cCons.getRel()==Relation.EXTENDS) {
|
if(cCons.getLeft() != null && cCons.getRel()==Relation.EXTENDS) {
|
||||||
for(TPHConstraint allCons: allConstraints) {
|
for(TPHConstraint allCons: allConstraints) {
|
||||||
if(cCons.getRight() == allCons.getLeft() && allCons.getRight() != null && allCons.getRel()==Relation.EXTENDS){
|
if(cCons.getRight() == allCons.getLeft() && allCons.getRight() != null && allCons.getRel()==Relation.EXTENDS){
|
||||||
ClassConstraint consToAdd = new ClassConstraint(allCons.getLeft(), allCons.getRight(), allCons.getRel());
|
consToAdd = new ClassConstraint(allCons.getLeft(), allCons.getRight(), allCons.getRel());
|
||||||
if (!checkForDuplicates(consToAdd, tempCC)) {
|
if (!checkForDuplicates(consToAdd, tempCC)) {
|
||||||
tempCC.add(consToAdd);
|
tempCC.add(consToAdd);
|
||||||
}
|
}
|
||||||
|
// if (tempCC != null) {
|
||||||
|
// transitiveSubtypeForClassTypes(allConstraints, tempCC);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -279,12 +297,15 @@ public class FamilyOfGeneratedGenerics {
|
|||||||
* nimm die Menge cs_cl aus cs_m raus
|
* nimm die Menge cs_cl aus cs_m raus
|
||||||
*/
|
*/
|
||||||
public static List<MethodConstraint> methodTypesWithoutClassTypes(List<ClassConstraint> cs_cl, List<MethodConstraint> cs_m) {
|
public static List<MethodConstraint> methodTypesWithoutClassTypes(List<ClassConstraint> cs_cl, List<MethodConstraint> cs_m) {
|
||||||
//TODO:
|
// erstelle Kopie der Liste cs_cl
|
||||||
List<TPHConstraint> tempCC = new ArrayList<>();
|
List<TPHConstraint> tempCC = new ArrayList<>();
|
||||||
for(ClassConstraint cc: cs_cl) {
|
for(ClassConstraint cc: cs_cl) {
|
||||||
TPHConstraint tphC = new TPHConstraint(cc.getLeft(), cc.getRight(), cc.getRel());
|
TPHConstraint tphC = new TPHConstraint(cc.getLeft(), cc.getRight(), cc.getRel());
|
||||||
tempCC.add(tphC);
|
tempCC.add(tphC);
|
||||||
}
|
}
|
||||||
|
// Transitive Hülle von cs_cl
|
||||||
|
List<TPHConstraint> tcOfCsCl = buildTransitiveClosure(tempCC);
|
||||||
|
|
||||||
List<TPHConstraint> tempMC = new ArrayList<>();
|
List<TPHConstraint> tempMC = new ArrayList<>();
|
||||||
for(MethodConstraint mc: cs_m) {
|
for(MethodConstraint mc: cs_m) {
|
||||||
TPHConstraint tphC = new TPHConstraint(mc.getLeft(), mc.getRight(), mc.getRel());
|
TPHConstraint tphC = new TPHConstraint(mc.getLeft(), mc.getRight(), mc.getRel());
|
||||||
@ -294,7 +315,7 @@ public class FamilyOfGeneratedGenerics {
|
|||||||
tempMC2.addAll(tempMC);
|
tempMC2.addAll(tempMC);
|
||||||
List<MethodConstraint> tempMCToReturn = new ArrayList<>();
|
List<MethodConstraint> tempMCToReturn = new ArrayList<>();
|
||||||
|
|
||||||
for(TPHConstraint cc: tempCC) {
|
for(TPHConstraint cc: tcOfCsCl) {
|
||||||
for(TPHConstraint mc: tempMC) {
|
for(TPHConstraint mc: tempMC) {
|
||||||
if(cc.getLeft().equals(mc.getLeft()) && cc.getRight().equals(mc.getRight())) {
|
if(cc.getLeft().equals(mc.getLeft()) && cc.getRight().equals(mc.getRight())) {
|
||||||
tempMC2.remove(mc);
|
tempMC2.remove(mc);
|
||||||
|
Loading…
Reference in New Issue
Block a user