From 5029cca0f1e962213d6dba6676fe0fec3d23741d Mon Sep 17 00:00:00 2001 From: Fayez Abu Alia Date: Thu, 26 Jul 2018 14:37:11 +0200 Subject: [PATCH] Transivitaet Berechnung bei TPHs korrigiert --- .../dhbwstuttgart/bytecode/BytecodeGen.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/de/dhbwstuttgart/bytecode/BytecodeGen.java b/src/de/dhbwstuttgart/bytecode/BytecodeGen.java index 5dac990c..47a19336 100644 --- a/src/de/dhbwstuttgart/bytecode/BytecodeGen.java +++ b/src/de/dhbwstuttgart/bytecode/BytecodeGen.java @@ -287,6 +287,8 @@ public class BytecodeGen implements ASTVisitor { ArrayList simplifiedPairs = new ArrayList<>(); + ArrayList> beforeSimplify = new ArrayList<>(); + MethodAndTPH method; ArrayList methodTphs = new ArrayList<>(); ArrayList methodPairs = new ArrayList<>(); @@ -360,6 +362,13 @@ public class BytecodeGen implements ASTVisitor { superTphRes = tphsInRel.get(tphsInRel.size()-i); i++; } + + if((methodTphs.contains(superTphRes) || !tphExtractor.allTPHS.containsKey(superTphRes)) + && !subTphRes.equals(superTphRes)) { + + beforeSimplify.add(tphsInRel); + } + // teste noch den Fall X < Y und Y nicht in TPHS der Methode // Dann hat man nach der While-Schleife X < Y // Y muss durch Object ersetzt. @@ -371,9 +380,44 @@ public class BytecodeGen implements ASTVisitor { simplifiedPairs.add(sPair); } } + beforeSimplify.forEach(e->{ + System.out.println("=> "); + e.forEach((v,k) -> { + System.out.print(v + "->" + k + ", "); + }); + System.out.println(); + System.out.println("----------------------"); + }); + + if(beforeSimplify.size()>1) { + int i = 0; + while(i e: beforeSimplify) { + if(!e.equals(beforeSimplify.get(i)) && e.containsValue(sub)) { + GenericInsertPair sPair = new GenericInsertPair(e.get(0), sub); + System.out.println("To remove = " + e.get(0)+ " " +e.get(e.size()-1)); + removePair(simplifiedPairs,e.get(0), e.get(e.size()-1)); + simplifiedPairs.add(sPair); + } + } + i++; + } + } + return simplifiedPairs; } + private void removePair(ArrayList simplifiedPairs, TypePlaceholder typePlaceholder, TypePlaceholder typePlaceholder2) { + for(GenericInsertPair p : simplifiedPairs) { + if(p.TA1.equals(typePlaceholder) && p.TA2.equals(typePlaceholder2)) { + simplifiedPairs.remove(p); + return; + } + } + } + @Override public void visit(ParameterList formalParameters) { paramsAndLocals = new HashMap<>();