public class ConstraintSystemImpl extends java.lang.Object implements ConstraintSystem
| Modifier and Type | Class and Description |
|---|---|
static class |
ConstraintSystemImpl.ConstraintKind |
| Constructor and Description |
|---|
ConstraintSystemImpl() |
| Modifier and Type | Method and Description |
|---|---|
void |
addSubtypeConstraint(JetType constrainingType,
JetType subjectType,
ConstraintPosition constraintPosition)
Adds a constraint that the constraining type is a subtype of the subject type.
Asserts that only subject type may contain registered type variables.
|
void |
addSupertypeConstraint(JetType constrainingType,
JetType subjectType,
ConstraintPosition constraintPosition)
Adds a constraint that the constraining type is a supertype of the subject type.
|
ConstraintSystem |
copy() |
static JetType |
createCorrespondingExtensionFunctionType(JetType functionType,
JetType receiverType) |
TypeSubstitutor |
getCurrentSubstitutor()
Returns a current result of solving the constraint system (mapping from the type variable to the resulting type projection).
|
TypeSubstitutor |
getResultingSubstitutor()
Returns a result of solving the constraint system (mapping from the type variable to the resulting type projection).
|
TypeConstraints |
getTypeConstraints(TypeParameterDescriptor typeVariable)
Returns the resulting type constraints of solving the constraint system for specific type variable.
|
java.util.Set<TypeParameterDescriptor> |
getTypeVariables()
Returns a set of all registered type variables.
|
boolean |
hasConflictingConstraints()
Returns true if type constraints for some type variable are contradicting.
|
boolean |
hasContradiction()
Return true if constraint system has no contradiction (it can be not successful because of the lack of information for a type variable).
|
boolean |
hasErrorInConstrainingTypes()
Returns true if there is an error in constraining types.
|
boolean |
hasOnlyExpectedTypeMismatch()
Returns true if there is type constructor mismatch only in
ConstraintPosition.EXPECTED_TYPE_POSITION. |
boolean |
hasTypeConstructorMismatch()
Returns true if some constraint cannot be processed because of type constructor mismatch.
|
boolean |
hasTypeConstructorMismatchAt(ConstraintPosition constraintPosition)
Returns true if there is type constructor mismatch error at a specific
constraintPosition. |
boolean |
hasUnknownParameters()
Returns true if there is no information for some registered type variable.
|
boolean |
isSuccessful()
Returns true if constraint system has a solution (has no contradiction and has enough information to infer each registered type variable).
|
void |
processDeclaredBoundConstraints() |
void |
registerTypeVariable(TypeParameterDescriptor typeVariable,
Variance positionVariance)
Registers a variable in a constraint system.
|
ConstraintSystem |
replaceTypeVariables(com.google.common.base.Function<TypeParameterDescriptor,TypeParameterDescriptor> typeVariablesMap) |
public ConstraintSystemImpl()
public boolean hasTypeConstructorMismatch()
ConstraintSystemfun <R> foo(t: List<R>) {} in invocation foo(hashSet("s"))
there is type constructor mismatch: "HashSet<String> cannot be a subtype of List<R>".hasTypeConstructorMismatch in interface ConstraintSystempublic boolean hasTypeConstructorMismatchAt(@NotNull ConstraintPosition constraintPosition)
ConstraintSystemconstraintPosition.
For example, for fun <R> foo(t: List<R>) {} in invocation foo(hashSet("s"))
there is type constructor mismatch: "HashSet<String> cannot be a subtype of List<R>"
at a constraint position ConstraintPosition.getValueParameterPosition(0).hasTypeConstructorMismatchAt in interface ConstraintSystempublic boolean hasOnlyExpectedTypeMismatch()
ConstraintSystemConstraintPosition.EXPECTED_TYPE_POSITION.hasOnlyExpectedTypeMismatch in interface ConstraintSystempublic boolean hasErrorInConstrainingTypes()
ConstraintSystemhasErrorInConstrainingTypes in interface ConstraintSystempublic void registerTypeVariable(@NotNull TypeParameterDescriptor typeVariable, @NotNull Variance positionVariance)
ConstraintSystemregisterTypeVariable in interface ConstraintSystem@NotNull public ConstraintSystem copy()
copy in interface ConstraintSystem@NotNull public ConstraintSystem replaceTypeVariables(@NotNull com.google.common.base.Function<TypeParameterDescriptor,TypeParameterDescriptor> typeVariablesMap)
public void addSupertypeConstraint(@Nullable JetType constrainingType, @NotNull JetType subjectType, @NotNull ConstraintPosition constraintPosition)
ConstraintSystem"fun <T> create() : T" to infer T in invocation "val i: Int = create()"
should be generated a constraint "Int is a supertype of T" where T is a subject type, and Int is a constraining type.addSupertypeConstraint in interface ConstraintSystempublic void addSubtypeConstraint(@Nullable JetType constrainingType, @NotNull JetType subjectType, @NotNull ConstraintPosition constraintPosition)
ConstraintSystem"fun <T> id(t: T) {}" to infer T in invocation "id(1)"
should be generated a constraint "Int is a subtype of T" where T is a subject type, and Int is a constraining type.addSubtypeConstraint in interface ConstraintSystempublic void processDeclaredBoundConstraints()
@NotNull public java.util.Set<TypeParameterDescriptor> getTypeVariables()
ConstraintSystemgetTypeVariables in interface ConstraintSystem@Nullable public TypeConstraints getTypeConstraints(@NotNull TypeParameterDescriptor typeVariable)
ConstraintSystemgetTypeConstraints in interface ConstraintSystempublic boolean isSuccessful()
ConstraintSystemisSuccessful in interface ConstraintSystempublic boolean hasContradiction()
ConstraintSystemhasContradiction in interface ConstraintSystempublic boolean hasConflictingConstraints()
ConstraintSystemfun <R> foo(r: R, t: java.util.List<R>) {} in invocation foo(1, arrayList("s"))
type variable R has two conflicting constraints:
- "R is a supertype of Int"
- "List<R> is a supertype of List<String>" which leads to "R is equal to String"hasConflictingConstraints in interface ConstraintSystempublic boolean hasUnknownParameters()
ConstraintSystemfun <E> newList()in invocation "val nl = newList()" there is no information to infer type variable E.
hasUnknownParameters in interface ConstraintSystem@NotNull public TypeSubstitutor getResultingSubstitutor()
ConstraintSystemgetResultingSubstitutor in interface ConstraintSystem@NotNull public TypeSubstitutor getCurrentSubstitutor()
ConstraintSystemgetCurrentSubstitutor in interface ConstraintSystem@NotNull public static JetType createCorrespondingExtensionFunctionType(@NotNull JetType functionType, @NotNull JetType receiverType)