FIR IDE: allow get overriding symbols of members in anonymous object
This commit is contained in:
committed by
Ilya Kirillov
parent
50166c776c
commit
54b32f6911
+7
-4
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymb
|
||||
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.KtFirNamedClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||
@@ -97,13 +98,15 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
val containingDeclaration = with(analysisSession) {
|
||||
(callableSymbol as? KtCallableSymbol)?.originalContainingClassForOverride
|
||||
} ?: return
|
||||
check(containingDeclaration is KtFirNamedClassOrObjectSymbol)
|
||||
|
||||
processOverrides(containingDeclaration, callableSymbol, process)
|
||||
when (containingDeclaration) {
|
||||
is KtFirNamedClassOrObjectSymbol -> processOverrides(containingDeclaration, callableSymbol, process)
|
||||
is KtFirAnonymousObjectSymbol -> processOverrides(containingDeclaration, callableSymbol, process)
|
||||
else -> throw IllegalStateException("Expected $containingDeclaration to be a KtFirNamedClassOrObjectSymbol or KtFirAnonymousObjectSymbol")
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun processOverrides(
|
||||
containingDeclaration: KtFirNamedClassOrObjectSymbol,
|
||||
containingDeclaration: KtFirSymbol<FirClass>,
|
||||
callableSymbol: KtFirSymbol<*>,
|
||||
crossinline process: (FirTypeScope, FirDeclaration) -> Unit
|
||||
) {
|
||||
|
||||
+6
@@ -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("inAnonymousClass.kt")
|
||||
public void testInAnonymousClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inLocalClass.kt")
|
||||
public void testInLocalClass() throws Exception {
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
fun foo() {
|
||||
open class A {
|
||||
open fun foo() {}
|
||||
}
|
||||
|
||||
object : A() {
|
||||
override fun fo<caret>o() {}
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
ALL:
|
||||
foo.A.foo(): Unit
|
||||
DIRECT:
|
||||
foo.A.foo(): Unit
|
||||
Reference in New Issue
Block a user