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:
committed by
Ilya Kirillov
parent
54b32f6911
commit
18a23f26f5
+4
-3
@@ -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(
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
enum class MyEnum {
|
||||
My<caret>Entry
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
ALL:
|
||||
DIRECT:
|
||||
Reference in New Issue
Block a user