org.jetbrains.jet.lang.resolve.calls.inference
Class ConstraintSystemImpl

java.lang.Object
  extended by org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystemImpl
All Implemented Interfaces:
ConstraintSystem

public class ConstraintSystemImpl
extends java.lang.Object
implements ConstraintSystem


Nested Class Summary
static class ConstraintSystemImpl.ConstraintKind
           
 
Constructor Summary
ConstraintSystemImpl()
           
 
Method Summary
 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)
           
 ConstraintSystem filterConstraints(com.intellij.openapi.util.Condition<ConstraintPosition> condition)
           
 ConstraintSystem filterConstraintsOut(ConstraintPosition... excludePositions)
           
 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).
 ConstraintSystemStatus getStatus()
           
 ConstraintSystem getSystemWithoutWeakConstraints()
           
 TypeBounds getTypeBounds(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.
 void processDeclaredBoundConstraints()
           
 void registerTypeVariables(java.util.Map<TypeParameterDescriptor,Variance> typeVariables)
          Registers variables in a constraint system.
 ConstraintSystem substituteTypeVariables(com.google.common.base.Function<TypeParameterDescriptor,TypeParameterDescriptor> typeVariablesMap)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConstraintSystemImpl

public ConstraintSystemImpl()
Method Detail

getStatus

@NotNull
public ConstraintSystemStatus getStatus()
Specified by:
getStatus in interface ConstraintSystem

registerTypeVariables

public void registerTypeVariables(@NotNull
                                  java.util.Map<TypeParameterDescriptor,Variance> typeVariables)
Description copied from interface: ConstraintSystem
Registers variables in a constraint system.

Specified by:
registerTypeVariables in interface ConstraintSystem

copy

@NotNull
public ConstraintSystem copy()
Specified by:
copy in interface ConstraintSystem

substituteTypeVariables

@NotNull
public ConstraintSystem substituteTypeVariables(@NotNull
                                                        com.google.common.base.Function<TypeParameterDescriptor,TypeParameterDescriptor> typeVariablesMap)

filterConstraintsOut

@NotNull
public ConstraintSystem filterConstraintsOut(@NotNull
                                                     ConstraintPosition... excludePositions)

filterConstraints

@NotNull
public ConstraintSystem filterConstraints(@NotNull
                                                  com.intellij.openapi.util.Condition<ConstraintPosition> condition)

getSystemWithoutWeakConstraints

@NotNull
public ConstraintSystem getSystemWithoutWeakConstraints()

addSupertypeConstraint

public void addSupertypeConstraint(@Nullable
                                   JetType constrainingType,
                                   @NotNull
                                   JetType subjectType,
                                   @NotNull
                                   ConstraintPosition constraintPosition)
Description copied from interface: ConstraintSystem
Adds a constraint that the constraining type is a supertype of the subject type.

Asserts that only subject type may contain registered type variables.

For example, for "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.

Specified by:
addSupertypeConstraint in interface ConstraintSystem

addSubtypeConstraint

public void addSubtypeConstraint(@Nullable
                                 JetType constrainingType,
                                 @NotNull
                                 JetType subjectType,
                                 @NotNull
                                 ConstraintPosition constraintPosition)
Description copied from interface: ConstraintSystem
Adds a constraint that the constraining type is a subtype of the subject type.

Asserts that only subject type may contain registered type variables.

For example, for "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.

Specified by:
addSubtypeConstraint in interface ConstraintSystem

processDeclaredBoundConstraints

public void processDeclaredBoundConstraints()

getTypeVariables

@NotNull
public java.util.Set<TypeParameterDescriptor> getTypeVariables()
Description copied from interface: ConstraintSystem
Returns a set of all registered type variables.

Specified by:
getTypeVariables in interface ConstraintSystem

getTypeBounds

@NotNull
public TypeBounds getTypeBounds(@NotNull
                                        TypeParameterDescriptor typeVariable)
Description copied from interface: ConstraintSystem
Returns the resulting type constraints of solving the constraint system for specific type variable.

Returns null if the type variable was not registered.

Specified by:
getTypeBounds in interface ConstraintSystem

getResultingSubstitutor

@NotNull
public TypeSubstitutor getResultingSubstitutor()
Description copied from interface: ConstraintSystem
Returns a result of solving the constraint system (mapping from the type variable to the resulting type projection).

In the resulting substitution should be concerned:

- type constraints

- variance of the type variable // not implemented yet

- type parameter bounds (that can bind type variables with each other). // not implemented yet If the addition of the 'expected type' constraint made the system fail, this constraint is not included in the resulting substitution.

Specified by:
getResultingSubstitutor in interface ConstraintSystem

getCurrentSubstitutor

@NotNull
public TypeSubstitutor getCurrentSubstitutor()
Description copied from interface: ConstraintSystem
Returns a current result of solving the constraint system (mapping from the type variable to the resulting type projection). If there is no information for type parameter, returns type projection for DONT_CARE type.

Specified by:
getCurrentSubstitutor in interface ConstraintSystem

createCorrespondingExtensionFunctionType

@NotNull
public static JetType createCorrespondingExtensionFunctionType(@NotNull
                                                                       JetType functionType,
                                                                       @NotNull
                                                                       JetType receiverType)