[FIR] Deserialize enum entries access in annotations into FirEnumEntryDeserializedAccessExpression
^KT-64975 Fixed ^KT-62900
This commit is contained in:
committed by
Space Team
parent
150ff1172e
commit
a4e8be8687
+3
-20
@@ -280,26 +280,9 @@ abstract class AbstractAnnotationDeserializer(
|
||||
)
|
||||
coneTypeOrNull = resolvedType
|
||||
}
|
||||
ENUM -> buildPropertyAccessExpression {
|
||||
val classId = nameResolver.getClassId(value.classId)
|
||||
val entryName = nameResolver.getName(value.enumValueId)
|
||||
|
||||
val enumLookupTag = classId.toLookupTag()
|
||||
val enumSymbol = enumLookupTag.toSymbol(session)
|
||||
val firClass = enumSymbol?.fir as? FirRegularClass
|
||||
val enumEntries = firClass?.collectEnumEntries() ?: emptyList()
|
||||
val enumEntrySymbol = enumEntries.find { it.name == entryName }
|
||||
calleeReference = enumEntrySymbol?.let {
|
||||
buildResolvedNamedReference {
|
||||
name = entryName
|
||||
resolvedSymbol = it.symbol
|
||||
}
|
||||
} ?: buildFromMissingDependenciesNamedReference {
|
||||
name = entryName
|
||||
}
|
||||
if (enumEntrySymbol != null) {
|
||||
coneTypeOrNull = enumEntrySymbol.returnTypeRef.coneTypeOrNull
|
||||
}
|
||||
ENUM -> buildEnumEntryDeserializedAccessExpression {
|
||||
enumClassId = nameResolver.getClassId(value.classId)
|
||||
enumEntryName = nameResolver.getName(value.enumValueId)
|
||||
}
|
||||
ARRAY -> {
|
||||
val expectedArrayElementType = expectedType()?.arrayElementType() ?: session.builtinTypes.anyType.type
|
||||
|
||||
+14
-3
@@ -12,10 +12,12 @@ import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||
import org.jetbrains.kotlin.fir.expressions.FirEnumEntryDeserializedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredPropertySymbols
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.toLookupTag
|
||||
@@ -43,7 +45,16 @@ fun FirEnumEntryDeserializedAccessExpression.toQualifiedPropertyAccessExpression
|
||||
}
|
||||
}
|
||||
|
||||
coneTypeOrNull = ConeClassLikeTypeImpl(
|
||||
enumClassId.toLookupTag(), ConeTypeProjection.EMPTY_ARRAY, isNullable = false
|
||||
)
|
||||
val enumClassLookupTag = enumClassId.toLookupTag()
|
||||
val enumClassType = ConeClassLikeTypeImpl(enumClassLookupTag, ConeTypeProjection.EMPTY_ARRAY, isNullable = false)
|
||||
coneTypeOrNull = enumClassType
|
||||
|
||||
val receiver = buildResolvedQualifier {
|
||||
coneTypeOrNull = enumClassType
|
||||
packageFqName = enumClassId.packageFqName
|
||||
relativeClassFqName = enumClassId.relativeClassName
|
||||
symbol = enumClassLookupTag.toSymbol(session)
|
||||
}
|
||||
dispatchReceiver = receiver
|
||||
explicitReceiver = receiver
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user