From ab161333a7d131cb72ae63dad581e9d190ffd9b0 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 30 Oct 2023 13:55:26 +0100 Subject: [PATCH] K2: add test for KT-56520, case (7), qualifier receivers (2.1) This commit covers object vs companion member vs static member case in situation with only one companion in the scope. K1 reports UNRESOLVED_REFERENCE here, probably due to ambiguity. About K2, while resolving Some.foo it first tries to resolve Some as a "general" variable access, and gets only some2/Some because it has a companion. Then it tries to resolve Some as a qualifier, but here we have an ambiguity, so finally Some with companion is preferred. --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++ ...sticCompilerFE10TestDataTestGenerated.java | 6 +++ ...eeOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...erStaticObjectOrCompanionMemberCase.fir.kt | 34 ++++++++++++++++ ...rStaticObjectOrCompanionMemberCase.fir.txt | 39 +++++++++++++++++++ ...lifierStaticObjectOrCompanionMemberCase.kt | 34 ++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++ 8 files changed, 137 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.txt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index aa01f4d87f8..cb1603aad13 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -44797,6 +44797,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierForStaticCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") + public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index fe33fb84429..daf12bedf8d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -44797,6 +44797,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierForStaticCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") + public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index c4f62dafe5e..d004547462f 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -42675,6 +42675,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierForStaticCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") + public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index da1aea45aaf..916f54c0b78 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -42795,6 +42795,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierForStaticCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") + public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception { diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.kt new file mode 100644 index 00000000000..af8e93d4cac --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-56520 (case 7, object vs companion member vs static member, one companion in scope) +// FIR_DUMP + +// FILE: some/Some.kt +package some + +class Some { + object foo {} // (1) + + // companion object {} +} + +// FILE: some2/Some.kt +package some2 + +class Some { + companion object { + val foo = "2" // (2) + } +} + +// FILE: some3/Some.java +package some3; + +public class Some { + public static int foo = 3; // (3) +} + +// FILE: main.kt +import some.* +import some2.* +import some3.* + +fun test() = Some.foo diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.txt new file mode 100644 index 00000000000..48cb7309181 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.fir.txt @@ -0,0 +1,39 @@ +FILE: Some.kt + package some + + public final class Some : R|kotlin/Any| { + public constructor(): R|some/Some| { + super() + } + + public final object foo : R|kotlin/Any| { + private constructor(): R|some/Some.foo| { + super() + } + + } + + } +FILE: Some.kt + package some2 + + public final class Some : R|kotlin/Any| { + public constructor(): R|some2/Some| { + super() + } + + public final companion object Companion : R|kotlin/Any| { + private constructor(): R|some2/Some.Companion| { + super() + } + + public final val foo: R|kotlin/String| = String(2) + public get(): R|kotlin/String| + + } + + } +FILE: main.kt + public final fun test(): R|kotlin/String| { + ^test Q|some2/Some|.R|some2/Some.Companion.foo| + } diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt new file mode 100644 index 00000000000..d81b8003b0d --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-56520 (case 7, object vs companion member vs static member, one companion in scope) +// FIR_DUMP + +// FILE: some/Some.kt +package some + +class Some { + object foo {} // (1) + + // companion object {} +} + +// FILE: some2/Some.kt +package some2 + +class Some { + companion object { + val foo = "2" // (2) + } +} + +// FILE: some3/Some.java +package some3; + +public class Some { + public static int foo = 3; // (3) +} + +// FILE: main.kt +import some.* +import some2.* +import some3.* + +fun test() = Some.foo diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index c269408861e..57e7af34205 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -44855,6 +44855,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierForStaticCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") + public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception {