Fehler in Umwandlung von GTV zu TPH beheben

This commit is contained in:
JanUlrich 2015-03-04 13:50:09 +01:00
parent 1ec9c3f67f
commit e8538be1c2
4 changed files with 24 additions and 14 deletions

View File

@ -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.

View File

@ -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());
}
}

View File

@ -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<String> mustContain = new Vector<String>();
mustContain.add("String methode");
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
}
*/
@Test
public void run2(){
Vector<String> mustContain = new Vector<String>();
mustContain.add("String var2");
MultipleTypesInsertTester.test(TEST_FILE2, mustContain);
}
}

View File

@ -11,7 +11,7 @@ public class IntTest {
@Test
public void run(){
Vector<String> mustContain = new Vector<String>();
mustContain.add("int var");
mustContain.add("Integer var");
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
}