[AA FIR] KtFirClassLikeSymbolPointer: replace lambda with regular class check

^KT-54311
This commit is contained in:
Dmitrii Gridin
2022-11-09 15:04:33 +01:00
committed by Space Team
parent ab2edd40d4
commit 871fd09e3f
3 changed files with 10 additions and 4 deletions
@@ -109,7 +109,9 @@ internal class KtFirNamedClassOrObjectSymbol(
KtSymbolKind.LOCAL ->
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString())
KtSymbolKind.CLASS_MEMBER, KtSymbolKind.TOP_LEVEL -> KtFirClassLikeSymbolPointer(classIdIfNonLocal!!) { it as? KtNamedClassOrObjectSymbol }
KtSymbolKind.CLASS_MEMBER, KtSymbolKind.TOP_LEVEL ->
KtFirClassLikeSymbolPointer(classIdIfNonLocal!!, KtNamedClassOrObjectSymbol::class)
else -> throw UnsupportedSymbolKind(this::class, symbolKind)
}
}
@@ -64,7 +64,7 @@ internal class KtFirTypeAliasSymbol(
KtSymbolKind.LOCAL ->
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString())
KtSymbolKind.CLASS_MEMBER, KtSymbolKind.TOP_LEVEL -> KtFirClassLikeSymbolPointer(classIdIfNonLocal!!) { it as? KtTypeAliasSymbol }
KtSymbolKind.CLASS_MEMBER, KtSymbolKind.TOP_LEVEL -> KtFirClassLikeSymbolPointer(classIdIfNonLocal!!, KtTypeAliasSymbol::class)
else -> throw UnsupportedSymbolKind(this::class, symbolKind)
}
}
@@ -10,15 +10,19 @@ import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.name.ClassId
import kotlin.reflect.KClass
internal class KtFirClassLikeSymbolPointer<T : KtClassLikeSymbol>(
private val classId: ClassId,
private val castAction: (KtClassLikeSymbol) -> T?,
private val expectedClass: KClass<T>,
) : KtSymbolPointer<T>() {
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
override fun restoreSymbol(analysisSession: KtAnalysisSession): T? {
require(analysisSession is KtFirAnalysisSession)
val classLikeSymbol = analysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbolByClassId(classId) ?: return null
return castAction(classLikeSymbol)
if (!expectedClass.isInstance(classLikeSymbol)) return null
@Suppress("UNCHECKED_CAST")
return classLikeSymbol as T
}
}