diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index e86335f0..a856d6d9 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -5,6 +5,7 @@ import java.util.Vector; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.exceptions.DebugException; /** * Im Grunde Sammlung von Pair s mit Equal-Operatoren. diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index acd08a43..ecb6c6c5 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -327,15 +327,27 @@ public class TypeAssumptions { //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ //Generische Variable gefunden! + //Erkennen, ob sich inNode im gleichen Kontext wie die GTV aus den Assumptions befindet. + boolean sameContext = true; + //Der GTV-Kontext der einzusetzenden GTV GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext(); - if(gtvDeclNode == null || gtvDeclNode.isClass() - || !gtvDeclNode.equals(inNode.getGTVDeclarationContext())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) + //Der GTV-Kontext von inNOde + GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext(); + //Überprüfungen (siehe Dokumentation): + if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert + if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false; + }else{ //GTV wurde in Methode oder Feld definiert: + if(! gtvNode.equals(gtvDeclNode))sameContext = false; + } + + if(sameContext){ + TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); + return new ConstraintType(ass.getAssumedType()); + }else{ TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode)); } - TypeAssumptions.log.debug(t+" ist in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); - return new ConstraintType(ass.getAssumedType()); } } diff --git a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java index 40aad284..0721692c 100644 --- a/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java +++ b/test/plugindevelopment/TypeInsertTests/GenericTypeVarTest.java @@ -4,23 +4,20 @@ import java.util.Vector; import org.junit.Test; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; + public class GenericTypeVarTest { private static final String TEST_FILE = "GenericTypeVarTest.jav"; - private static final String TEST_FILE2 = "GenericTypeVarTest2.jav"; - /* @Test public void run(){ + Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.ASSUMPTIONS, System.out)); Vector mustContain = new Vector(); mustContain.add("String methode"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); } - */ - @Test - public void run2(){ - Vector mustContain = new Vector(); - mustContain.add("String var2"); - MultipleTypesInsertTester.test(TEST_FILE2, mustContain); - } + } diff --git a/test/plugindevelopment/TypeInsertTests/IntTest.java b/test/plugindevelopment/TypeInsertTests/IntTest.java index 8020e667..95fd200f 100644 --- a/test/plugindevelopment/TypeInsertTests/IntTest.java +++ b/test/plugindevelopment/TypeInsertTests/IntTest.java @@ -11,7 +11,7 @@ public class IntTest { @Test public void run(){ Vector mustContain = new Vector(); - mustContain.add("int var"); + mustContain.add("Integer var"); MultipleTypesInsertTester.test(this.TEST_FILE, mustContain); }