K1: add forgotten INFERRED_INTO_DECLARED_UPPER_BOUNDS for incorporation case

#KT-56169 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-03-14 11:40:54 +01:00
committed by Space Team
parent ba2d896c01
commit 97bec59bc9
2 changed files with 17 additions and 11 deletions
@@ -14,10 +14,7 @@ import org.jetbrains.kotlin.resolve.calls.model.*
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.error.ErrorTypeKind
import org.jetbrains.kotlin.types.error.ErrorUtils
import org.jetbrains.kotlin.types.model.TypeConstructorMarker
import org.jetbrains.kotlin.types.model.TypeVariableMarker
import org.jetbrains.kotlin.types.model.TypeVariableTypeConstructorMarker
import org.jetbrains.kotlin.types.model.safeSubstitute
import org.jetbrains.kotlin.types.model.*
import org.jetbrains.kotlin.types.typeUtil.asTypeProjection
import org.jetbrains.kotlin.utils.addIfNotNull
@@ -453,14 +450,23 @@ class KotlinConstraintSystemCompleter(
private fun reportWarningIfFixedIntoDeclaredUpperBounds(
diagnosticsHolder: KotlinDiagnosticsHolder,
variableWithConstraints: VariableWithConstraints
variableWithConstraints: VariableWithConstraints,
resultType: KotlinTypeMarker
) {
val areAllConstraintFromDeclaredUpperBounds = variableWithConstraints.constraints.all {
val position = it.position.from
position is BuilderInferenceSubstitutionConstraintPosition<*, *> && position.isFromNotSubstitutedDeclaredUpperBound
var upperBoundType: KotlinTypeMarker? = null
val constraintFromDeclaredUpperBoundExists = variableWithConstraints.constraints.any { constraint ->
val position = constraint.position.from.let { basicPosition ->
if (basicPosition is IncorporationConstraintPosition) basicPosition.from else basicPosition
}
if (position is BuilderInferenceSubstitutionConstraintPosition<*, *> && position.isFromNotSubstitutedDeclaredUpperBound) {
upperBoundType = constraint.type
true
} else {
false
}
}
if (areAllConstraintFromDeclaredUpperBounds) {
if (constraintFromDeclaredUpperBoundExists && upperBoundType == resultType) {
diagnosticsHolder.addDiagnostic(
KotlinConstraintSystemDiagnostic(InferredIntoDeclaredUpperBounds(variableWithConstraints.typeVariable))
)
@@ -478,7 +484,7 @@ class KotlinConstraintSystemCompleter(
val variable = variableWithConstraints.typeVariable
val resolvedAtom = findResolvedAtomBy(variable, topLevelAtoms) ?: topLevelAtoms.firstOrNull()
reportWarningIfFixedIntoDeclaredUpperBounds(diagnosticsHolder, variableWithConstraints)
reportWarningIfFixedIntoDeclaredUpperBounds(diagnosticsHolder, variableWithConstraints, resultType)
c.fixVariable(variable, resultType, FixVariableConstraintPositionImpl(variable, resolvedAtom))
}
@@ -3,7 +3,7 @@
// ISSUE: KT-50520
fun box(): String {
buildList {
<!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>buildList<!> {
val foo = { first() }
add(0, foo)
}