From 825be3588a7dab21396cc9dbe0c37bdb6aa58a7c Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Fri, 15 Oct 2021 10:51:27 -0700 Subject: [PATCH] FIR IDE: tolerate KtFirBackingFieldSymbol when getting overridden symbols --- ...KtFirSymbolDeclarationOverridesProvider.kt | 26 ++++++++++--------- ...iddenDeclarationProviderTestGenerated.java | 6 +++++ .../overridenDeclarations/backingField.kt | 4 +++ .../overridenDeclarations/backingField.txt | 2 ++ 4 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 analysis/analysis-api/testData/components/overridenDeclarations/backingField.kt create mode 100644 analysis/analysis-api/testData/components/overridenDeclarations/backingField.txt 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 21c448b58d0..66f3c740eb0 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,21 +5,10 @@ package org.jetbrains.kotlin.analysis.api.fir.components -import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes -import org.jetbrains.kotlin.fir.java.declarations.FirJavaField -import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.scopes.* -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.ensureResolved -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverrideFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymbol -import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.ResolveType 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.symbols.KtCallableSymbol @@ -27,6 +16,17 @@ 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.tokens.ValidityToken +import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.ResolveType +import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes +import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.scopes.* +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.ensureResolved +import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverrideFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymbol internal class KtFirSymbolDeclarationOverridesProvider( override val analysisSession: KtFirAnalysisSession, @@ -36,6 +36,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( override fun getAllOverriddenSymbols( callableSymbol: T, ): List { + if (callableSymbol is KtFirBackingFieldSymbol) return emptyList() val overriddenElement = mutableSetOf>() processOverrides(callableSymbol) { firTypeScope, firCallableDeclaration -> firTypeScope.processAllOverriddenDeclarations(firCallableDeclaration) { overriddenDeclaration -> @@ -46,6 +47,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( } override fun getDirectlyOverriddenSymbols(callableSymbol: T): List { + if (callableSymbol is KtFirBackingFieldSymbol) return emptyList() val overriddenElement = mutableSetOf>() processOverrides(callableSymbol) { firTypeScope, firCallableDeclaration -> firTypeScope.processDirectOverriddenDeclarations(firCallableDeclaration) { overriddenDeclaration -> diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java index 7b0418617ef..ed9b3597d2d 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java @@ -24,6 +24,12 @@ public class OverriddenDeclarationProviderTestGenerated extends AbstractOverridd KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/overridenDeclarations"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("backingField.kt") + public void testBackingField() throws Exception { + runTest("analysis/analysis-api/testData/components/overridenDeclarations/backingField.kt"); + } + @Test @TestMetadata("inAnonymousClass.kt") public void testInAnonymousClass() throws Exception { diff --git a/analysis/analysis-api/testData/components/overridenDeclarations/backingField.kt b/analysis/analysis-api/testData/components/overridenDeclarations/backingField.kt new file mode 100644 index 00000000000..03d17d3e717 --- /dev/null +++ b/analysis/analysis-api/testData/components/overridenDeclarations/backingField.kt @@ -0,0 +1,4 @@ +val i: Int = 1 + get() { + return field + } \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/overridenDeclarations/backingField.txt b/analysis/analysis-api/testData/components/overridenDeclarations/backingField.txt new file mode 100644 index 00000000000..be9e7f5f5d6 --- /dev/null +++ b/analysis/analysis-api/testData/components/overridenDeclarations/backingField.txt @@ -0,0 +1,2 @@ +ALL: +DIRECT: