FirClassDeclaredMemberScope: rewrite index calculation imperatively

This should save some performance at this point
This commit is contained in:
Mikhail Glukhikh
2019-05-31 14:35:21 +03:00
parent 8ae77da250
commit 73a6714ad1
@@ -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 {