[Analysis API] do not create multiple attachments inside exceptions
This commit is contained in:
+2
-3
@@ -15,10 +15,9 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.utils.errorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
|
||||
@OptIn(KtAnalysisApiInternals::class)
|
||||
class KtFirAnalysisSessionProvider(project: Project) : CachingKtAnalysisSessionProvider<LLFirResolveSession>(project) {
|
||||
@@ -29,7 +28,7 @@ class KtFirAnalysisSessionProvider(project: Project) : CachingKtAnalysisSessionP
|
||||
override fun getFirResolveSession(contextSymbol: KtSymbol): LLFirResolveSession {
|
||||
return when (contextSymbol) {
|
||||
is KtFirSymbol<*> -> contextSymbol.firResolveSession
|
||||
else -> errorWithAttachment("Invalid symbol") {
|
||||
else -> buildErrorWithAttachment("Invalid symbol") {
|
||||
withSymbolAttachment("symbol", contextSymbol)
|
||||
}
|
||||
}
|
||||
|
||||
+12
-12
@@ -20,10 +20,10 @@ import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withConeTypeAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirSymbolAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withConeTypeEntry
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirSymbolEntry
|
||||
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
@@ -53,7 +53,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.utils.errorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
|
||||
@@ -210,7 +210,7 @@ internal class KtSymbolByFirBuilder constructor(
|
||||
if (firSymbol.dispatchReceiverType?.contains { it is ConeStubType } == true) {
|
||||
return buildFunctionSymbol(
|
||||
firSymbol.originalIfFakeOverride()
|
||||
?: firErrorWithAttachment("Stub type in real declaration", fir = firSymbol.fir)
|
||||
?: errorWithFirSpecificEntries("Stub type in real declaration", fir = firSymbol.fir)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -588,20 +588,20 @@ internal class KtSymbolByFirBuilder constructor(
|
||||
|
||||
companion object {
|
||||
private fun throwUnexpectedElementError(element: FirBasedSymbol<*>): Nothing {
|
||||
errorWithAttachment("Unexpected ${element::class.simpleName}") {
|
||||
withFirSymbolAttachment("firSymbol", element)
|
||||
buildErrorWithAttachment("Unexpected ${element::class.simpleName}") {
|
||||
withFirSymbolEntry("firSymbol", element)
|
||||
}
|
||||
}
|
||||
|
||||
private fun throwUnexpectedElementError(element: FirElement): Nothing {
|
||||
errorWithAttachment("Unexpected ${element::class.simpleName}") {
|
||||
withFirAttachment("firElement", element)
|
||||
buildErrorWithAttachment("Unexpected ${element::class.simpleName}") {
|
||||
withFirEntry("firElement", element)
|
||||
}
|
||||
}
|
||||
|
||||
private fun throwUnexpectedElementError(element: ConeKotlinType): Nothing {
|
||||
errorWithAttachment("Unexpected ${element::class.simpleName}") {
|
||||
withConeTypeAttachment("coneType", element)
|
||||
buildErrorWithAttachment("Unexpected ${element::class.simpleName}") {
|
||||
withConeTypeEntry("coneType", element)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-8
@@ -25,9 +25,8 @@ import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolver.AllCandidatesResolver
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.parentOfType
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol
|
||||
@@ -69,7 +68,8 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import org.jetbrains.kotlin.utils.errorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry
|
||||
|
||||
internal class KtFirCallResolver(
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
@@ -155,7 +155,7 @@ internal class KtFirCallResolver(
|
||||
when (val calleeReference = calleeReference) {
|
||||
is FirResolvedNamedReference -> {
|
||||
val call = createKtCall(psi, this, null, resolveFragmentOfCall)
|
||||
?: firErrorWithAttachment("expect `createKtCall` to succeed for resolvable case", fir = this, psi = psi)
|
||||
?: errorWithFirSpecificEntries("expect `createKtCall` to succeed for resolvable case", fir = this, psi = psi)
|
||||
KtSuccessCallInfo(call)
|
||||
}
|
||||
is FirErrorNamedReference -> {
|
||||
@@ -1167,9 +1167,9 @@ internal class KtFirCallResolver(
|
||||
}
|
||||
|
||||
override fun unresolvedKtCallError(psi: KtElement): Nothing {
|
||||
errorWithAttachment("${psi::class.simpleName}(${psi::class.simpleName}) should always resolve to a KtCallInfo") {
|
||||
withPsiAttachment("psi", psi)
|
||||
psi.getOrBuildFir(firResolveSession)?.let { withFirAttachment("fir", it) }
|
||||
buildErrorWithAttachment("${psi::class.simpleName}(${psi::class.simpleName}) should always resolve to a KtCallInfo") {
|
||||
withPsiEntry("psi", psi)
|
||||
psi.getOrBuildFir(firResolveSession)?.let { withFirEntry("fir", it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.parentOfType
|
||||
import org.jetbrains.kotlin.psi
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.utils.errorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
|
||||
internal class KtFirSymbolContainingDeclarationProvider(
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
@@ -87,7 +87,7 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
||||
private fun getContainingPsi(symbol: KtFirSymbol<*>): KtDeclaration {
|
||||
val source = symbol.firSymbol.source
|
||||
val thisSource = when (source?.kind) {
|
||||
null -> errorWithAttachment("PSI should present for declaration built by Kotlin code") {
|
||||
null -> buildErrorWithAttachment("PSI should present for declaration built by Kotlin code") {
|
||||
withSymbolAttachment("symbolForContainingPsi", symbol)
|
||||
}
|
||||
|
||||
@@ -99,19 +99,19 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
||||
KtFakeSourceElementKind.ItLambdaParameter -> return source.psi as KtFunctionLiteral
|
||||
KtRealSourceElementKind -> source.psi!!
|
||||
else ->
|
||||
errorWithAttachment("errorWithAttachment FirSourceElement: kind=${source.kind} element=${source.psi!!::class.simpleName}") {
|
||||
buildErrorWithAttachment("errorWithAttachment FirSourceElement: kind=${source.kind} element=${source.psi!!::class.simpleName}") {
|
||||
withSymbolAttachment("symbolForContainingPsi", symbol)
|
||||
}
|
||||
}
|
||||
|
||||
return when (symbol.origin) {
|
||||
KtSymbolOrigin.SOURCE -> thisSource.getContainingKtDeclaration()
|
||||
?: errorWithAttachment("Containing declaration should present for non-toplevel declaration") {
|
||||
?: buildErrorWithAttachment("Containing declaration should present for non-toplevel declaration") {
|
||||
withSymbolAttachment("symbolForContainingPsi", symbol)
|
||||
}
|
||||
|
||||
KtSymbolOrigin.SOURCE_MEMBER_GENERATED -> thisSource as KtDeclaration
|
||||
else -> errorWithAttachment("Unsupported declaration origin ${symbol.origin}") {
|
||||
else -> buildErrorWithAttachment("Unsupported declaration origin ${symbol.origin}") {
|
||||
withSymbolAttachment("symbolForContainingPsi", symbol)
|
||||
}
|
||||
}
|
||||
@@ -128,7 +128,7 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
||||
check(symbol.symbolKind == KtSymbolKind.CLASS_MEMBER)
|
||||
|
||||
fun error(message: String): Nothing {
|
||||
errorWithAttachment(message) {
|
||||
buildErrorWithAttachment(message) {
|
||||
withSymbolAttachment("symbolToGetContaining", symbol)
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -11,8 +11,8 @@ import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAcces
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectData
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.originalForWrappedIntegerOperator
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.utils.errorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
|
||||
internal interface KtFirSymbol<out S : FirBasedSymbol<*>> : KtSymbol, KtLifetimeOwner {
|
||||
val firSymbol: S
|
||||
@@ -63,16 +63,16 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori
|
||||
is FirSyntheticProperty,
|
||||
is FirSyntheticPropertyAccessor -> KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY
|
||||
|
||||
else -> errorWithAttachment("Invalid FirDeclarationOrigin ${origin::class.simpleName}") {
|
||||
withFirAttachment("firToGetOrigin", this@ktSymbolOrigin)
|
||||
else -> buildErrorWithAttachment("Invalid FirDeclarationOrigin ${origin::class.simpleName}") {
|
||||
withFirEntry("firToGetOrigin", this@ktSymbolOrigin)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FirDeclarationOrigin.ImportedFromObject -> {
|
||||
val importedFromObjectData = (this as FirCallableDeclaration).importedFromObjectData
|
||||
?: errorWithAttachment("Declaration has ImportedFromObject origin, but no importedFromObjectData present") {
|
||||
withFirAttachment("firToGetOrigin", this@ktSymbolOrigin)
|
||||
?: buildErrorWithAttachment("Declaration has ImportedFromObject origin, but no importedFromObjectData present") {
|
||||
withFirEntry("firToGetOrigin", this@ktSymbolOrigin)
|
||||
}
|
||||
|
||||
importedFromObjectData.original.ktSymbolOrigin()
|
||||
@@ -80,7 +80,7 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori
|
||||
|
||||
FirDeclarationOrigin.WrappedIntegerOperator -> {
|
||||
val original = (this as FirSimpleFunction).originalForWrappedIntegerOperator?.fir
|
||||
?: firErrorWithAttachment(
|
||||
?: errorWithFirSpecificEntries(
|
||||
"Declaration has WrappedIntegerOperator origin, but no originalForWrappedIntegerOperator present",
|
||||
fir = this
|
||||
)
|
||||
@@ -91,7 +91,7 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori
|
||||
is FirDeclarationOrigin.Plugin -> KtSymbolOrigin.PLUGIN
|
||||
FirDeclarationOrigin.RenamedForOverride -> KtSymbolOrigin.JAVA
|
||||
FirDeclarationOrigin.SubstitutionOverride -> KtSymbolOrigin.SUBSTITUTION_OVERRIDE
|
||||
FirDeclarationOrigin.DynamicScope -> errorWithAttachment("Invalid FirDeclarationOrigin ${origin::class.simpleName}") {
|
||||
withFirAttachment("firToGetOrigin", this@ktSymbolOrigin)
|
||||
FirDeclarationOrigin.DynamicScope -> buildErrorWithAttachment("Invalid FirDeclarationOrigin ${origin::class.simpleName}") {
|
||||
withFirEntry("firToGetOrigin", this@ktSymbolOrigin)
|
||||
}
|
||||
}
|
||||
|
||||
+11
-14
@@ -10,21 +10,18 @@ import org.jetbrains.kotlin.analysis.api.fir.components.KtFirAnalysisSessionComp
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbolOfType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirSymbolAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiAttachment
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirSymbolEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.renderWithType
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.utils.errorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry
|
||||
|
||||
internal class KtFirSymbolProvider(
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
@@ -33,7 +30,7 @@ internal class KtFirSymbolProvider(
|
||||
|
||||
override fun getParameterSymbol(psi: KtParameter): KtVariableLikeSymbol {
|
||||
return when {
|
||||
psi.isFunctionTypeParameter -> firErrorWithAttachment(
|
||||
psi.isFunctionTypeParameter -> errorWithFirSpecificEntries(
|
||||
"Creating KtValueParameterSymbol for function type parameter is not possible. Please see the KDoc of getParameterSymbol",
|
||||
psi = psi,
|
||||
)
|
||||
@@ -69,9 +66,9 @@ internal class KtFirSymbolProvider(
|
||||
}
|
||||
|
||||
is FirAnonymousFunctionSymbol -> firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(firSymbol)
|
||||
else -> errorWithAttachment("Unexpected ${firSymbol::class}") {
|
||||
withFirSymbolAttachment("firSymbol", firSymbol)
|
||||
withPsiAttachment("function", psi)
|
||||
else -> buildErrorWithAttachment("Unexpected ${firSymbol::class}") {
|
||||
withFirSymbolEntry("firSymbol", firSymbol)
|
||||
withPsiEntry("function", psi)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -137,9 +134,9 @@ internal class KtFirSymbolProvider(
|
||||
private fun KtClassOrObject.resolveToFirClassLikeSymbol(): FirClassSymbol<*> {
|
||||
return when (val firClassLike = resolveToFirSymbolOfType<FirClassLikeSymbol<*>>(firResolveSession)) {
|
||||
is FirTypeAliasSymbol -> firClassLike.fullyExpandedClass(firResolveSession.useSiteFirSession)
|
||||
?: errorWithAttachment("${firClassLike.fir::class} should be expanded to the expected type alias") {
|
||||
withFirSymbolAttachment("firClassLikeSymbol", firClassLike)
|
||||
withPsiAttachment("ktClassOrObject", this@resolveToFirClassLikeSymbol)
|
||||
?: buildErrorWithAttachment("${firClassLike.fir::class} should be expanded to the expected type alias") {
|
||||
withFirSymbolEntry("firClassLikeSymbol", firClassLike)
|
||||
withPsiEntry("ktClassOrObject", this@resolveToFirClassLikeSymbol)
|
||||
}
|
||||
is FirAnonymousObjectSymbol -> firClassLike
|
||||
is FirRegularClassSymbol -> firClassLike
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtFunctionalType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.isExtensionFunctionType
|
||||
import org.jetbrains.kotlin.fir.types.isSuspendFunctionType
|
||||
@@ -33,7 +33,7 @@ internal class KtFirFunctionalType(
|
||||
override val classId: ClassId get() = withValidityAssertion { coneType.lookupTag.classId }
|
||||
override val classSymbol: KtClassLikeSymbol by cached {
|
||||
builder.classifierBuilder.buildClassLikeSymbolByLookupTag(coneType.lookupTag)
|
||||
?: firErrorWithAttachment("Class was not found", coneType = coneType)
|
||||
?: errorWithFirSpecificEntries("Class was not found", coneType = coneType)
|
||||
}
|
||||
override val typeArguments: List<KtTypeArgument> by cached {
|
||||
coneType.typeArguments.map { typeArgument ->
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeParameterType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
||||
import org.jetbrains.kotlin.fir.types.renderForDebugging
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -27,7 +27,7 @@ internal class KtFirTypeParameterType(
|
||||
override val name: Name get() = withValidityAssertion { coneType.lookupTag.name }
|
||||
override val symbol: KtTypeParameterSymbol by cached {
|
||||
builder.classifierBuilder.buildTypeParameterSymbolByLookupTag(coneType.lookupTag)
|
||||
?: firErrorWithAttachment("Type parameter was not found", coneType = coneType)
|
||||
?: errorWithFirSpecificEntries("Type parameter was not found", coneType = coneType)
|
||||
}
|
||||
|
||||
override val annotationsList: KtAnnotationsList by cached {
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtUsualClassType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.firErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.renderForDebugging
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -28,7 +28,7 @@ internal class KtFirUsualClassType(
|
||||
override val classId: ClassId get() = withValidityAssertion { coneType.lookupTag.classId }
|
||||
override val classSymbol: KtClassLikeSymbol by cached {
|
||||
builder.classifierBuilder.buildClassLikeSymbolByLookupTag(coneType.lookupTag)
|
||||
?: firErrorWithAttachment("Class was not found", coneType = coneType)
|
||||
?: errorWithFirSpecificEntries("Class was not found", coneType = coneType)
|
||||
}
|
||||
override val typeArguments: List<KtTypeArgument> by cached {
|
||||
coneType.typeArguments.map { typeArgument ->
|
||||
|
||||
+7
-8
@@ -8,19 +8,18 @@ package org.jetbrains.kotlin.analysis.api.fir.utils
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiAttachment
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.ExceptionAttachmentBuilder
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry
|
||||
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
||||
import org.jetbrains.kotlin.utils.withAttachmentDetailed
|
||||
|
||||
|
||||
fun KotlinExceptionWithAttachments.withSymbolAttachment(name: String, symbol: KtSymbol): KotlinExceptionWithAttachments {
|
||||
withAttachmentDetailed(name, symbol, DebugSymbolRenderer::render)
|
||||
withPsiAttachment("${name}Psi", symbol.psi)
|
||||
fun ExceptionAttachmentBuilder.withSymbolAttachment(name: String, symbol: KtSymbol) {
|
||||
withEntry(name, symbol, DebugSymbolRenderer::render)
|
||||
withPsiEntry("${name}Psi", symbol.psi)
|
||||
|
||||
if (symbol is KtFirSymbol<*>) {
|
||||
val symbolFir = symbol.firSymbol.fir
|
||||
withFirAttachment("${name}Fir", symbolFir)
|
||||
withFirEntry("${name}Fir", symbolFir)
|
||||
}
|
||||
return this
|
||||
}
|
||||
Reference in New Issue
Block a user