[NI] Minor, remove unneeded computation of constant evaluator

This commit is contained in:
Mikhail Zarechenskiy
2019-08-30 17:56:55 +03:00
parent 3569eaabcf
commit dc25f7b7ac
@@ -43,7 +43,7 @@ class KotlinCallCompleter(
val candidate = prepareCandidateForCompletion(factory, candidates, resolutionCallbacks)
val returnType = candidate.returnTypeWithSmartCastInfo(resolutionCallbacks)
candidate.addExpectedTypeConstraint(returnType, expectedType, resolutionCallbacks)
candidate.addExpectedTypeConstraint(returnType, expectedType)
candidate.addExpectedTypeFromCastConstraint(returnType, resolutionCallbacks)
return if (resolutionCallbacks.inferenceSession.shouldRunCompletion(candidate))
@@ -65,7 +65,7 @@ class KotlinCallCompleter(
val diagnosticsHolder = KotlinDiagnosticsHolder.SimpleHolder()
candidate.addExpectedTypeConstraint(
candidate.returnTypeWithSmartCastInfo(resolutionCallbacks), expectedType, resolutionCallbacks
candidate.returnTypeWithSmartCastInfo(resolutionCallbacks), expectedType
)
runCompletion(
@@ -151,8 +151,7 @@ class KotlinCallCompleter(
private fun KotlinResolutionCandidate.addExpectedTypeConstraint(
returnType: UnwrappedType?,
expectedType: UnwrappedType?,
resolutionCallbacks: KotlinResolutionCallbacks
expectedType: UnwrappedType?
) {
if (returnType == null) return
if (expectedType == null || (TypeUtils.noExpectedType(expectedType) && expectedType !== TypeUtils.UNIT_EXPECTED_TYPE)) return
@@ -162,6 +161,10 @@ class KotlinCallCompleter(
// This is needed to avoid multiple mismatch errors as we type check resulting type against expected one later
// Plus, it helps with IDE-tests where it's important to have particular diagnostics.
// Note that it aligns with the old inference, see CallCompleter.completeResolvedCallAndArguments
// Another point is to avoid adding constraint from expected type for constant expressions like `1 + 1` because of
// type coercion for numbers:
// val a: Long = 1 + 1, result type of "1 + 1" will be Int and adding constraint with Long will produce type mismatch
return
}
@@ -170,12 +173,6 @@ class KotlinCallCompleter(
returnType, csBuilder.builtIns.unitType, ExpectedTypeConstraintPosition(resolvedCall.atom)
)
resolutionCallbacks.isCompileTimeConstant(resolvedCall, expectedType) -> {
// We don't add expected type constraint for constant expression like "1 + 1" because of type coercion for numbers:
// val a: Long = 1 + 1, note that result type of "1 + 1" will be Int and adding constraint with Long will produce type mismatch
return
}
else ->
csBuilder.addSubtypeConstraint(returnType, expectedType, ExpectedTypeConstraintPosition(resolvedCall.atom))
}