From 76b2b9fc665fb07bc949fd18a2cc45723e30d536 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 31 Oct 2023 09:08:35 +0100 Subject: [PATCH] K2: add test for KT-56520, case (7), qualifier receivers (3) This commit covers object vs static member case, when no companion objects are 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 two erroneous candidates without companions. After it tries to resolve Some as a qualifier, but we have no scope with a single qualifier. That's why we finally report NONE_APPLICABLE on candidates with companions. --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++++ ...sticCompilerFE10TestDataTestGenerated.java | 6 +++++ ...eeOldFrontendDiagnosticsTestGenerated.java | 6 +++++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 +++++ .../qualifierOrStaticObjectCase.fir.kt | 24 +++++++++++++++++++ .../qualifierOrStaticObjectCase.fir.txt | 20 ++++++++++++++++ .../qualifierOrStaticObjectCase.kt | 24 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++++ 8 files changed, 98 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.txt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.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 6254c51bbe5..12a1380fab0 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("qualifierOrStaticObjectCase.kt") + public void testQualifierOrStaticObjectCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt"); + } + @Test @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") public void testQualifierStaticObjectOrCompanionMemberCase() 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 52f68e72d69..d40c196d4cf 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("qualifierOrStaticObjectCase.kt") + public void testQualifierOrStaticObjectCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt"); + } + @Test @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") public void testQualifierStaticObjectOrCompanionMemberCase() 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 04cce531d74..6dbce436d8c 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("qualifierOrStaticObjectCase.kt") + public void testQualifierOrStaticObjectCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt"); + } + @Test @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") public void testQualifierStaticObjectOrCompanionMemberCase() 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 48918eec264..198ada50a29 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("qualifierOrStaticObjectCase.kt") + public void testQualifierOrStaticObjectCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt"); + } + @Test @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception { diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.kt new file mode 100644 index 00000000000..8e6b750efe9 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.kt @@ -0,0 +1,24 @@ +// ISSUE: KT-56520 (case 7, object vs static member, no companions in scope) +// FIR_DUMP + +// FILE: some/Some.kt +package some + +class Some { + object foo {} // (1) + + // companion object {} +} + +// FILE: some3/Some.java +package some3; + +public class Some { + public static int foo = 3; // (3) +} + +// FILE: main.kt +import some.* +import some3.* + +fun test() = Some.foo diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.txt new file mode 100644 index 00000000000..796d148dcf0 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.fir.txt @@ -0,0 +1,20 @@ +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: main.kt + public final fun test(): { + ^test #.# + } diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt new file mode 100644 index 00000000000..83ffbd0d81b --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt @@ -0,0 +1,24 @@ +// ISSUE: KT-56520 (case 7, object vs static member, no companions in scope) +// FIR_DUMP + +// FILE: some/Some.kt +package some + +class Some { + object foo {} // (1) + + // companion object {} +} + +// FILE: some3/Some.java +package some3; + +public class Some { + public static int foo = 3; // (3) +} + +// FILE: main.kt +import some.* +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 1845bb9edac..d931e316351 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("qualifierOrStaticObjectCase.kt") + public void testQualifierOrStaticObjectCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierOrStaticObjectCase.kt"); + } + @Test @TestMetadata("qualifierStaticObjectOrCompanionMemberCase.kt") public void testQualifierStaticObjectOrCompanionMemberCase() throws Exception {