From 9934cfbb0004f7118b0d7739bfffbddbfc63af67 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 2 Mar 2021 14:50:18 -0800 Subject: [PATCH] FIR2IR: minimize scope processing in fake override generation --- .../backend/generators/FakeOverrideGenerator.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index ed09bd55d37..ae268d40801 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -67,9 +67,21 @@ class FakeOverrideGenerator( } fun IrClass.getFakeOverrides(klass: FirClass<*>, realDeclarations: Collection): List { + val classLookupTag = klass.symbol.toLookupTag() + val realDeclarationNames = realDeclarations.mapNotNullTo(mutableSetOf()) { + val callableDeclaration = (it as? FirCallableMemberDeclaration<*>) ?: return@mapNotNullTo null + // We may need to create a new fake override or compute base symbols. + if (callableDeclaration.symbol.shouldHaveComputedBaseSymbolsForClass(classLookupTag) || + callableDeclaration.allowsToHaveFakeOverrideIn(klass) + ) null + // Otherwise, bail out early based on the name of the contributed member declaration + else callableDeclaration.symbol.callableId.callableName + } + val result = mutableListOf() val useSiteMemberScope = klass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true) - val superTypesCallableNames = useSiteMemberScope.getCallableNames() + val superTypesCallableNames = useSiteMemberScope.getCallableNames().filter { it !in realDeclarationNames } + val realDeclarationSymbols = realDeclarations.filterIsInstance>().mapTo(mutableSetOf(), FirSymbolOwner<*>::symbol) for (name in superTypesCallableNames) {