From 016a8f69daa740eecff6e8287b3bb6561293e1e4 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 7 Jul 2015 21:46:16 +0300 Subject: [PATCH] Removed check for position when storing initial top-level constraints --- .../methodCall/multipleExactBoundsNullable.kt | 2 +- .../methodCall/multipleExactBoundsNullable.txt | 2 +- .../AbstractConstraintSystemTest.kt | 2 +- .../calls/inference/ConstraintSystemImpl.kt | 15 ++++++++++----- .../calls/inference/constraintIncorporation.kt | 6 +++--- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.kt b/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.kt index c9de5cf0c8a..60141117617 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.kt @@ -25,7 +25,7 @@ interface WithFoo { fun foo() } -fun foo(delegateResolver: ResolverForProject): ResolverForProject { +fun foo(delegateResolver: ResolverForProject): ResolverForProject { val descriptorByModule = MyMap() val result = ResolverForProjectImpl(descriptorByModule, delegateResolver) result.exposeM.foo() // M is not M2? diff --git a/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt b/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt index 6a283d0e3f9..381ec125c74 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt @@ -1,6 +1,6 @@ package -internal fun foo(/*0*/ delegateResolver: ResolverForProject): ResolverForProject +internal fun foo(/*0*/ delegateResolver: ResolverForProject): ResolverForProject public/*package*/ open class MyMap : java.util.AbstractMap { public/*package*/ constructor MyMap() diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/AbstractConstraintSystemTest.kt b/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/AbstractConstraintSystemTest.kt index 6cf755ac65b..e554e2b80ec 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/AbstractConstraintSystemTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/AbstractConstraintSystemTest.kt @@ -98,7 +98,7 @@ abstract public class AbstractConstraintSystemTest() : JetLiteFixture() { when (constraint.kind) { MyConstraintKind.SUBTYPE -> constraintSystem.addSubtypeConstraint(firstType, secondType, position) MyConstraintKind.SUPERTYPE -> constraintSystem.addSupertypeConstraint(firstType, secondType, position) - MyConstraintKind.EQUAL -> constraintSystem.addConstraint(ConstraintSystemImpl.ConstraintKind.EQUAL, firstType, secondType, position) + MyConstraintKind.EQUAL -> constraintSystem.addConstraint(ConstraintSystemImpl.ConstraintKind.EQUAL, firstType, secondType, position, topLevel = true) } } if (fixVariables) constraintSystem.fixVariables() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt index 77d576e06dc..a568bac6795 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt @@ -203,15 +203,21 @@ public class ConstraintSystemImpl : ConstraintSystem { if (constrainingType != null && TypeUtils.noExpectedType(constrainingType)) return val newSubjectType = originalToVariablesSubstitutor.substitute(subjectType, Variance.INVARIANT) - addConstraint(SUB_TYPE, newSubjectType, constrainingType, constraintPosition) + addConstraint(SUB_TYPE, newSubjectType, constrainingType, constraintPosition, topLevel = true) } override fun addSubtypeConstraint(constrainingType: JetType?, subjectType: JetType, constraintPosition: ConstraintPosition) { val newSubjectType = originalToVariablesSubstitutor.substitute(subjectType, Variance.INVARIANT) - addConstraint(SUB_TYPE, constrainingType, newSubjectType, constraintPosition) + addConstraint(SUB_TYPE, constrainingType, newSubjectType, constraintPosition, topLevel = true) } - fun addConstraint(constraintKind: ConstraintKind, subType: JetType?, superType: JetType?, constraintPosition: ConstraintPosition) { + fun addConstraint( + constraintKind: ConstraintKind, + subType: JetType?, + superType: JetType?, + constraintPosition: ConstraintPosition, + topLevel: Boolean + ) { val typeCheckingProcedure = TypeCheckingProcedure(object : TypeCheckingProcedureCallbacks { private var depth = 0 @@ -253,7 +259,7 @@ public class ConstraintSystemImpl : ConstraintSystem { return true } }) - doAddConstraint(constraintKind, subType, superType, constraintPosition, typeCheckingProcedure, topLevel = true) + doAddConstraint(constraintKind, subType, superType, constraintPosition, typeCheckingProcedure, topLevel) } private fun isErrorOrSpecialType(type: JetType?, constraintPosition: ConstraintPosition): Boolean { @@ -447,7 +453,6 @@ public class ConstraintSystemImpl : ConstraintSystem { replaceUninferredBy(getDefaultValue, substituteOriginal).setApproximateCapturedTypes() private fun storeInitialConstraint(constraintKind: ConstraintKind, subType: JetType, superType: JetType, position: ConstraintPosition) { - if (position is CompoundConstraintPosition) return initialConstraints.add(Constraint(constraintKind, subType, superType, position)) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/constraintIncorporation.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/constraintIncorporation.kt index 669b32d7c83..25f289886bf 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/constraintIncorporation.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/constraintIncorporation.kt @@ -64,9 +64,9 @@ private fun ConstraintSystemImpl.addConstraintFromBounds(old: Bound, new: Bound) val position = CompoundConstraintPosition(old.position, new.position) when { - old.kind.ordinal() < new.kind.ordinal() -> addConstraint(SUB_TYPE, oldType, newType, position) - old.kind.ordinal() > new.kind.ordinal() -> addConstraint(SUB_TYPE, newType, oldType, position) - old.kind == new.kind && old.kind == EXACT_BOUND -> addConstraint(EQUAL, oldType, newType, position) + old.kind.ordinal() < new.kind.ordinal() -> addConstraint(SUB_TYPE, oldType, newType, position, topLevel = false) + old.kind.ordinal() > new.kind.ordinal() -> addConstraint(SUB_TYPE, newType, oldType, position, topLevel = false) + old.kind == new.kind && old.kind == EXACT_BOUND -> addConstraint(EQUAL, oldType, newType, position, topLevel = false) } }