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
|
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.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
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.NEXT
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
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
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope {
|
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope {
|
||||||
private val callablesIndex by lazy {
|
private val callablesIndex: Map<Name, List<FirCallableSymbol>> by lazy {
|
||||||
klass.declarations.filterIsInstance<FirCallableDeclaration>()
|
val result = mutableMapOf<Name, MutableList<FirCallableSymbol>>()
|
||||||
.map { it.symbol }.groupBy { it.callableId.callableName }
|
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 {
|
private val classIndex: Map<Name, FirClassSymbol> by lazy {
|
||||||
klass.declarations.filterIsInstance<FirRegularClass>()
|
val result = mutableMapOf<Name, FirClassSymbol>()
|
||||||
.map { it.symbol }.associateBy { it.fir.name }
|
for (declaration in klass.declarations) {
|
||||||
|
if (declaration is FirRegularClass) {
|
||||||
|
result[declaration.name] = declaration.symbol
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
|
|||||||
Reference in New Issue
Block a user