// 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" }