KT-4107 Data objects
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
// LANGUAGE: +DataObjects
|
||||
// WITH_STDLIB
|
||||
|
||||
package com.example
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
data object DataObject
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(DataObject, DataObject)
|
||||
assertFalse(DataObject == null)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// LANGUAGE: +DataObjects
|
||||
// WITH_STDLIB
|
||||
|
||||
package com.example
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
data object DataObject {
|
||||
data object Inner
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(DataObject.hashCode(), DataObject.hashCode())
|
||||
assertNotEquals(DataObject.hashCode(), DataObject.Inner.hashCode())
|
||||
assertNotEquals(0, DataObject.hashCode())
|
||||
assertNotEquals(0, DataObject.Inner.hashCode())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// LANGUAGE: +DataObjects
|
||||
// WITH_STDLIB
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
data object DataObject
|
||||
|
||||
val doppelganger = DataObject::class.java.declaredConstructors[0].apply { isAccessible = true }.newInstance()
|
||||
|
||||
fun box(): String {
|
||||
assertFalse(DataObject === doppelganger)
|
||||
assertEquals(DataObject, doppelganger)
|
||||
assertEquals(DataObject.hashCode(), DataObject::class.java.cast(doppelganger).hashCode())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
// LANGUAGE: +DataObjects
|
||||
// WITH_STDLIB
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// FULL_JDK
|
||||
// CHECK_BYTECODE_LISTING
|
||||
|
||||
import java.io.*
|
||||
|
||||
data object NonSerializableDataObject
|
||||
|
||||
data object SerializableDataObject: Serializable
|
||||
|
||||
fun box(): String {
|
||||
ByteArrayOutputStream().use { baos ->
|
||||
ObjectOutputStream(baos).use { oos -> oos.writeObject(SerializableDataObject) }
|
||||
ByteArrayInputStream(baos.toByteArray()).use { bais -> assert(java.io.ObjectInputStream(bais).readObject() === SerializableDataObject) }
|
||||
}
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
@kotlin.Metadata
|
||||
public final class NonSerializableDataObject {
|
||||
// source: 'serialization.kt'
|
||||
public final static @org.jetbrains.annotations.NotNull field INSTANCE: NonSerializableDataObject
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public method hashCode(): int
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class SerializableDataObject {
|
||||
// source: 'serialization.kt'
|
||||
public final static @org.jetbrains.annotations.NotNull field INSTANCE: SerializableDataObject
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public method hashCode(): int
|
||||
private final method readResolve(): java.lang.Object
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class SerializationKt {
|
||||
// source: 'serialization.kt'
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
// LANGUAGE: +DataObjects
|
||||
// WITH_STDLIB
|
||||
|
||||
package com.example
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
data object DataObject {
|
||||
data object Nested
|
||||
}
|
||||
|
||||
class Foo {
|
||||
data object Inner
|
||||
}
|
||||
|
||||
data object Declared {
|
||||
override fun toString() = "Overriden"
|
||||
}
|
||||
|
||||
open class WithFinalToString {
|
||||
final override fun toString() = "FinalToString"
|
||||
}
|
||||
|
||||
data object InheritedFromClassWithFinalToString: WithFinalToString()
|
||||
|
||||
open class WithOpenToString {
|
||||
override fun toString() = "OpenToString"
|
||||
}
|
||||
|
||||
data object InheritedFromClassWithOpenToString: WithOpenToString()
|
||||
|
||||
abstract class WithAbstractToString {
|
||||
abstract override fun toString(): String
|
||||
}
|
||||
|
||||
data object InheritedFromClassWithAbstractToString : WithAbstractToString()
|
||||
|
||||
class C {
|
||||
companion object CC
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("DataObject", DataObject.toString())
|
||||
assertEquals("Nested", DataObject.Nested.toString())
|
||||
assertEquals("Inner", Foo.Inner.toString())
|
||||
assertEquals("Overriden", Declared.toString())
|
||||
assertEquals("FinalToString", InheritedFromClassWithFinalToString.toString())
|
||||
assertEquals("InheritedFromClassWithOpenToString", InheritedFromClassWithOpenToString.toString())
|
||||
assertEquals("InheritedFromClassWithAbstractToString", InheritedFromClassWithAbstractToString.toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user