[K2] Avoid type check for Kotlin's property in ConstUtils

When we check Java field for constant initializer, we could
be asked to get and check the type of Kotlin's property that
is used in this Java field. But there is no guarantee that the type
resolve phase was finished and this type is available. So we just
check for `const` modifier and skip type check.

#KT-63752 Fixed
#KT-62558 Obsolete
#KT-61786 Declined
This commit is contained in:
Ivan Kylchik
2023-11-29 18:00:49 +01:00
committed by Space Team
parent 97ba3fe396
commit 79c300209e
21 changed files with 298 additions and 22 deletions
@@ -0,0 +1,64 @@
public open class StaticFinalConstTypes : R|kotlin/Any| {
public final static field stringField: R|kotlin/String| = String(0)
public final static field stringFieldNull: R|kotlin/String!|
public final static field booleanField: R|kotlin/Boolean!|
public final static field booleanFieldNull: R|kotlin/Boolean!|
public final static field booleanPrimitiveField: R|kotlin/Boolean| = Boolean(false)
public final static field characterField: R|kotlin/Char!|
public final static field characterFieldNull: R|kotlin/Char!|
public final static field characterPrimitiveField: R|kotlin/Char| = Char(0)
public final static field byteField: R|kotlin/Byte!|
public final static field byteFieldNull: R|kotlin/Byte!|
public final static field bytePrimitiveField: R|kotlin/Byte| = Byte(0)
public final static field shortField: R|kotlin/Short!|
public final static field shortFieldNull: R|kotlin/Short!|
public final static field shortPrimitiveField: R|kotlin/Short| = Short(0)
public final static field integerField: R|kotlin/Int!|
public final static field integerFieldNull: R|kotlin/Int!|
public final static field integerPrimitiveField: R|kotlin/Int| = Int(0)
public final static field longField: R|kotlin/Long!|
public final static field longFieldNull: R|kotlin/Long!|
public final static field longPrimitiveField: R|kotlin/Long| = Long(0)
public final static field floatField: R|kotlin/Float!|
public final static field floatFieldNull: R|kotlin/Float!|
public final static field floatPrimitiveField: R|kotlin/Float| = Float(0.0)
public final static field doubleField: R|kotlin/Double!|
public final static field doubleFieldNull: R|kotlin/Double!|
public final static field doublePrimitiveField: R|kotlin/Double| = Double(0.0)
public final static field uByteField: R|kotlin/UByte!|
public final static field uShortField: R|kotlin/UShort!|
public final static field uIntField: R|kotlin/UInt!|
public final static field uLongField: R|kotlin/ULong!|
public constructor(): R|test/StaticFinalConstTypes|
}
@@ -0,0 +1,45 @@
// SKIP_IN_RUNTIME_TEST because there's no stable way to determine if a field is initialized with a non-null value in runtime
package test;
public class StaticFinalConstTypes {
public static final String stringField = "0";
public static final String stringFieldNull = null;
public static final Boolean booleanField = false;
public static final Boolean booleanFieldNull = null;
public static final boolean booleanPrimitiveField = false;
public static final Character characterField = '0';
public static final Character characterFieldNull = null;
public static final char characterPrimitiveField = '0';
public static final Byte byteField = (byte) 0;
public static final Byte byteFieldNull = null;
public static final byte bytePrimitiveField = (byte) 0;
public static final Short shortField = (short) 0;
public static final Short shortFieldNull = null;
public static final short shortPrimitiveField = (short) 0;
public static final Integer integerField = 0;
public static final Integer integerFieldNull = null;
public static final int integerPrimitiveField = 0;
public static final Long longField = 0L;
public static final Long longFieldNull = null;
public static final long longPrimitiveField = 0L;
public static final Float floatField = 0.0f;
public static final Float floatFieldNull = null;
public static final float floatPrimitiveField = 0.0f;
public static final Double doubleField = 0.0;
public static final Double doubleFieldNull = null;
public static final double doublePrimitiveField = 0.0;
public static final kotlin.UByte uByteField = null;
public static final kotlin.UShort uShortField = null;
public static final kotlin.UInt uIntField = null;
public static final kotlin.ULong uLongField = null;
}
@@ -0,0 +1,37 @@
package test
public open class StaticFinalConstTypes {
public constructor StaticFinalConstTypes()
// Static members
public final val booleanField: kotlin.Boolean!
public final val booleanFieldNull: kotlin.Boolean!
public const final val booleanPrimitiveField: kotlin.Boolean = false
public final val byteField: kotlin.Byte!
public final val byteFieldNull: kotlin.Byte!
public const final val bytePrimitiveField: kotlin.Byte = 0.toByte()
public final val characterField: kotlin.Char!
public final val characterFieldNull: kotlin.Char!
public const final val characterPrimitiveField: kotlin.Char = \u0030 ('0')
public final val doubleField: kotlin.Double!
public final val doubleFieldNull: kotlin.Double!
public const final val doublePrimitiveField: kotlin.Double = 0.0.toDouble()
public final val floatField: kotlin.Float!
public final val floatFieldNull: kotlin.Float!
public const final val floatPrimitiveField: kotlin.Float = 0.0.toFloat()
public final val integerField: kotlin.Int!
public final val integerFieldNull: kotlin.Int!
public const final val integerPrimitiveField: kotlin.Int = 0
public final val longField: kotlin.Long!
public final val longFieldNull: kotlin.Long!
public const final val longPrimitiveField: kotlin.Long = 0.toLong()
public final val shortField: kotlin.Short!
public final val shortFieldNull: kotlin.Short!
public const final val shortPrimitiveField: kotlin.Short = 0.toShort()
public const final val stringField: kotlin.String = "0"
public const final val stringFieldNull: kotlin.String!
public final val uByteField: kotlin.UByte!
public final val uIntField: kotlin.UInt!
public final val uLongField: kotlin.ULong!
public final val uShortField: kotlin.UShort!
}