forked from JavaTX/JavaCompilerCore
createPair Methode entfernen. Die Generics können nicht generell aufgelöst werden. (unvollständiger Zustand)
This commit is contained in:
parent
fea86460e8
commit
48dc76646b
@ -1,70 +0,0 @@
|
|||||||
package de.dhbwstuttgart.typeinference.constraints;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.exceptions.DebugException;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.GenericTypeVar;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.TypeScope;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.GenericRefType;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
|
|
||||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
|
||||||
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceBlockInformation;
|
|
||||||
import de.dhbwstuttgart.typeinference.unify.model.PairOperator;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ConstraintsFactory {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Erstellt ein Pair Element für den Unify.
|
|
||||||
* Die Methode löst gleichzeitig GTVs in den Typen t1 und t2 auf.
|
|
||||||
* @param t1
|
|
||||||
* @param t2
|
|
||||||
* @param equalsdot
|
|
||||||
* @param currentScope
|
|
||||||
* @param additionalScope
|
|
||||||
* @param resolver
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static Pair createPair(RefTypeOrTPHOrWildcardOrGeneric t1, RefTypeOrTPHOrWildcardOrGeneric t2,
|
|
||||||
PairOperator equalsdot, TypeScope currentScope, TypeScope additionalScope,
|
|
||||||
GenericsResolver resolver){
|
|
||||||
//Check whether Generics are in the same class and resolve all other generics:
|
|
||||||
return new Pair(checkGeneric(t1, currentScope, additionalScope,resolver),
|
|
||||||
checkGeneric(t2, currentScope,additionalScope, resolver), equalsdot);
|
|
||||||
}
|
|
||||||
public static Pair createPair(RefTypeOrTPHOrWildcardOrGeneric t1,
|
|
||||||
RefTypeOrTPHOrWildcardOrGeneric t2, TypeScope currentScope, TypeScope additionalScope,
|
|
||||||
GenericsResolver resolver){
|
|
||||||
return createPair(t1,t2,PairOperator.SMALLERDOT, currentScope, additionalScope, resolver);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static RefTypeOrTPHOrWildcardOrGeneric checkGeneric(RefTypeOrTPHOrWildcardOrGeneric type,
|
|
||||||
TypeScope currentScope, TypeScope additionalScope,
|
|
||||||
GenericsResolver resolver){
|
|
||||||
if(type instanceof GenericRefType){
|
|
||||||
//TODO: Für Generics müssen auch noch Constraints generiert werden
|
|
||||||
for(GenericTypeVar genericTypeVar : currentScope.getGenerics()){
|
|
||||||
if(genericTypeVar.getName().toString().equals(((GenericRefType)type).getName().toString())){
|
|
||||||
return new RefType(((GenericRefType)type).getName(),type.getOffset());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Nicht in den Generics in diesem Kontext enthalten:
|
|
||||||
TypePlaceholder ret = null;
|
|
||||||
for(GenericTypeVar genericTypeVar : additionalScope.getGenerics()){
|
|
||||||
if(genericTypeVar.getName().equals(((GenericRefType)type).getName())){
|
|
||||||
ret = resolver.resolve(genericTypeVar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(ret == null)
|
|
||||||
throw new DebugException("Der Generic " + ((GenericRefType) type).getName() + " kommt in keine TypeScope vor!");
|
|
||||||
return ret;
|
|
||||||
}else{
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -301,10 +301,10 @@ public class TYPEStmt implements StatementVisitor{
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
RefTypeOrTPHOrWildcardOrGeneric receiverType = new RefType(assumption.getReceiver().getClassName(), params, forMethod.getOffset());
|
RefTypeOrTPHOrWildcardOrGeneric receiverType = new RefType(assumption.getReceiver().getClassName(), params, forMethod.getOffset());
|
||||||
methodConstraint.add(ConstraintsFactory.createPair(forMethod.receiver.getType(), receiverType,
|
methodConstraint.add(new Pair(forMethod.receiver.getType(), receiverType,
|
||||||
PairOperator.SMALLERDOT, info.getCurrentTypeScope(), assumption.getTypeScope(), resolver));
|
PairOperator.SMALLERDOT);
|
||||||
methodConstraint.add(ConstraintsFactory.createPair(assumption.getReturnType(), forMethod.getType(),
|
methodConstraint.add(new Pair(assumption.getReturnType(), forMethod.getType(),
|
||||||
PairOperator.EQUALSDOT, info.getCurrentTypeScope(), assumption.getTypeScope(), resolver));
|
PairOperator.EQUALSDOT));
|
||||||
methodConstraint.addAll(generateParameterConstraints(forMethod, assumption, info, resolver));
|
methodConstraint.addAll(generateParameterConstraints(forMethod, assumption, info, resolver));
|
||||||
return methodConstraint;
|
return methodConstraint;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user