From 6215662e33a20d3a3dce00e9d768529106b349b0 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 25 Jul 2019 11:57:37 +0300 Subject: [PATCH] Replace usage of `ClassicTCContext` with abstract context in `NewCSTCalculator` --- .../resolve/src/org/jetbrains/kotlin/fir/SessionUtils.kt | 8 +++++++- .../src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt | 8 +++++++- .../kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt | 5 +---- .../calls/inference/components/ResultTypeResolver.kt | 4 +++- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/SessionUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/SessionUtils.kt index c5ccc6e7ac2..91f67a96965 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/SessionUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/SessionUtils.kt @@ -5,8 +5,14 @@ package org.jetbrains.kotlin.fir +import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext import org.jetbrains.kotlin.fir.types.ConeTypeContext +import org.jetbrains.kotlin.types.AbstractTypeCheckerContext -private class SessionBasedTypeContext(override val session: FirSession) : ConeTypeContext +private class SessionBasedTypeContext(override val session: FirSession) : ConeTypeContext { + override fun newBaseTypeCheckerContext(errorTypesEqualToAnything: Boolean): AbstractTypeCheckerContext { + return ConeTypeCheckerContext(errorTypesEqualToAnything, session) + } +} val FirSession.typeContext: ConeTypeContext get() = SessionBasedTypeContext(this) \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt index 03388bc7002..e5de3d2dee2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.types.model.* class ErrorTypeConstructor(reason: String) : TypeConstructorMarker -interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext { +interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, TypeCheckerProviderContext { val session: FirSession override fun TypeConstructorMarker.isIntegerLiteralTypeConstructor(): Boolean { @@ -460,4 +460,10 @@ class ConeTypeCheckerContext(override val isErrorTypeEqualsToAnything: Boolean, override val KotlinTypeMarker.isAllowedTypeVariable: Boolean get() = this is ConeKotlinType && this is ConeTypeVariableType + override fun newBaseTypeCheckerContext(errorTypesEqualToAnything: Boolean): AbstractTypeCheckerContext = + if (this.isErrorTypeEqualsToAnything == errorTypesEqualToAnything) + this + else + ConeTypeCheckerContext(errorTypesEqualToAnything, session) + } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt index 2b2a3e82559..b8c46513521 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt @@ -16,9 +16,6 @@ package org.jetbrains.kotlin.resolve.calls -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.checker.* import org.jetbrains.kotlin.types.AbstractNullabilityChecker.hasPathByNotMarkedNullableNodes @@ -181,7 +178,7 @@ object NewCommonSuperTypeCalculator { nullable = false ) - val typeCheckerContext = ClassicTypeCheckerContext(false) + val typeCheckerContext = newBaseTypeCheckerContext(false) /** * Sometimes one type can have several supertypes with given type constructor, suppose A <: List and A <: List. diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt index 88bfbe44d3b..71b89c94e4b 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt @@ -86,7 +86,9 @@ class ResultTypeResolver( val lowerConstraints = variableWithConstraints.constraints.filter { it.kind == ConstraintKind.LOWER && isProperType(it.type) } if (lowerConstraints.isNotEmpty()) { val types = sinkIntegerLiteralTypes(lowerConstraints.map { it.type }) - val commonSuperType = with(NewCommonSuperTypeCalculator) { commonSuperType(types) } + val commonSuperType = with(NewCommonSuperTypeCalculator) { + this@findSubType.commonSuperType(types) + } /** * * fun Array.intersect(other: Iterable) {