From d5f24addeaa95d6ef63f3b47bd15ca854811a180 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Wed, 31 May 2023 18:28:29 +0200 Subject: [PATCH] K2: Fix isHiddenForThisCallSite for non-direct overridden Previously, the call of `z.sort` in test has been resolved to the overridden member --- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...sticCompilerFE10TestDataTestGenerated.java | 6 ++++++ ...eeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../fir/resolve/calls/ResolutionStages.kt | 21 ++++++++++++++++--- .../nonDirectHiddenOverride.kt | 15 +++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 7 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.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 61d90b6c51e..0019e3fbf94 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 @@ -20349,6 +20349,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/mapGetOverride.kt"); } + @Test + @TestMetadata("nonDirectHiddenOverride.kt") + public void testNonDirectHiddenOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt"); + } + @Test @TestMetadata("overridesBuiltinNoMagic.kt") public void testOverridesBuiltinNoMagic() 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 5ad74aa1254..8d075a3a110 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 @@ -20349,6 +20349,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/mapGetOverride.kt"); } + @Test + @TestMetadata("nonDirectHiddenOverride.kt") + public void testNonDirectHiddenOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt"); + } + @Test @TestMetadata("overridesBuiltinNoMagic.kt") public void testOverridesBuiltinNoMagic() 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 33cb040ae8f..3c2344afd9a 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 @@ -20349,6 +20349,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/mapGetOverride.kt"); } + @Test + @TestMetadata("nonDirectHiddenOverride.kt") + public void testNonDirectHiddenOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt"); + } + @Test @TestMetadata("overridesBuiltinNoMagic.kt") public void testOverridesBuiltinNoMagic() 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 01dab92b495..ba4874c848f 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 @@ -20355,6 +20355,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/mapGetOverride.kt"); } + @Test + @TestMetadata("nonDirectHiddenOverride.kt") + public void testNonDirectHiddenOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt"); + } + @Test @TestMetadata("overridesBuiltinNoMagic.kt") public void testOverridesBuiltinNoMagic() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt index da72d6bbf9b..ed0afbeb515 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt @@ -25,7 +25,10 @@ import org.jetbrains.kotlin.fir.resolve.inference.csBuilder import org.jetbrains.kotlin.fir.resolve.inference.hasBuilderInferenceAnnotation import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExplicitTypeParameterConstraintPosition import org.jetbrains.kotlin.fir.resolve.toSymbol -import org.jetbrains.kotlin.fir.scopes.* +import org.jetbrains.kotlin.fir.scopes.FirTypeScope +import org.jetbrains.kotlin.fir.scopes.FirUnstableSmartcastTypeScope +import org.jetbrains.kotlin.fir.scopes.ProcessorAction +import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase @@ -39,7 +42,8 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.* import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue import org.jetbrains.kotlin.resolve.descriptorUtil.DYNAMIC_EXTENSION_FQ_NAME -import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.AbstractNullabilityChecker +import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.util.OperatorNameConventions abstract class ResolutionStage { @@ -669,7 +673,18 @@ internal object CheckDeprecatedSinceKotlin : ResolutionStage() { if (symbol.fir.isHiddenEverywhereBesideSuperCalls == true) return true val scope = candidate.originScope as? FirTypeScope ?: return false - return scope.getDirectOverriddenFunctions(symbol).any { it.fir.isHiddenEverywhereBesideSuperCalls == true } + + var result = false + scope.processOverriddenFunctions(symbol) { + if (it.fir.isHiddenEverywhereBesideSuperCalls == true) { + result = true + ProcessorAction.STOP + } else { + ProcessorAction.NEXT + } + } + + return result } private fun FirElement.isSuperCall(): Boolean = diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt new file mode 100644 index 00000000000..c78abc6fef0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt @@ -0,0 +1,15 @@ +// FULL_JDK +// FIR_IDENTICAL +// WITH_STDLIB + +class A : ArrayList() { + override fun sort(t: Comparator) { + super.sort(t) + } +} + +fun foo(x: MutableList, y: ArrayList, z: A, c: Comparator) { + x.sort(c) + y.sort(c) + z.sort(c) +} 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 dd1702b5ff0..1991ce2029a 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 @@ -20355,6 +20355,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/mapGetOverride.kt"); } + @Test + @TestMetadata("nonDirectHiddenOverride.kt") + public void testNonDirectHiddenOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/collectionOverrides/nonDirectHiddenOverride.kt"); + } + @Test @TestMetadata("overridesBuiltinNoMagic.kt") public void testOverridesBuiltinNoMagic() throws Exception {