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.low.level.api.fir.lazy.resolve.ResolveType
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtSymbolDeclarationOverridesProvider
|
import org.jetbrains.kotlin.analysis.api.components.KtSymbolDeclarationOverridesProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
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.KtFirNamedClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
@@ -97,13 +98,15 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
|||||||
val containingDeclaration = with(analysisSession) {
|
val containingDeclaration = with(analysisSession) {
|
||||||
(callableSymbol as? KtCallableSymbol)?.originalContainingClassForOverride
|
(callableSymbol as? KtCallableSymbol)?.originalContainingClassForOverride
|
||||||
} ?: return
|
} ?: return
|
||||||
check(containingDeclaration is KtFirNamedClassOrObjectSymbol)
|
when (containingDeclaration) {
|
||||||
|
is KtFirNamedClassOrObjectSymbol -> processOverrides(containingDeclaration, callableSymbol, process)
|
||||||
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(
|
private inline fun processOverrides(
|
||||||
containingDeclaration: KtFirNamedClassOrObjectSymbol,
|
containingDeclaration: KtFirSymbol<FirClass>,
|
||||||
callableSymbol: KtFirSymbol<*>,
|
callableSymbol: KtFirSymbol<*>,
|
||||||
crossinline process: (FirTypeScope, FirDeclaration) -> Unit
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inLocalClass.kt")
|
@TestMetadata("inLocalClass.kt")
|
||||||
public void testInLocalClass() throws Exception {
|
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