From 18a23f26f5d33be2f5e906db36321a888c9819e2 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Wed, 25 Aug 2021 23:17:47 -0700 Subject: [PATCH] FIR IDE: allow getting overridden symbols on any callable symbols This way caller don't need to first check if the symbol is allowed to override. The current API throws for cases like Java field, or enum entry, which is not very user-friendly. --- .../components/KtFirSymbolDeclarationOverridesProvider.kt | 7 ++++--- .../OverriddenDeclarationProviderTestGenerated.java | 6 ++++++ .../components/overridenDeclarations/onEnumEntry.kt | 3 +++ .../components/overridenDeclarations/onEnumEntry.txt | 2 ++ 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.kt create mode 100644 analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.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 c7d3631ec54..21c448b58d0 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 @@ -8,6 +8,7 @@ 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 @@ -57,7 +58,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( private fun FirTypeScope.processCallableByName(declaration: FirDeclaration) = when (declaration) { is FirSimpleFunction -> processFunctionsByName(declaration.name) { } is FirProperty -> processPropertiesByName(declaration.name) { } - else -> error { "Invalid FIR symbol to process: ${declaration::class}" } + else -> Unit } private fun FirTypeScope.processAllOverriddenDeclarations( @@ -72,7 +73,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( processor.invoke(symbol.fir) ProcessorAction.NEXT } - else -> error { "Invalid FIR symbol to process: ${declaration::class}" } + else -> ProcessorAction.STOP } private fun FirTypeScope.processDirectOverriddenDeclarations( @@ -87,7 +88,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( processor.invoke(symbol.fir) ProcessorAction.NEXT } - else -> error { "Invalid FIR symbol to process: ${declaration::class}" } + else -> ProcessorAction.STOP } private inline fun processOverrides( 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 8a22d38c0a4..7b0418617ef 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 @@ -66,6 +66,12 @@ public class OverriddenDeclarationProviderTestGenerated extends AbstractOverridd runTest("analysis/analysis-api/testData/components/overridenDeclarations/multipleInterfaces.kt"); } + @Test + @TestMetadata("onEnumEntry.kt") + public void testOnEnumEntry() throws Exception { + runTest("analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.kt"); + } + @Test @TestMetadata("sequenceOfOverrides.kt") public void testSequenceOfOverrides() throws Exception { diff --git a/analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.kt b/analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.kt new file mode 100644 index 00000000000..023cb702907 --- /dev/null +++ b/analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.kt @@ -0,0 +1,3 @@ +enum class MyEnum { + MyEntry +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.txt b/analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.txt new file mode 100644 index 00000000000..be9e7f5f5d6 --- /dev/null +++ b/analysis/analysis-api/testData/components/overridenDeclarations/onEnumEntry.txt @@ -0,0 +1,2 @@ +ALL: +DIRECT: