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.
This commit is contained in:
Tianyu Geng
2021-08-25 23:17:47 -07:00
committed by Ilya Kirillov
parent 54b32f6911
commit 18a23f26f5
4 changed files with 15 additions and 3 deletions
@@ -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 <T : KtSymbol> processOverrides(
@@ -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 {
@@ -0,0 +1,3 @@
enum class MyEnum {
My<caret>Entry
}
@@ -0,0 +1,2 @@
ALL:
DIRECT: