FirClassDeclaredMemberScope: use just Name instead of ClassId/CallableId

This should decrease amount of created garbage a little bit
This commit is contained in:
Mikhail Glukhikh
2019-05-31 14:25:41 +03:00
parent e403195684
commit 4ad3e429aa
@@ -13,32 +13,27 @@ 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.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirClassDeclaredMemberScope( class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope {
klass: FirRegularClass
) : FirScope {
private val classId = klass.symbol.classId
private val callablesIndex by lazy { private val callablesIndex by lazy {
klass.declarations.filterIsInstance<FirCallableDeclaration>() klass.declarations.filterIsInstance<FirCallableDeclaration>()
.map { it.symbol }.groupBy { it.callableId } .map { it.symbol }.groupBy { it.callableId.callableName }
} }
private val classIndex by lazy { private val classIndex by lazy {
klass.declarations.filterIsInstance<FirRegularClass>() klass.declarations.filterIsInstance<FirRegularClass>()
.map { it.symbol }.associateBy { it.classId } .map { it.symbol }.associateBy { it.fir.name }
} }
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction { override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
val matchedClass = classIndex[ClassId(classId.packageFqName, classId.relativeClassName.child(name), false)] val matchedClass = classIndex[name]
if (matchedClass != null) { if (matchedClass != null) {
if (FirClassDeclaredMemberScope(matchedClass.fir).processFunctionsByName(name, processor) == STOP) { if (FirClassDeclaredMemberScope(matchedClass.fir).processFunctionsByName(name, processor) == STOP) {
return STOP return STOP
} }
} }
val symbols = callablesIndex[CallableId(classId.packageFqName, classId.relativeClassName, name)] ?: emptyList() val symbols = callablesIndex[name] ?: emptyList()
for (symbol in symbols) { for (symbol in symbols) {
if (symbol is ConeFunctionSymbol && !processor(symbol)) { if (symbol is ConeFunctionSymbol && !processor(symbol)) {
return STOP return STOP
@@ -48,7 +43,7 @@ class FirClassDeclaredMemberScope(
} }
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
val symbols = callablesIndex[CallableId(classId.packageFqName, classId.relativeClassName, name)] ?: emptyList() val symbols = callablesIndex[name] ?: emptyList()
for (symbol in symbols) { for (symbol in symbols) {
if (symbol is ConePropertySymbol && !processor(symbol)) { if (symbol is ConePropertySymbol && !processor(symbol)) {
return STOP return STOP
@@ -58,7 +53,7 @@ class FirClassDeclaredMemberScope(
} }
override fun processClassifiersByName(name: Name, position: FirPosition, processor: (ConeClassifierSymbol) -> Boolean): Boolean { override fun processClassifiersByName(name: Name, position: FirPosition, processor: (ConeClassifierSymbol) -> Boolean): Boolean {
val matchedClass = classIndex[classId.createNestedClassId(name)] val matchedClass = classIndex[name]
if (matchedClass != null && !processor(matchedClass)) { if (matchedClass != null && !processor(matchedClass)) {
return false return false
} }