From 63ce4ba6b0b47c92f5ab43f481f3cafbd6f247a2 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 31 Oct 2023 13:13:39 +0100 Subject: [PATCH] K2: add test for KT-56520, case (7), qualifier receivers (4.1) This commit covers enum entry vs companion member case, when one companion object is 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 the only candidate with companion. After that it tries to resolve Some as a qualifier, but we have no scope with a single qualifier, so no influence here. Finally during foo resolve it should choose between enum entry and companion member, and enum entry wins due to KT-37591. --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++ ...sticCompilerFE10TestDataTestGenerated.java | 6 +++ ...eeOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...ifierEnumEntryOrCompanionMemberCase.fir.kt | 36 +++++++++++++ ...fierEnumEntryOrCompanionMemberCase.fir.txt | 52 +++++++++++++++++++ ...qualifierEnumEntryOrCompanionMemberCase.kt | 36 +++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++ 8 files changed, 154 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.txt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.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 12a1380fab0..2056dff67e4 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 @@ -44791,6 +44791,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/constructorCaseSpace.kt"); } + @Test + @TestMetadata("qualifierEnumEntryOrCompanionMemberCase.kt") + public void testQualifierEnumEntryOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("qualifierForStaticCase.kt") public void testQualifierForStaticCase() 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 d40c196d4cf..82135545e90 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 @@ -44791,6 +44791,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/constructorCaseSpace.kt"); } + @Test + @TestMetadata("qualifierEnumEntryOrCompanionMemberCase.kt") + public void testQualifierEnumEntryOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("qualifierForStaticCase.kt") public void testQualifierForStaticCase() 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 6dbce436d8c..df0ac6b8874 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 @@ -42669,6 +42669,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/constructorCaseSpace.kt"); } + @Test + @TestMetadata("qualifierEnumEntryOrCompanionMemberCase.kt") + public void testQualifierEnumEntryOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("qualifierForStaticCase.kt") public void testQualifierForStaticCase() 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 198ada50a29..8e7467143c1 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 @@ -42789,6 +42789,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/constructorCaseSpace.kt"); } + @Test + @TestMetadata("qualifierEnumEntryOrCompanionMemberCase.kt") + public void testQualifierEnumEntryOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("qualifierForStaticCase.kt") public void testQualifierForStaticCase() throws Exception { diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.kt new file mode 100644 index 00000000000..5c91cda7270 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.kt @@ -0,0 +1,36 @@ +// ISSUE: KT-56520 (case 7, enum entry vs companion member, one companion in scope) +// FIR_DUMP + +// FILE: some/Some.kt +package some + +enum class Some { + foo; // (1) + + // companion object {} +} + +// FILE: some2/Some.kt +package some2 + +enum class Some { + foo; // (2) + + companion object { + val foo = "2'" // (2') + } +} + +// FILE: some3/Some.java +package some3; + +public enum Some { + foo; // (3) +} + +// FILE: main.kt +import some.* +import some2.* +import some3.* + +fun test() = Some.foo \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.txt new file mode 100644 index 00000000000..f185b1960bf --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.fir.txt @@ -0,0 +1,52 @@ +FILE: Some.kt + package some + + public final enum class Some : R|kotlin/Enum| { + private constructor(): R|some/Some| { + super|>() + } + + public final static enum entry foo: R|some/Some| + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|some/Some| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } +FILE: Some.kt + package some2 + + public final enum class Some : R|kotlin/Enum| { + private constructor(): R|some2/Some| { + super|>() + } + + public final static enum entry foo: R|some2/Some| + 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| + + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|some2/Some| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } +FILE: main.kt + public final fun test(): R|some2/Some| { + ^test Q|some2/Some|.R|some2/Some.foo| + } diff --git a/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt new file mode 100644 index 00000000000..0af32ea004b --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt @@ -0,0 +1,36 @@ +// ISSUE: KT-56520 (case 7, enum entry vs companion member, one companion in scope) +// FIR_DUMP + +// FILE: some/Some.kt +package some + +enum class Some { + foo; // (1) + + // companion object {} +} + +// FILE: some2/Some.kt +package some2 + +enum class Some { + foo; // (2) + + companion object { + val foo = "2'" // (2') + } +} + +// FILE: some3/Some.java +package some3; + +public enum Some { + foo; // (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 d931e316351..f8fc0ca1651 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 @@ -44849,6 +44849,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/constructorCaseSpace.kt"); } + @Test + @TestMetadata("qualifierEnumEntryOrCompanionMemberCase.kt") + public void testQualifierEnumEntryOrCompanionMemberCase() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/resolve/ambiguousTypeReferences/qualifierEnumEntryOrCompanionMemberCase.kt"); + } + @Test @TestMetadata("qualifierForStaticCase.kt") public void testQualifierForStaticCase() throws Exception {