FirClassDeclaredMemberScope: rewrite index calculation imperatively
This should save some performance at this point
This commit is contained in:
+22
-7
@@ -5,7 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.scopes.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
@@ -13,16 +14,30 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||
import org.jetbrains.kotlin.fir.symbols.*
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope {
|
||||
private val callablesIndex by lazy {
|
||||
klass.declarations.filterIsInstance<FirCallableDeclaration>()
|
||||
.map { it.symbol }.groupBy { it.callableId.callableName }
|
||||
private val callablesIndex: Map<Name, List<FirCallableSymbol>> by lazy {
|
||||
val result = mutableMapOf<Name, MutableList<FirCallableSymbol>>()
|
||||
for (declaration in klass.declarations) {
|
||||
if (declaration is FirCallableMemberDeclaration) {
|
||||
val name = if (declaration is FirConstructor) klass.name else declaration.name
|
||||
val list = result.getOrPut(name) { mutableListOf() }
|
||||
list += declaration.symbol
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
private val classIndex by lazy {
|
||||
klass.declarations.filterIsInstance<FirRegularClass>()
|
||||
.map { it.symbol }.associateBy { it.fir.name }
|
||||
private val classIndex: Map<Name, FirClassSymbol> by lazy {
|
||||
val result = mutableMapOf<Name, FirClassSymbol>()
|
||||
for (declaration in klass.declarations) {
|
||||
if (declaration is FirRegularClass) {
|
||||
result[declaration.name] = declaration.symbol
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
||||
|
||||
Reference in New Issue
Block a user