From 1fe0a1f160917033ce8a76f79a61e6d66dce07b7 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Fri, 19 Feb 2021 11:26:13 +0300 Subject: [PATCH] FIR: Fix interface delegation case via type alias --- .../FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../kotlin/fir/scopes/KotlinScopeProvider.kt | 8 +++----- .../org/jetbrains/kotlin/fir/types/TypeUtils.kt | 4 ++++ .../codegen/box/delegation/viaTypeAlias.kt | 17 +++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 +++++ .../semantics/IrJsCodegenBoxTestGenerated.java | 5 +++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++++ .../IrCodegenBoxWasmTestGenerated.java | 5 +++++ 11 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/codegen/box/delegation/viaTypeAlias.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index d8000dd5812..397bc16b02a 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -13176,6 +13176,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/delegation/simple1.0.kt"); } + @Test + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @Test @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt index dc676fd8c74..24488ebd72c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/KotlinScopeProvider.kt @@ -15,10 +15,8 @@ import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol -import org.jetbrains.kotlin.fir.types.ConeClassErrorType -import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import org.jetbrains.kotlin.fir.types.ConeKotlinType -import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.fir.typeContext +import org.jetbrains.kotlin.fir.types.* class KotlinScopeProvider( val declaredMemberScopeDecorator: ( @@ -110,7 +108,7 @@ fun ConeKotlinType.scopeForSupertype( if (this is ConeClassErrorType) return null val symbol = lookupTag.toSymbol(useSiteSession) return if (symbol is FirRegularClassSymbol) { - val delegateField = delegateFields?.find { it.returnTypeRef.coneType == this } + val delegateField = delegateFields?.find { useSiteSession.typeContext.equalTypes(it.returnTypeRef.coneType, this) } symbol.fir.scopeForSupertype( substitutor(symbol, this, useSiteSession), useSiteSession, scopeSession, delegateField, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt index 95450c2de1b..005319e3f77 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker import org.jetbrains.kotlin.types.AbstractTypeApproximator +import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.types.model.* @@ -44,6 +45,9 @@ fun ConeInferenceContext.intersectTypesOrNull(types: List): Cone } } +fun TypeCheckerProviderContext.equalTypes(a: ConeKotlinType, b: ConeKotlinType): Boolean = + AbstractTypeChecker.equalTypes(this, a, b) + fun ConeDefinitelyNotNullType.Companion.create(original: ConeKotlinType): ConeDefinitelyNotNullType? { return when { original is ConeDefinitelyNotNullType -> original diff --git a/compiler/testData/codegen/box/delegation/viaTypeAlias.kt b/compiler/testData/codegen/box/delegation/viaTypeAlias.kt new file mode 100644 index 00000000000..ee129ef353d --- /dev/null +++ b/compiler/testData/codegen/box/delegation/viaTypeAlias.kt @@ -0,0 +1,17 @@ +public interface MyMap { + fun get(k: K): V +} + +typealias MyMapAlias = MyMap + +abstract class A(val m: MyMapAlias) : MyMapAlias by m + +class B : A(object : MyMap { + override fun get(w: String): String { + return w + "K" + } +}) + +fun box(): String { + return B().get("O") +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index cb2bbd13aa2..373a84800e0 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -13176,6 +13176,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/delegation/simple1.0.kt"); } + @Test + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @Test @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 5dce4b17e56..c873259ea07 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -13176,6 +13176,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/delegation/simple1.0.kt"); } + @Test + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @Test @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 43771bfe58f..91c7aec724b 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -10788,6 +10788,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/delegation/simple1.0.kt"); } + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/delegation/withDefaultParameters.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 4169114a9ee..3cc777b392d 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -9588,6 +9588,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/delegation/kt8154.kt"); } + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/delegation/withDefaultParameters.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 015b67503e4..9279ac96e45 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -9073,6 +9073,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/delegation/kt8154.kt"); } + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/delegation/withDefaultParameters.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 3ad154677cb..7025699905a 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -9073,6 +9073,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/delegation/kt8154.kt"); } + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/delegation/withDefaultParameters.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 503d850450b..e8831dec8ca 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -4252,6 +4252,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/delegation/kt8154.kt"); } + @TestMetadata("viaTypeAlias.kt") + public void testViaTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/delegation/viaTypeAlias.kt"); + } + @TestMetadata("withDefaultParameters.kt") public void testWithDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/delegation/withDefaultParameters.kt");