FIR: Cache ConeClassifierSymbol in ConeClassLikeLookupTagImpl
This commit is contained in:
committed by
Mikhail Glukhikh
parent
91d8f1fc88
commit
373283dcae
@@ -32,6 +32,8 @@ interface ConeTypeAliasLookupTag : ConeClassLikeLookupTag
|
||||
interface ConeClassLookupTag : ConeClassLikeLookupTag
|
||||
|
||||
class ConeClassLikeLookupTagImpl(override val classId: ClassId) : ConeClassLikeLookupTag {
|
||||
var boundSymbol: Pair<*, *>? = null
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
@@ -21,7 +21,15 @@ interface FirSymbolProvider {
|
||||
|
||||
fun getSymbolByLookupTag(lookupTag: ConeClassifierLookupTag): ConeClassifierSymbol? {
|
||||
return when (lookupTag) {
|
||||
is ConeClassLikeLookupTag -> getClassLikeSymbolByFqName(lookupTag.classId)
|
||||
is ConeClassLikeLookupTag -> {
|
||||
(lookupTag as? ConeClassLikeLookupTagImpl)
|
||||
?.boundSymbol?.takeIf { it.first === this }?.let { return it.second as ConeClassifierSymbol? }
|
||||
|
||||
getClassLikeSymbolByFqName(lookupTag.classId).also {
|
||||
(lookupTag as? ConeClassLikeLookupTagImpl)
|
||||
?.boundSymbol = Pair(this, it)
|
||||
}
|
||||
}
|
||||
is ConeClassifierLookupTagWithFixedSymbol -> lookupTag.symbol
|
||||
else -> error("Unknown lookupTag type: ${lookupTag::class}")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user