| // No initializers for this class because the fields/properties are initialized to defaults. | |
| object RedundantInitializersToDefault { | |
| // Constants | |
| const val constInt: Int = 0 | |
| const val constByte: Byte = 0 | |
| const val constLong: Long = 0L | |
| const val constShort: Short = 0 | |
| const val constDouble: Double = 0.0 | |
| const val constFloat: Float = 0.0f | |
| const val constBoolean: Boolean = false | |
| const val constChar: Char = '\u0000' | |
| // Properties | |
| var myIntPropFromConst: Int = constInt | |
| var myBytePropFromConst: Byte = constByte | |
| var myLongPropFromConst: Long = constLong | |
| var myShortPropFromConst: Short = constShort | |
| var myDoublePropFromConst: Double = constDouble | |
| var myFloatPropFromConst: Float = constFloat | |
| var myBooleanPropFromConst: Boolean = constBoolean | |
| var myCharPropFromConst: Char = constChar | |
| var myIntProp: Int = 0 | |
| var myByteProp: Byte = 0 | |
| var myLongProp: Long = 0L | |
| var myShortProp: Short = 0 | |
| var myDoubleProp: Double = 0.0 | |
| var myFloatProp: Float = 0.0f | |
| var myBooleanProp: Boolean = false | |
| var myCharProp: Char = '\u0000' | |
| var myStringProp: String? = null | |
| var myAnyProp: Any? = null | |
| var myObjectProp: java.lang.Object? = null | |
| var myIntegerProp: java.lang.Integer? = null | |
| // Fields | |
| @JvmField | |
| var myIntFieldFromConst: Int = constInt | |
| @JvmField | |
| var myByteFieldFromConst: Byte = constByte | |
| @JvmField | |
| var myLongFieldFromConst: Long = constLong | |
| @JvmField | |
| var myShortFieldFromConst: Short = constShort | |
| @JvmField | |
| var myDoubleFieldFromConst: Double = constDouble | |
| @JvmField | |
| var myFloatFieldFromConst: Float = constFloat | |
| @JvmField | |
| var myBooleanFieldFromConst: Boolean = constBoolean | |
| @JvmField | |
| var myCharFieldFromConst: Char = constChar | |
| @JvmField | |
| var myIntField: Int = 0 | |
| @JvmField | |
| var myByteField: Byte = 0 | |
| @JvmField | |
| var myLongField: Long = 0L | |
| @JvmField | |
| var myShortField: Short = 0 | |
| @JvmField | |
| var myDoubleField: Double = 0.0 | |
| @JvmField | |
| var myFloatField: Float = 0.0f | |
| @JvmField | |
| var myBooleanField: Boolean = false | |
| @JvmField | |
| var myCharField: Char = '\u0000' | |
| @JvmField | |
| var myStringField: String? = null | |
| @JvmField | |
| var myAnyField: Any? = null | |
| @JvmField | |
| var myObjectField: java.lang.Object? = null | |
| @JvmField | |
| var myIntegerField: java.lang.Integer? = null | |
| } | |
| object NonRedundantInitializers { | |
| // NOT redundant because the JVM's default values for floating-point types are positive 0.0. | |
| // See: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.3 | |
| var myDouble: Double = -0.0 | |
| var myFloat: Float = -0.0f | |
| } | |
| // There are 20 PUTSTATUCs in RedundantInitializersToDefault are in the setters for the 20 properties that don't have @JvmField. | |
| // There are 2 PUTSTATICs in NonRedundantInitializers are also in setters, while the other 2 are in the constructor during initialization. | |
| // There is 1 additional PUTSTATIC for both classes for the object instance. | |
| // 21 PUTSTATIC RedundantInitializersToDefault | |
| // 5 PUTSTATIC NonRedundantInitializers | |
| // 0 PUTFIELD |