diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt index 44d47c1e2ec..c7d3631ec54 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt @@ -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, callableSymbol: KtFirSymbol<*>, crossinline process: (FirTypeScope, FirDeclaration) -> Unit ) { diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java index dd8a1374a99..8a22d38c0a4 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/OverriddenDeclarationProviderTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.kt b/analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.kt new file mode 100644 index 00000000000..401b90b91c6 --- /dev/null +++ b/analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.kt @@ -0,0 +1,9 @@ +fun foo() { + open class A { + open fun foo() {} + } + + object : A() { + override fun foo() {} + } +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.txt b/analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.txt new file mode 100644 index 00000000000..064868264e5 --- /dev/null +++ b/analysis/analysis-api/testData/components/overridenDeclarations/inAnonymousClass.txt @@ -0,0 +1,4 @@ +ALL: + foo.A.foo(): Unit +DIRECT: + foo.A.foo(): Unit