diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index ca3ca7b4cb0..a959fb8826b 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -3455,6 +3455,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract public void testCastToBareType() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/types/castToBareType.kt"); } + + @TestMetadata("typeAliasInArguments.kt") + public void testTypeAliasInArguments() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt"); + } } @TestMetadata("compiler/fir/analysis-tests/testData/resolve/visibility") diff --git a/compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.fir.txt b/compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.fir.txt new file mode 100644 index 00000000000..b28696611c1 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.fir.txt @@ -0,0 +1,7 @@ +FILE: main.kt + public final typealias ImmutableMap = R|MyMap| + public final typealias ImmutableSet = R|MySet| + private final typealias ImmutableMultimap = R|ImmutableMap>| + private final fun R|ImmutableMultimap|.put(key: R|K|, value: R|V|, oldSet: R|ImmutableSet|): R|ImmutableMultimap| { + ^put this@R|/put|.R|SubstitutionOverride, ft, ImmutableSet?>>, MyMap, ft, ImmutableSet?>>?>|>|(R|/key|, R|/oldSet|.R|SubstitutionOverride>, MySet>?>|>|(R|/value|)) + } diff --git a/compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt b/compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt new file mode 100644 index 00000000000..94b51c0c797 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt @@ -0,0 +1,21 @@ +// FILE: MyMap.java + +public interface MyMap { + public MyMap put(K k, V v); +} +// FILE: MySet.java + +public interface MySet { + public MySet add(E e); +} + +// FILE: main.kt + +typealias ImmutableMap = MyMap +typealias ImmutableSet = MySet + +private typealias ImmutableMultimap = ImmutableMap> + +private fun ImmutableMultimap.put(key: K, value: V, oldSet: ImmutableSet): ImmutableMultimap { + return put(key, oldSet.add(value)) +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index 8c188eaf525..a9087c22e2d 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -3852,6 +3852,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { public void testCastToBareType() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/types/castToBareType.kt"); } + + @Test + @TestMetadata("typeAliasInArguments.kt") + public void testTypeAliasInArguments() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt"); + } } @Nested diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 6f16e0b2fb8..c29818f1dfc 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -3852,6 +3852,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos public void testCastToBareType() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/types/castToBareType.kt"); } + + @Test + @TestMetadata("typeAliasInArguments.kt") + public void testTypeAliasInArguments() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/typeAliasInArguments.kt"); + } } @Nested diff --git a/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt b/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt index 0f7d57a8d95..5b756a95c9d 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt @@ -222,8 +222,8 @@ object AbstractTypeChecker { if (a === b) return true if (isCommonDenotableType(a) && isCommonDenotableType(b)) { - val refinedA = context.refineType(a) - val refinedB = context.refineType(b) + val refinedA = context.prepareType(context.refineType(a)) + val refinedB = context.prepareType(context.refineType(b)) val simpleA = refinedA.lowerBoundIfFlexible() if (!areEqualTypeConstructors(refinedA.typeConstructor(), refinedB.typeConstructor())) return false if (simpleA.argumentsCount() == 0) {