forked from JavaTX/JavaCompilerCore
Fehler in Umwandlung von GTV zu TPH beheben
This commit is contained in:
parent
1ec9c3f67f
commit
e8538be1c2
@ -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.
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user