From 2095f90e69c8edef9ca562a7a719be61327e6b1e Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Thu, 14 Mar 2024 15:23:19 +0100 Subject: [PATCH] [FIR] Fix exception in Java scope caused by inherited member with implicit return type It's caused by checking the return type of an inherited property. toConeKotlinTypeProbablyFlexible() returns an error type when the type ref is unresolved instead of throwing. This "breaks" some override checks and in the added test, it leads to an additional candidate being created for a synthetic property. However, the candidate has applicability K2_SYNTHETIC_RESOLVED and gets filtered out because the real property has a higher applicability. #KT-66392 Fixed --- ...cCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...osticCompilerFE10TestDataTestGenerated.java | 6 ++++++ ...reeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...PsiOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../java/scopes/JavaClassUseSiteMemberScope.kt | 7 +++---- .../tests/j+k/kjkImplicitReturnType.kt | 2 -- .../tests/j+k/kjkimplicitTypesCrash.fir.kt | 18 ++++++++++++++++++ .../tests/j+k/kjkimplicitTypesCrash.kt | 18 ++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 9 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.fir.kt create mode 100644 compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.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 522242a44a3..b8ba248d441 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 @@ -21984,6 +21984,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/j+k/kjkRawTypeWithKotlinUpperBound.kt"); } + @Test + @TestMetadata("kjkimplicitTypesCrash.kt") + public void testKjkimplicitTypesCrash() { + runTest("compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt"); + } + @Test @TestMetadata("kt1402.kt") public void testKt1402() { 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 f2032b78a2f..f3b7da53d1f 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 @@ -21984,6 +21984,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/j+k/kjkRawTypeWithKotlinUpperBound.kt"); } + @Test + @TestMetadata("kjkimplicitTypesCrash.kt") + public void testKjkimplicitTypesCrash() { + runTest("compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt"); + } + @Test @TestMetadata("kt1402.kt") public void testKt1402() { 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 a769fb938a7..12f3fdb9dde 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 @@ -21978,6 +21978,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/j+k/kjkRawTypeWithKotlinUpperBound.kt"); } + @Test + @TestMetadata("kjkimplicitTypesCrash.kt") + public void testKjkimplicitTypesCrash() { + runTest("compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt"); + } + @Test @TestMetadata("kt1402.kt") public void testKt1402() { 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 572e7af8d36..347d1bc773a 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 @@ -21984,6 +21984,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/j+k/kjkRawTypeWithKotlinUpperBound.kt"); } + @Test + @TestMetadata("kjkimplicitTypesCrash.kt") + public void testKjkimplicitTypesCrash() { + runTest("compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt"); + } + @Test @TestMetadata("kt1402.kt") public void testKt1402() { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index d4bef126bf6..1c0a58d219f 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -18,6 +18,8 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty import org.jetbrains.kotlin.fir.declarations.utils.* +import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.java.SyntheticPropertiesCacheKey import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod @@ -890,10 +892,7 @@ class JavaClassUseSiteMemberScope( } private fun FirTypeRef.probablyJavaTypeRefToConeType(): ConeKotlinType { - return when (this) { - is FirJavaTypeRef -> toConeKotlinTypeProbablyFlexible(session, typeParameterStack) - else -> coneType - } + return toConeKotlinTypeProbablyFlexible(session, typeParameterStack) } // It's either overrides Collection.contains(Object) or Collection.containsAll(Collection) or similar methods diff --git a/compiler/testData/diagnostics/tests/j+k/kjkImplicitReturnType.kt b/compiler/testData/diagnostics/tests/j+k/kjkImplicitReturnType.kt index f6cf08a437f..a3cc62a1fd6 100644 --- a/compiler/testData/diagnostics/tests/j+k/kjkImplicitReturnType.kt +++ b/compiler/testData/diagnostics/tests/j+k/kjkImplicitReturnType.kt @@ -1,7 +1,5 @@ // FIR_IDENTICAL // ISSUE: KT-66048 -// IGNORE_REVERSED_RESOLVE -// ^KT-66392 // FILE: Java1.java public class Java1 extends KotlinClass { diff --git a/compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.fir.kt b/compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.fir.kt new file mode 100644 index 00000000000..e6f0e4b8747 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.fir.kt @@ -0,0 +1,18 @@ +// ISSUE: KT-66392 +// FILE: Java1.java +public class Java1 extends KotlinClass { + @Override + public String getE() { + return "2"; + } +} + +// FILE: test.kt +// The order of Kotlin classes is important +class B : Java1() { + override var e = super.e +} + +open class KotlinClass { + open var e = "1" +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt b/compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt new file mode 100644 index 00000000000..af3836aedae --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt @@ -0,0 +1,18 @@ +// ISSUE: KT-66392 +// FILE: Java1.java +public class Java1 extends KotlinClass { + @Override + public String getE() { + return "2"; + } +} + +// FILE: test.kt +// The order of Kotlin classes is important +class B : Java1() { + override var e = super.e +} + +open class KotlinClass { + open var e = "1" +} \ No newline at end of file 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 700a8483b1f..e70733eb362 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 @@ -21984,6 +21984,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/j+k/kjkRawTypeWithKotlinUpperBound.kt"); } + @Test + @TestMetadata("kjkimplicitTypesCrash.kt") + public void testKjkimplicitTypesCrash() { + runTest("compiler/testData/diagnostics/tests/j+k/kjkimplicitTypesCrash.kt"); + } + @Test @TestMetadata("kt1402.kt") public void testKt1402() {