[NI] Prioritize type variables related to output type for fixation

This commit is contained in:
Mikhail Zarechenskiy
2017-12-12 14:31:43 +03:00
parent d818af5287
commit c6d8b39b4f
5 changed files with 35 additions and 2 deletions
@@ -44,8 +44,8 @@ class VariableFixationFinder {
private enum class TypeVariableFixationReadiness {
FORBIDDEN,
WITHOUT_PROPER_ARGUMENT_CONSTRAINT, // proper constraint from arguments -- not from upper bound for type parameters
RELATED_TO_ANY_OUTPUT_TYPE,
WITH_COMPLEX_DEPENDENCY, // if type variable T has constraint with non fixed type variable inside (non-top-level): T <: Foo<S>
RELATED_TO_ANY_OUTPUT_TYPE,
READY_FOR_FIXATION,
}
@@ -56,8 +56,8 @@ class VariableFixationFinder {
!notFixedTypeVariables.contains(variable) ||
dependencyProvider.isVariableRelatedToTopLevelType(variable) -> TypeVariableFixationReadiness.FORBIDDEN
!variableHasProperArgumentConstraints(variable) -> TypeVariableFixationReadiness.WITHOUT_PROPER_ARGUMENT_CONSTRAINT
dependencyProvider.isVariableRelatedToAnyOutputType(variable) -> TypeVariableFixationReadiness.RELATED_TO_ANY_OUTPUT_TYPE
hasDependencyToOtherTypeVariables(variable) -> TypeVariableFixationReadiness.WITH_COMPLEX_DEPENDENCY
dependencyProvider.isVariableRelatedToAnyOutputType(variable) -> TypeVariableFixationReadiness.RELATED_TO_ANY_OUTPUT_TYPE
else -> TypeVariableFixationReadiness.READY_FOR_FIXATION
}