From c8cade5bf3ddf8c9f60e046bce42b0d21258e096 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Tue, 8 Feb 2022 14:15:28 +0100 Subject: [PATCH] [FIR] Ensure qualifier resolution takes place for type aliases. When resolving a name that is used as a receiver and all candidates are classifier symbols, we need to perform qualifier resolution. The code used to only do that for regular classes, and would not perform qualifier resolution if there was a type alias candidate. ^KT-51171 Fixed --- .../codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../src/org/jetbrains/kotlin/fir/FirCallResolver.kt | 2 +- .../testData/codegen/box/regressions/kt51171.kt | 13 +++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ 6 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/regressions/kt51171.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 799ee77d7b2..5a44ffa8b62 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 @@ -40821,6 +40821,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/regressions/kt5056.kt"); } + @Test + @TestMetadata("kt51171.kt") + public void testKt51171() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt51171.kt"); + } + @Test @TestMetadata("kt528.kt") public void testKt528() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index 7bf69ee8f51..beca58dc488 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -268,7 +268,7 @@ class FirCallResolver( // A // should resolved to D.A // A.B // should be resolved to A.B // } - if (!result.applicability.isSuccess || (isUsedAsReceiver && result.candidates.all { it.symbol is FirRegularClassSymbol })) { + if (!result.applicability.isSuccess || (isUsedAsReceiver && result.candidates.all { it.symbol is FirClassifierSymbol })) { components.resolveRootPartOfQualifier( callee, qualifiedAccess.source, qualifiedAccess.typeArguments, nonFatalDiagnosticFromExpression, )?.let { return it } diff --git a/compiler/testData/codegen/box/regressions/kt51171.kt b/compiler/testData/codegen/box/regressions/kt51171.kt new file mode 100644 index 00000000000..fc6f237eb4b --- /dev/null +++ b/compiler/testData/codegen/box/regressions/kt51171.kt @@ -0,0 +1,13 @@ +// TARGET_BACKEND: JVM + +// FILE: Error.java + +public class Error { + static String foo() { + return "OK"; + } +} + +// FILE: test.kt + +fun box() = Error.foo() 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 c72b86260f0..e4ea84cfeef 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 @@ -40359,6 +40359,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/regressions/kt5056.kt"); } + @Test + @TestMetadata("kt51171.kt") + public void testKt51171() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt51171.kt"); + } + @Test @TestMetadata("kt528.kt") public void testKt528() 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 713180d7551..e892ccea72e 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 @@ -40821,6 +40821,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/regressions/kt5056.kt"); } + @Test + @TestMetadata("kt51171.kt") + public void testKt51171() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt51171.kt"); + } + @Test @TestMetadata("kt528.kt") public void testKt528() 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 b7b21d8905c..b85a73279b7 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -32460,6 +32460,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/regressions/kt5056.kt"); } + @TestMetadata("kt51171.kt") + public void testKt51171() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt51171.kt"); + } + @TestMetadata("kt528.kt") public void testKt528() throws Exception { runTest("compiler/testData/codegen/box/regressions/kt528.kt");