From 602801dcfd952c0a691031681d6328518acff6d3 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 31 Oct 2023 08:59:32 +0100 Subject: [PATCH] K2: add test for KT-56520, case (7), qualifier receivers (2.2) This commit covers object vs companion member vs static member case but now we have two different companions (first is empty) 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 some/Some & some2/Some because both of them have a companion. This means ambiguity. After it tries to resolve Some as a qualifier, but we have no scope with a single qualifier, so finally we prefer to report ambiguity from variable access resolve. --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++ ...sticCompilerFE10TestDataTestGenerated.java | 6 +++ ...eeOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...rStaticObjectOrCompanionMemberCase2.fir.kt | 34 ++++++++++++++ ...StaticObjectOrCompanionMemberCase2.fir.txt | 46 +++++++++++++++++++ ...ifierStaticObjectOrCompanionMemberCase2.kt | 34 ++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++ 8 files changed, 144 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.txt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.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 cb1603aad13..6254c51bbe5 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 @@ -44803,6 +44803,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase2.kt") + public void testQualifierStaticObjectOrCompanionMemberCase2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.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 daf12bedf8d..52f68e72d69 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 @@ -44803,6 +44803,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase2.kt") + public void testQualifierStaticObjectOrCompanionMemberCase2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.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 d004547462f..04cce531d74 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 @@ -42681,6 +42681,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase2.kt") + public void testQualifierStaticObjectOrCompanionMemberCase2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.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 916f54c0b78..48918eec264 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 @@ -42801,6 +42801,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase2.kt") + public void testQualifierStaticObjectOrCompanionMemberCase2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception { diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.kt new file mode 100644 index 00000000000..169ac2fb20f --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-56520 (case 7, object vs companion member vs static member, two companions 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/qualifierStaticObjectOrCompanionMemberCase2.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.txt new file mode 100644 index 00000000000..05a7eddb337 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.fir.txt @@ -0,0 +1,46 @@ +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() + } + + } + + public final companion object Companion : R|kotlin/Any| { + private constructor(): R|some/Some.Companion| { + 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(): { + ^test #.# + } diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.kt new file mode 100644 index 00000000000..ea50fac4761 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-56520 (case 7, object vs companion member vs static member, two companions 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 57e7af34205..1845bb9edac 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 @@ -44861,6 +44861,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase.kt"); } + @Test + @TestMetadata("qualifierStaticObjectOrCompanionMemberCase2.kt") + public void testQualifierStaticObjectOrCompanionMemberCase2() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierStaticObjectOrCompanionMemberCase2.kt"); + } + @Test @TestMetadata("typeCase.kt") public void testTypeCase() throws Exception {