Kapt3: Fix literal expressions for byte and short
This commit is contained in:
committed by
Yan Zhulanow
parent
de0e4ac340
commit
d246bd8cff
+16
-9
@@ -203,11 +203,8 @@ class ClassFileToSourceStubConverter(
|
|||||||
|
|
||||||
val value = field.value
|
val value = field.value
|
||||||
|
|
||||||
val initializer = when (value) {
|
val initializer = convertValueOfPrimitiveTypeOrString(value)
|
||||||
is Char -> treeMaker.Literal(TypeTag.CHAR, value.toInt())
|
?: if (isFinal(field.access)) convertLiteralExpression(getDefaultValue(type)) else null
|
||||||
is Byte, is Boolean, is Short, is Int, is Long, is Float, is Double, is String -> treeMaker.Literal(value)
|
|
||||||
else -> if (isFinal(field.access)) convertLiteralExpression(getDefaultValue(type)) else null
|
|
||||||
}
|
|
||||||
|
|
||||||
return treeMaker.VarDef(modifiers, name, typeExpression, initializer)
|
return treeMaker.VarDef(modifiers, name, typeExpression, initializer)
|
||||||
}
|
}
|
||||||
@@ -346,11 +343,21 @@ class ClassFileToSourceStubConverter(
|
|||||||
return treeMaker.Annotation(name, values)
|
return treeMaker.Annotation(name, values)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun convertValueOfPrimitiveTypeOrString(value: Any?): JCExpression? {
|
||||||
|
return when (value) {
|
||||||
|
is Char -> treeMaker.Literal(TypeTag.CHAR, value.toInt())
|
||||||
|
is Byte -> treeMaker.TypeCast(treeMaker.TypeIdent(TypeTag.BYTE), treeMaker.Literal(TypeTag.INT, value.toInt()))
|
||||||
|
is Short -> treeMaker.TypeCast(treeMaker.TypeIdent(TypeTag.SHORT), treeMaker.Literal(TypeTag.INT, value.toInt()))
|
||||||
|
is Boolean, is Int, is Long, is Float, is Double, is String -> treeMaker.Literal(value)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun convertLiteralExpression(value: Any?): JCExpression {
|
private fun convertLiteralExpression(value: Any?): JCExpression {
|
||||||
|
convertValueOfPrimitiveTypeOrString(value)?.let { return it }
|
||||||
|
|
||||||
return when (value) {
|
return when (value) {
|
||||||
null -> treeMaker.Literal(TypeTag.BOT, null)
|
null -> treeMaker.Literal(TypeTag.BOT, null)
|
||||||
is Char -> treeMaker.Literal(TypeTag.CHAR, value.toInt())
|
|
||||||
is Byte, is Boolean, is Short, is Int, is Long, is Float, is Double, is String -> treeMaker.Literal(value)
|
|
||||||
|
|
||||||
is ByteArray -> treeMaker.NewArray(null, JavacList.nil(), mapJList(value.asIterable()) { convertLiteralExpression(it) })
|
is ByteArray -> treeMaker.NewArray(null, JavacList.nil(), mapJList(value.asIterable()) { convertLiteralExpression(it) })
|
||||||
is BooleanArray -> treeMaker.NewArray(null, JavacList.nil(), mapJList(value.asIterable()) { convertLiteralExpression(it) })
|
is BooleanArray -> treeMaker.NewArray(null, JavacList.nil(), mapJList(value.asIterable()) { convertLiteralExpression(it) })
|
||||||
@@ -375,10 +382,10 @@ class ClassFileToSourceStubConverter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getDefaultValue(type: Type): Any? = when (type) {
|
private fun getDefaultValue(type: Type): Any? = when (type) {
|
||||||
Type.BYTE_TYPE -> 0.toByte()
|
Type.BYTE_TYPE -> 0
|
||||||
Type.BOOLEAN_TYPE -> false
|
Type.BOOLEAN_TYPE -> false
|
||||||
Type.CHAR_TYPE -> '\u0000'
|
Type.CHAR_TYPE -> '\u0000'
|
||||||
Type.SHORT_TYPE -> 0.toShort()
|
Type.SHORT_TYPE -> 0
|
||||||
Type.INT_TYPE -> 0
|
Type.INT_TYPE -> 0
|
||||||
Type.LONG_TYPE -> 0L
|
Type.LONG_TYPE -> 0L
|
||||||
Type.FLOAT_TYPE -> 0.0F
|
Type.FLOAT_TYPE -> 0.0F
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
public final class JvmStaticTest {
|
public final class JvmStaticTest {
|
||||||
private final byte three = "3";
|
private final byte three = (byte)3;
|
||||||
private final char d = 'D';
|
private final char d = 'D';
|
||||||
private static final int one = 1;
|
private static final int one = 1;
|
||||||
private static final int two = 2;
|
private static final int two = 2;
|
||||||
@@ -8,7 +8,7 @@ public final class JvmStaticTest {
|
|||||||
public static final JvmStaticTest.Companion Companion = null;
|
public static final JvmStaticTest.Companion Companion = null;
|
||||||
|
|
||||||
public final byte getThree() {
|
public final byte getThree() {
|
||||||
return "0";
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final char getD() {
|
public final char getD() {
|
||||||
|
|||||||
+3
-3
@@ -6,9 +6,9 @@ public final class PrimitiveTypes {
|
|||||||
public static final int intMinValue = -2147483648;
|
public static final int intMinValue = -2147483648;
|
||||||
public static final int intMaxValue = 2147483647;
|
public static final int intMaxValue = 2147483647;
|
||||||
public static final int intHex = -1;
|
public static final int intHex = -1;
|
||||||
public static final byte byte0 = "0";
|
public static final byte byte0 = (byte)0;
|
||||||
public static final byte byte50 = "50";
|
public static final byte byte50 = (byte)50;
|
||||||
public static final short short5 = "5";
|
public static final short short5 = (short)5;
|
||||||
public static final char charC = 'C';
|
public static final char charC = 'C';
|
||||||
public static final char char0 = '\u0000';
|
public static final char char0 = '\u0000';
|
||||||
public static final char char10 = '\n';
|
public static final char char10 = '\n';
|
||||||
|
|||||||
Reference in New Issue
Block a user