Set proper fir type for deserialized annotation's arguments
This commit is contained in:
committed by
TeamCityServer
parent
b3fa7b25cf
commit
ca1932b3a5
+12
-10
@@ -225,29 +225,29 @@ abstract class AbstractAnnotationDeserializer(
|
|||||||
return when (value.type) {
|
return when (value.type) {
|
||||||
BYTE -> {
|
BYTE -> {
|
||||||
val kind = if (isUnsigned) ConstantValueKind.UnsignedByte else ConstantValueKind.Byte
|
val kind = if (isUnsigned) ConstantValueKind.UnsignedByte else ConstantValueKind.Byte
|
||||||
const(kind, value.intValue.toByte())
|
const(kind, value.intValue.toByte(), session.builtinTypes.byteType)
|
||||||
}
|
}
|
||||||
|
|
||||||
SHORT -> {
|
SHORT -> {
|
||||||
val kind = if (isUnsigned) ConstantValueKind.UnsignedShort else ConstantValueKind.Short
|
val kind = if (isUnsigned) ConstantValueKind.UnsignedShort else ConstantValueKind.Short
|
||||||
const(kind, value.intValue.toShort())
|
const(kind, value.intValue.toShort(), session.builtinTypes.shortType)
|
||||||
}
|
}
|
||||||
|
|
||||||
INT -> {
|
INT -> {
|
||||||
val kind = if (isUnsigned) ConstantValueKind.UnsignedInt else ConstantValueKind.Int
|
val kind = if (isUnsigned) ConstantValueKind.UnsignedInt else ConstantValueKind.Int
|
||||||
const(kind, value.intValue.toInt())
|
const(kind, value.intValue.toInt(), session.builtinTypes.intType)
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG -> {
|
LONG -> {
|
||||||
val kind = if (isUnsigned) ConstantValueKind.UnsignedLong else ConstantValueKind.Long
|
val kind = if (isUnsigned) ConstantValueKind.UnsignedLong else ConstantValueKind.Long
|
||||||
const(kind, value.intValue)
|
const(kind, value.intValue, session.builtinTypes.longType)
|
||||||
}
|
}
|
||||||
|
|
||||||
CHAR -> const(ConstantValueKind.Char, value.intValue.toInt().toChar())
|
CHAR -> const(ConstantValueKind.Char, value.intValue.toInt().toChar(), session.builtinTypes.charType)
|
||||||
FLOAT -> const(ConstantValueKind.Float, value.floatValue)
|
FLOAT -> const(ConstantValueKind.Float, value.floatValue, session.builtinTypes.floatType)
|
||||||
DOUBLE -> const(ConstantValueKind.Double, value.doubleValue)
|
DOUBLE -> const(ConstantValueKind.Double, value.doubleValue, session.builtinTypes.doubleType)
|
||||||
BOOLEAN -> const(ConstantValueKind.Boolean, (value.intValue != 0L))
|
BOOLEAN -> const(ConstantValueKind.Boolean, (value.intValue != 0L), session.builtinTypes.booleanType)
|
||||||
STRING -> const(ConstantValueKind.String, nameResolver.getString(value.stringValue))
|
STRING -> const(ConstantValueKind.String, nameResolver.getString(value.stringValue), session.builtinTypes.stringType)
|
||||||
ANNOTATION -> deserializeAnnotation(value.annotation, nameResolver)
|
ANNOTATION -> deserializeAnnotation(value.annotation, nameResolver)
|
||||||
CLASS -> buildGetClassCall {
|
CLASS -> buildGetClassCall {
|
||||||
val classId = nameResolver.getClassId(value.classId)
|
val classId = nameResolver.getClassId(value.classId)
|
||||||
@@ -296,5 +296,7 @@ abstract class AbstractAnnotationDeserializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T> const(kind: ConstantValueKind<T>, value: T) = buildConstExpression(null, kind, value)
|
private fun <T> const(kind: ConstantValueKind<T>, value: T, typeRef: FirResolvedTypeRef): FirConstExpression<T> {
|
||||||
|
return buildConstExpression(null, kind, value).apply { this.replaceTypeRef(typeRef) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user