FIR IDE: allow get overriding symbols of members in anonymous object

This commit is contained in:
Tianyu Geng
2021-08-25 21:31:27 -07:00
committed by Ilya Kirillov
parent 50166c776c
commit 54b32f6911
4 changed files with 26 additions and 4 deletions
@@ -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
) {
@@ -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 {
@@ -0,0 +1,9 @@
fun foo() {
open class A {
open fun foo() {}
}
object : A() {
override fun fo<caret>o() {}
}
}
@@ -0,0 +1,4 @@
ALL:
foo.A.foo(): Unit
DIRECT:
foo.A.foo(): Unit