[FIR] Initialize type for annotation arguments during deserialization
Get rid of IrErrorTypeImpl creating in FIR2IR
This commit is contained in:
@@ -1173,18 +1173,11 @@ class Fir2IrVisitor(
|
||||
|
||||
private fun convertToArrayOfCall(arrayOfCall: FirArrayOfCall, annotationMode: Boolean): IrVararg {
|
||||
return arrayOfCall.convertWithOffsets { startOffset, endOffset ->
|
||||
lateinit var elementType: IrType
|
||||
lateinit var arrayType: IrType
|
||||
// Resolved arrayOf call will have resolved type. FirArrayOfCall from collection literal won't.
|
||||
if (arrayOfCall.typeRef is FirResolvedTypeRef) {
|
||||
arrayType = arrayOfCall.typeRef.toIrType()
|
||||
elementType = arrayType.getArrayElementType(irBuiltIns)
|
||||
val arrayType = arrayOfCall.typeRef.toIrType()
|
||||
val elementType = if (arrayOfCall.typeRef is FirResolvedTypeRef) {
|
||||
arrayType.getArrayElementType(irBuiltIns)
|
||||
} else {
|
||||
// TODO: The element type should be the least upper bound of all arguments' types, e.g., ["4", 2u, 0.42f] => Array<Any>
|
||||
// Currently, the type of elements in array literals still has integer literal type, which shouldn't be at this stage.
|
||||
// elementType = arrayOfCall.arguments.map { it.typeRef.toIrType() }.commonSupertype(irBuiltIns)
|
||||
elementType = arrayOfCall.arguments.firstOrNull()?.typeRef?.toIrType() ?: createErrorType()
|
||||
arrayType = elementType.toArrayOrPrimitiveArrayType(irBuiltIns)
|
||||
createErrorType()
|
||||
}
|
||||
IrVarargImpl(
|
||||
startOffset, endOffset,
|
||||
|
||||
+6
@@ -311,6 +311,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/annotations/resolveWithLowPriorityAnnotation.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("resolvedReturnTypeForJavaEnumEntryAfterDeserialization.kt")
|
||||
public void testResolvedReturnTypeForJavaEnumEntryAfterDeserialization() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/annotations/resolvedReturnTypeForJavaEnumEntryAfterDeserialization.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("retentionInJava.kt")
|
||||
public void testRetentionInJava() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user