From 40a6c81d970f9e8cfce588499164c216e0402c1e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 24 Jul 2023 11:09:56 +0000 Subject: [PATCH] [AA] retrieve overridden symbols for parameter from generated property Merge-request: KT-MR-11215 Merged-by: Anna Kozlova --- ...tFe10SymbolDeclarationOverridesProvider.kt | 11 ++++++++-- ...iddenDeclarationProviderTestGenerated.java | 6 +++++ ...KtFirSymbolDeclarationOverridesProvider.kt | 11 ++++++++-- ...iddenDeclarationProviderTestGenerated.java | 6 +++++ ...iddenDeclarationProviderTestGenerated.java | 6 +++++ ...tSymbolDeclarationOverridesProviderBase.kt | 22 +++++++++++++++++++ ...iddenDeclarationProviderTestGenerated.java | 6 +++++ .../parameterWithGeneratedProperty.kt | 13 +++++++++++ .../parameterWithGeneratedProperty.txt | 4 ++++ 9 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtSymbolDeclarationOverridesProviderBase.kt create mode 100644 analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt create mode 100644 analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.txt diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolDeclarationOverridesProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolDeclarationOverridesProvider.kt index a37306ddaf4..e1b05d65767 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolDeclarationOverridesProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolDeclarationOverridesProvider.kt @@ -5,15 +5,16 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components -import org.jetbrains.kotlin.analysis.api.components.KtSymbolDeclarationOverridesProvider import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSymbolDescriptor import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol +import org.jetbrains.kotlin.analysis.api.impl.base.components.KtSymbolDeclarationOverridesProviderBase import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny @@ -21,16 +22,22 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isSubclassOf internal class KtFe10SymbolDeclarationOverridesProvider( override val analysisSession: KtFe10AnalysisSession -) : KtSymbolDeclarationOverridesProvider(), Fe10KtAnalysisSessionComponent { +) : KtSymbolDeclarationOverridesProviderBase(), Fe10KtAnalysisSessionComponent { override val token: KtLifetimeToken get() = analysisSession.token override fun getAllOverriddenSymbols(callableSymbol: T): List { + if (callableSymbol is KtValueParameterSymbol) { + return callableSymbol.getAllOverriddenSymbols() + } val descriptor = getSymbolDescriptor(callableSymbol) as? CallableMemberDescriptor ?: return emptyList() return getOverriddenDescriptors(descriptor, true).mapNotNull { it.toKtCallableSymbol(analysisContext) }.distinct() } override fun getDirectlyOverriddenSymbols(callableSymbol: T): List { + if (callableSymbol is KtValueParameterSymbol) { + return callableSymbol.getDirectlyOverriddenSymbols() + } val descriptor = getSymbolDescriptor(callableSymbol) as? CallableMemberDescriptor ?: return emptyList() return getOverriddenDescriptors(descriptor, false).mapNotNull { it.toKtCallableSymbol(analysisContext) }.distinct() } diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/Fe10IdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/Fe10IdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java index cd18896efe0..ff6df0ca0d0 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/Fe10IdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/Fe10IdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java @@ -106,6 +106,12 @@ public class Fe10IdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestG runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/onEnumEntry.kt"); } + @Test + @TestMetadata("parameterWithGeneratedProperty.kt") + public void testParameterWithGeneratedProperty() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt"); + } + @Test @TestMetadata("sequenceOfOverrides.kt") public void testSequenceOfOverrides() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt index 6f72be2337c..c63b697927b 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt @@ -5,17 +5,18 @@ package org.jetbrains.kotlin.analysis.api.fir.components -import org.jetbrains.kotlin.analysis.api.components.KtSymbolDeclarationOverridesProvider import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirAnonymousObjectSymbol import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirBackingFieldSymbol import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol +import org.jetbrains.kotlin.analysis.api.impl.base.components.KtSymbolDeclarationOverridesProviderBase import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin +import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes import org.jetbrains.kotlin.fir.scopes.* @@ -30,12 +31,15 @@ import org.jetbrains.kotlin.fir.types.toRegularClassSymbol internal class KtFirSymbolDeclarationOverridesProvider( override val analysisSession: KtFirAnalysisSession, override val token: KtLifetimeToken -) : KtSymbolDeclarationOverridesProvider(), KtFirAnalysisSessionComponent { +) : KtSymbolDeclarationOverridesProviderBase(), KtFirAnalysisSessionComponent { override fun getAllOverriddenSymbols( callableSymbol: T, ): List { if (callableSymbol is KtFirBackingFieldSymbol) return emptyList() + if (callableSymbol is KtValueParameterSymbol) { + return callableSymbol.getAllOverriddenSymbols() + } val overriddenElement = mutableSetOf>() processOverrides(callableSymbol) { firTypeScope, firCallableDeclaration -> firTypeScope.processAllOverriddenDeclarations(firCallableDeclaration) { overriddenDeclaration -> @@ -47,6 +51,9 @@ internal class KtFirSymbolDeclarationOverridesProvider( override fun getDirectlyOverriddenSymbols(callableSymbol: T): List { if (callableSymbol is KtFirBackingFieldSymbol) return emptyList() + if (callableSymbol is KtValueParameterSymbol) { + return callableSymbol.getDirectlyOverriddenSymbols() + } val overriddenElement = mutableSetOf>() processOverrides(callableSymbol) { firTypeScope, firCallableDeclaration -> firTypeScope.processDirectOverriddenDeclarations(firCallableDeclaration) { overriddenDeclaration -> diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeDependentAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeDependentAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java index 0cdeb81588e..271ca5903e9 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeDependentAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeDependentAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java @@ -106,6 +106,12 @@ public class FirIdeDependentAnalysisSourceModuleOverriddenDeclarationProviderTes runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/onEnumEntry.kt"); } + @Test + @TestMetadata("parameterWithGeneratedProperty.kt") + public void testParameterWithGeneratedProperty() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt"); + } + @Test @TestMetadata("sequenceOfOverrides.kt") public void testSequenceOfOverrides() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java index 2ea8216c194..e1179eac2be 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirIdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java @@ -106,6 +106,12 @@ public class FirIdeNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGe runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/onEnumEntry.kt"); } + @Test + @TestMetadata("parameterWithGeneratedProperty.kt") + public void testParameterWithGeneratedProperty() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt"); + } + @Test @TestMetadata("sequenceOfOverrides.kt") public void testSequenceOfOverrides() throws Exception { diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtSymbolDeclarationOverridesProviderBase.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtSymbolDeclarationOverridesProviderBase.kt new file mode 100644 index 00000000000..19b0cbdfd8b --- /dev/null +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtSymbolDeclarationOverridesProviderBase.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.impl.base.components + +import org.jetbrains.kotlin.analysis.api.components.KtSymbolDeclarationOverridesProvider +import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol + +abstract class KtSymbolDeclarationOverridesProviderBase : KtSymbolDeclarationOverridesProvider() { + protected fun KtValueParameterSymbol.getAllOverriddenSymbols(): List { + generatedPrimaryConstructorProperty?.let { return getAllOverriddenSymbols(it) } + return emptyList() + } + + protected fun KtValueParameterSymbol.getDirectlyOverriddenSymbols(): List { + generatedPrimaryConstructorProperty?.let { return getDirectlyOverriddenSymbols(it) } + return emptyList() + } +} \ No newline at end of file diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirStandaloneNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirStandaloneNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java index a8e9b6a3ccb..e8fd96cb1ba 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirStandaloneNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationOverridesProvider/FirStandaloneNormalAnalysisSourceModuleOverriddenDeclarationProviderTestGenerated.java @@ -106,6 +106,12 @@ public class FirStandaloneNormalAnalysisSourceModuleOverriddenDeclarationProvide runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/onEnumEntry.kt"); } + @Test + @TestMetadata("parameterWithGeneratedProperty.kt") + public void testParameterWithGeneratedProperty() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt"); + } + @Test @TestMetadata("sequenceOfOverrides.kt") public void testSequenceOfOverrides() throws Exception { diff --git a/analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt b/analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt new file mode 100644 index 00000000000..591f0c3412e --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +class A(override val p: String): B(p) + +// FILE: B.kt +open class B(val p: String) + + +// RESULT +// ALL: +// B.p: String + +// DIRECT: +// B.p: String diff --git a/analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.txt b/analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.txt new file mode 100644 index 00000000000..c86c25735da --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationOverridesProvider/overriddenSymbols/parameterWithGeneratedProperty.txt @@ -0,0 +1,4 @@ +ALL: + B.B.p: String +DIRECT: + B.B.p: String