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.Type;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
||||||
|
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Im Grunde Sammlung von Pair s mit Equal-Operatoren.
|
* Im Grunde Sammlung von Pair s mit Equal-Operatoren.
|
||||||
|
@ -327,15 +327,27 @@ public class TypeAssumptions {
|
|||||||
//if(ass.inheritsType(t))return t;
|
//if(ass.inheritsType(t))return t;
|
||||||
if(ass.getIdentifier().equals(t.getName())){
|
if(ass.getIdentifier().equals(t.getName())){
|
||||||
//Generische Variable gefunden!
|
//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();
|
GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext();
|
||||||
if(gtvDeclNode == null || gtvDeclNode.isClass()
|
//Der GTV-Kontext von inNOde
|
||||||
|| !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)
|
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);
|
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:
|
//Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden:
|
||||||
return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode));
|
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 org.junit.Test;
|
||||||
|
|
||||||
|
import de.dhbwstuttgart.logger.Logger;
|
||||||
|
import de.dhbwstuttgart.logger.LoggerConfiguration;
|
||||||
|
import de.dhbwstuttgart.logger.Section;
|
||||||
|
|
||||||
public class GenericTypeVarTest {
|
public class GenericTypeVarTest {
|
||||||
|
|
||||||
private static final String TEST_FILE = "GenericTypeVarTest.jav";
|
private static final String TEST_FILE = "GenericTypeVarTest.jav";
|
||||||
private static final String TEST_FILE2 = "GenericTypeVarTest2.jav";
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Test
|
@Test
|
||||||
public void run(){
|
public void run(){
|
||||||
|
Logger.setStandardConfiguration(new LoggerConfiguration().setOutput(Section.ASSUMPTIONS, System.out));
|
||||||
Vector<String> mustContain = new Vector<String>();
|
Vector<String> mustContain = new Vector<String>();
|
||||||
mustContain.add("String methode");
|
mustContain.add("String methode");
|
||||||
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
|
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
|
@Test
|
||||||
public void run(){
|
public void run(){
|
||||||
Vector<String> mustContain = new Vector<String>();
|
Vector<String> mustContain = new Vector<String>();
|
||||||
mustContain.add("int var");
|
mustContain.add("Integer var");
|
||||||
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
|
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user