FIR: Cache ConeClassifierSymbol in ConeClassLikeLookupTagImpl

This commit is contained in:
Denis Zharkov
2019-05-30 18:07:56 +03:00
committed by Mikhail Glukhikh
parent 91d8f1fc88
commit 373283dcae
2 changed files with 11 additions and 1 deletions
@@ -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}")
}