[AA FIR] KtFirClassLikeSymbolPointer: replace lambda with regular class check
^KT-54311
This commit is contained in:
committed by
Space Team
parent
ab2edd40d4
commit
871fd09e3f
+3
-1
@@ -109,7 +109,9 @@ internal class KtFirNamedClassOrObjectSymbol(
|
|||||||
KtSymbolKind.LOCAL ->
|
KtSymbolKind.LOCAL ->
|
||||||
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString())
|
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)
|
else -> throw UnsupportedSymbolKind(this::class, symbolKind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -64,7 +64,7 @@ internal class KtFirTypeAliasSymbol(
|
|||||||
KtSymbolKind.LOCAL ->
|
KtSymbolKind.LOCAL ->
|
||||||
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString())
|
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)
|
else -> throw UnsupportedSymbolKind(this::class, symbolKind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-2
@@ -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.KtClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
internal class KtFirClassLikeSymbolPointer<T : KtClassLikeSymbol>(
|
internal class KtFirClassLikeSymbolPointer<T : KtClassLikeSymbol>(
|
||||||
private val classId: ClassId,
|
private val classId: ClassId,
|
||||||
private val castAction: (KtClassLikeSymbol) -> T?,
|
private val expectedClass: KClass<T>,
|
||||||
) : KtSymbolPointer<T>() {
|
) : KtSymbolPointer<T>() {
|
||||||
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||||
override fun restoreSymbol(analysisSession: KtAnalysisSession): T? {
|
override fun restoreSymbol(analysisSession: KtAnalysisSession): T? {
|
||||||
require(analysisSession is KtFirAnalysisSession)
|
require(analysisSession is KtFirAnalysisSession)
|
||||||
val classLikeSymbol = analysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbolByClassId(classId) ?: return null
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user