[PL] ABI compatibility tests for reworked partial linkage
This commit is contained in:
committed by
Space Team
parent
2a4d880037
commit
4f1155b06f
@@ -0,0 +1,143 @@
|
||||
class ClassToEnum {
|
||||
class Foo
|
||||
object Bar
|
||||
inner class Baz
|
||||
}
|
||||
|
||||
object ObjectToEnum {
|
||||
class Foo
|
||||
object Bar
|
||||
}
|
||||
|
||||
enum class EnumToClass {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz
|
||||
}
|
||||
|
||||
enum class EnumToObject {
|
||||
Foo,
|
||||
Bar
|
||||
}
|
||||
|
||||
class ClassToObject
|
||||
object ObjectToClass
|
||||
|
||||
class ClassToInterface
|
||||
|
||||
class NestedObjectToCompanion1 {
|
||||
object Companion {
|
||||
fun name() = "NestedObjectToCompanion1.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class NestedObjectToCompanion2 {
|
||||
object Foo {
|
||||
fun name() = "NestedObjectToCompanion2.Foo"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class CompanionToNestedObject1 {
|
||||
companion object {
|
||||
fun name() = "CompanionToNestedObject1.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class CompanionToNestedObject2 {
|
||||
companion object Foo {
|
||||
fun name() = "CompanionToNestedObject2.Foo"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class CompanionAndNestedObjectsSwap {
|
||||
companion object Foo {
|
||||
fun name() = "Foo"
|
||||
}
|
||||
|
||||
object Bar {
|
||||
fun name() = "Bar"
|
||||
}
|
||||
}
|
||||
|
||||
class NestedClassContainer {
|
||||
fun name() = "NestedClassContainer"
|
||||
|
||||
class NestedToInner {
|
||||
fun name() = "NestedClassContainer.NestedToInner"
|
||||
override fun toString() = name()
|
||||
|
||||
object Object {
|
||||
fun name() = "NestedClassContainer.NestedToInner.Object"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
companion object Companion {
|
||||
fun name() = "NestedClassContainer.NestedToInner.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
class Nested {
|
||||
fun name() = "NestedClassContainer.NestedToInner.Nested"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class Inner {
|
||||
fun name() = this@NestedToInner.name() + ".Inner"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class InnerClassContainer {
|
||||
fun name() = "InnerClassContainer"
|
||||
|
||||
inner class InnerToNested {
|
||||
fun name() = this@InnerClassContainer.name() + ".InnerToNested"
|
||||
override fun toString() = name()
|
||||
|
||||
inner class /*object*/ Object {
|
||||
fun name() = this@InnerToNested.name() + ".Object"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class /*companion object*/ Companion {
|
||||
fun name() = this@InnerToNested.name() + ".Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class /*class*/ Nested {
|
||||
fun name() = this@InnerToNested.name() + ".Nested"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class Inner {
|
||||
fun name() = this@InnerToNested.name() + ".Inner"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
annotation class AnnotationClassWithChangedParameterType(val x: Int)
|
||||
annotation class AnnotationClassThatBecomesRegularClass(val x: Int)
|
||||
annotation class AnnotationClassThatDisappears(val x: Int)
|
||||
annotation class AnnotationClassWithRenamedParameters(val i: Int, val s: String)
|
||||
annotation class AnnotationClassWithReorderedParameters(val i: Int, val s: String)
|
||||
annotation class AnnotationClassWithNewParameter(val i: Int)
|
||||
|
||||
value class ValueToClass(val x: Int)
|
||||
class ClassToValue(val x: Int)
|
||||
|
||||
data class DataToClass(val x: Int, val y: Int)
|
||||
|
||||
fun interface FunctionalInterfaceToInterface {
|
||||
fun work()
|
||||
}
|
||||
|
||||
class ClassToAbstractClass {
|
||||
var name: String = "Alice"
|
||||
fun getGreeting() = "Hello, $name!"
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
enum class ClassToEnum {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz
|
||||
}
|
||||
|
||||
enum class ObjectToEnum {
|
||||
Foo,
|
||||
Bar
|
||||
}
|
||||
|
||||
class EnumToClass {
|
||||
class Foo
|
||||
object Bar
|
||||
inner class Baz
|
||||
}
|
||||
|
||||
object EnumToObject {
|
||||
class Foo
|
||||
object Bar
|
||||
}
|
||||
|
||||
object ClassToObject
|
||||
class ObjectToClass
|
||||
|
||||
interface ClassToInterface
|
||||
|
||||
class NestedObjectToCompanion1 {
|
||||
companion object {
|
||||
fun name() = "NestedObjectToCompanion1.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class NestedObjectToCompanion2 {
|
||||
companion object Foo {
|
||||
fun name() = "NestedObjectToCompanion2.Foo"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class CompanionToNestedObject1 {
|
||||
object Companion {
|
||||
fun name() = "CompanionToNestedObject1.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class CompanionToNestedObject2 {
|
||||
object Foo {
|
||||
fun name() = "CompanionToNestedObject2.Foo"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
|
||||
class CompanionAndNestedObjectsSwap {
|
||||
object Foo {
|
||||
fun name() = "Foo"
|
||||
}
|
||||
|
||||
companion object Bar {
|
||||
fun name() = "Bar"
|
||||
}
|
||||
}
|
||||
|
||||
class NestedClassContainer {
|
||||
fun name() = "NestedClassContainer"
|
||||
|
||||
inner class NestedToInner {
|
||||
fun name() = this@NestedClassContainer.name() + ".NestedToInner"
|
||||
override fun toString() = name()
|
||||
|
||||
inner class /*object*/ Object {
|
||||
fun name() = this@NestedToInner.name() + ".Object"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class /*companion object*/ Companion {
|
||||
fun name() = this@NestedToInner.name() + ".Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class /*class*/ Nested {
|
||||
fun name() = this@NestedToInner.name() + ".Nested"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class Inner {
|
||||
fun name() = this@NestedToInner.name() + ".Inner"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class InnerClassContainer {
|
||||
fun name() = "InnerClassContainer"
|
||||
|
||||
class InnerToNested {
|
||||
fun name() = "InnerClassContainer.InnerToNested"
|
||||
override fun toString() = name()
|
||||
|
||||
object Object {
|
||||
fun name() = "InnerClassContainer.InnerToNested.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
companion object Companion {
|
||||
fun name() = "InnerClassContainer.InnerToNested.Companion"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
class Nested {
|
||||
fun name() = "InnerClassContainer.InnerToNested.Nested"
|
||||
override fun toString() = name()
|
||||
}
|
||||
|
||||
inner class Inner {
|
||||
fun name() = this@InnerToNested.name() + ".Inner"
|
||||
override fun toString() = name()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
annotation class AnnotationClassWithChangedParameterType(val x: /*Int*/ String)
|
||||
/*annotation*/ class AnnotationClassThatBecomesRegularClass(val x: Int) { override fun toString() = "AnnotationClassThatBecomesRegularClass[x=$x]" }
|
||||
//annotation class AnnotationClassThatDisappears(val x: Int)
|
||||
annotation class AnnotationClassWithRenamedParameters(val xi: Int, val xs: String)
|
||||
annotation class AnnotationClassWithReorderedParameters(val s: String, val i: Int)
|
||||
annotation class AnnotationClassWithNewParameter(val i: Int, val s: String = "Apple")
|
||||
|
||||
class ValueToClass(val x: Int)
|
||||
value class ClassToValue(val x: Int)
|
||||
|
||||
/*data*/ class DataToClass(val x: Int, val y: Int)
|
||||
|
||||
/*fun*/ interface FunctionalInterfaceToInterface {
|
||||
fun work()
|
||||
}
|
||||
|
||||
abstract class ClassToAbstractClass {
|
||||
abstract var name: String
|
||||
fun getGreeting() = "Hello, $name!"
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
STEP 0:
|
||||
dependencies: stdlib
|
||||
STEP 1:
|
||||
dependencies: stdlib
|
||||
modifications:
|
||||
U : l1.kt.1 -> l1.kt
|
||||
@@ -0,0 +1,222 @@
|
||||
fun getClassToEnumFoo(): ClassToEnum.Foo = ClassToEnum.Foo()
|
||||
inline fun getClassToEnumFooInline(): ClassToEnum.Foo = ClassToEnum.Foo()
|
||||
fun getClassToEnumFooAsAny(): Any = ClassToEnum.Foo()
|
||||
inline fun getClassToEnumFooAsAnyInline(): Any = ClassToEnum.Foo()
|
||||
|
||||
fun getClassToEnumBar(): ClassToEnum.Bar = ClassToEnum.Bar
|
||||
inline fun getClassToEnumBarInline(): ClassToEnum.Bar = ClassToEnum.Bar
|
||||
fun getClassToEnumBarAsAny(): Any = ClassToEnum.Bar
|
||||
inline fun getClassToEnumBarAsAnyInline(): Any = ClassToEnum.Bar
|
||||
|
||||
fun getClassToEnumBaz(): ClassToEnum.Baz = ClassToEnum().Baz()
|
||||
inline fun getClassToEnumBazInline(): ClassToEnum.Baz = ClassToEnum().Baz()
|
||||
fun getClassToEnumBazAsAny(): Any = ClassToEnum().Baz()
|
||||
inline fun getClassToEnumBazAsAnyInline(): Any = ClassToEnum().Baz()
|
||||
|
||||
fun getObjectToEnumFoo(): ObjectToEnum.Foo = ObjectToEnum.Foo()
|
||||
inline fun getObjectToEnumFooInline(): ObjectToEnum.Foo = ObjectToEnum.Foo()
|
||||
fun getObjectToEnumFooAsAny(): Any = ObjectToEnum.Foo()
|
||||
inline fun getObjectToEnumFooAsAnyInline(): Any = ObjectToEnum.Foo()
|
||||
|
||||
fun getObjectToEnumBar(): ObjectToEnum.Bar = ObjectToEnum.Bar
|
||||
inline fun getObjectToEnumBarInline(): ObjectToEnum.Bar = ObjectToEnum.Bar
|
||||
fun getObjectToEnumBarAsAny(): Any = ObjectToEnum.Bar
|
||||
inline fun getObjectToEnumBarAsAnyInline(): Any = ObjectToEnum.Bar
|
||||
|
||||
fun getEnumToClassFoo(): EnumToClass = EnumToClass.Foo
|
||||
inline fun getEnumToClassFooInline(): EnumToClass = EnumToClass.Foo
|
||||
fun getEnumToClassFooAsAny(): Any = EnumToClass.Foo
|
||||
inline fun getEnumToClassFooAsAnyInline(): Any = EnumToClass.Foo
|
||||
|
||||
fun getEnumToClassBar(): EnumToClass = EnumToClass.Bar
|
||||
inline fun getEnumToClassBarInline(): EnumToClass = EnumToClass.Bar
|
||||
fun getEnumToClassBarAsAny(): Any = EnumToClass.Bar
|
||||
inline fun getEnumToClassBarAsAnyInline(): Any = EnumToClass.Bar
|
||||
|
||||
fun getEnumToClassBaz(): EnumToClass = EnumToClass.Baz
|
||||
inline fun getEnumToClassBazInline(): EnumToClass = EnumToClass.Baz
|
||||
fun getEnumToClassBazAsAny(): Any = EnumToClass.Baz
|
||||
inline fun getEnumToClassBazAsAnyInline(): Any = EnumToClass.Baz
|
||||
|
||||
fun getEnumToObjectFoo(): EnumToObject = EnumToObject.Foo
|
||||
inline fun getEnumToObjectFooInline(): EnumToObject = EnumToObject.Foo
|
||||
fun getEnumToObjectFooAsAny(): Any = EnumToObject.Foo
|
||||
inline fun getEnumToObjectFooAsAnyInline(): Any = EnumToObject.Foo
|
||||
|
||||
fun getEnumToObjectBar(): EnumToObject = EnumToObject.Bar
|
||||
inline fun getEnumToObjectBarInline(): EnumToObject = EnumToObject.Bar
|
||||
fun getEnumToObjectBarAsAny(): Any = EnumToObject.Bar
|
||||
inline fun getEnumToObjectBarAsAnyInline(): Any = EnumToObject.Bar
|
||||
|
||||
fun getClassToObject(): ClassToObject = ClassToObject()
|
||||
inline fun getClassToObjectInline(): ClassToObject = ClassToObject()
|
||||
fun getClassToObjectAsAny(): Any = ClassToObject()
|
||||
inline fun getClassToObjectAsAnyInline(): Any = ClassToObject()
|
||||
|
||||
fun getObjectToClass(): ObjectToClass = ObjectToClass
|
||||
inline fun getObjectToClassInline(): ObjectToClass = ObjectToClass
|
||||
fun getObjectToClassAsAny(): Any = ObjectToClass
|
||||
inline fun getObjectToClassAsAnyInline(): Any = ObjectToClass
|
||||
|
||||
fun getClassToInterface(): ClassToInterface = ClassToInterface()
|
||||
inline fun getClassToInterfaceInline(): ClassToInterface = ClassToInterface()
|
||||
fun getClassToInterfaceAsAny(): Any = ClassToInterface()
|
||||
inline fun getClassToInterfaceAsAnyInline(): Any = ClassToInterface()
|
||||
|
||||
fun getNestedObjectToCompanion1(): NestedObjectToCompanion1.Companion = NestedObjectToCompanion1.Companion
|
||||
inline fun getNestedObjectToCompanion1Inline(): NestedObjectToCompanion1.Companion = NestedObjectToCompanion1.Companion
|
||||
fun getNestedObjectToCompanion1AsAny(): Any = NestedObjectToCompanion1.Companion
|
||||
inline fun getNestedObjectToCompanion1AsAnyInline(): Any = NestedObjectToCompanion1.Companion
|
||||
|
||||
fun getNestedObjectToCompanion2(): NestedObjectToCompanion2.Foo = NestedObjectToCompanion2.Foo
|
||||
inline fun getNestedObjectToCompanion2Inline(): NestedObjectToCompanion2.Foo = NestedObjectToCompanion2.Foo
|
||||
fun getNestedObjectToCompanion2AsAny(): Any = NestedObjectToCompanion2.Foo
|
||||
inline fun getNestedObjectToCompanion2AsAnyInline(): Any = NestedObjectToCompanion2.Foo
|
||||
|
||||
fun getCompanionToNestedObject1(): CompanionToNestedObject1.Companion = CompanionToNestedObject1.Companion
|
||||
inline fun getCompanionToNestedObject1Inline(): CompanionToNestedObject1.Companion = CompanionToNestedObject1.Companion
|
||||
fun getCompanionToNestedObject1AsAny(): Any = CompanionToNestedObject1.Companion
|
||||
inline fun getCompanionToNestedObject1AsAnyInline(): Any = CompanionToNestedObject1.Companion
|
||||
fun getCompanionToNestedObject1Name(): String = CompanionToNestedObject1.Companion.name()
|
||||
inline fun getCompanionToNestedObject1NameInline(): String = CompanionToNestedObject1.Companion.name()
|
||||
fun getCompanionToNestedObject1NameShort(): String = CompanionToNestedObject1.name() // "Companion" is omit
|
||||
inline fun getCompanionToNestedObject1NameShortInline(): String = CompanionToNestedObject1.name() // "Companion" is omit
|
||||
|
||||
fun getCompanionToNestedObject2(): CompanionToNestedObject2.Foo = CompanionToNestedObject2.Foo
|
||||
inline fun getCompanionToNestedObject2Inline(): CompanionToNestedObject2.Foo = CompanionToNestedObject2.Foo
|
||||
fun getCompanionToNestedObject2AsAny(): Any = CompanionToNestedObject2.Foo
|
||||
inline fun getCompanionToNestedObject2AsAnyInline(): Any = CompanionToNestedObject2.Foo
|
||||
fun getCompanionToNestedObject2Name(): String = CompanionToNestedObject2.Foo.name()
|
||||
inline fun getCompanionToNestedObject2NameInline(): String = CompanionToNestedObject2.Foo.name()
|
||||
fun getCompanionToNestedObject2NameShort(): String = CompanionToNestedObject2.name() // "Foo" is omit
|
||||
inline fun getCompanionToNestedObject2NameShortInline(): String = CompanionToNestedObject2.name() // "Foo" is omit
|
||||
|
||||
fun getCompanionAndNestedObjectsSwap(): String = CompanionAndNestedObjectsSwap.name() // companion object name is omit
|
||||
inline fun getCompanionAndNestedObjectsSwapInline(): String = CompanionAndNestedObjectsSwap.name() // companion object name is omit
|
||||
|
||||
fun getNestedToInnerName() = NestedClassContainer.NestedToInner().name()
|
||||
inline fun getNestedToInnerNameInline() = NestedClassContainer.NestedToInner().name()
|
||||
fun getNestedToInnerObjectName() = NestedClassContainer.NestedToInner.Object.name()
|
||||
inline fun getNestedToInnerObjectNameInline() = NestedClassContainer.NestedToInner.Object.name()
|
||||
fun getNestedToInnerCompanionName() = NestedClassContainer.NestedToInner.name()
|
||||
inline fun getNestedToInnerCompanionNameInline() = NestedClassContainer.NestedToInner.name()
|
||||
fun getNestedToInnerNestedName() = NestedClassContainer.NestedToInner.Nested().name()
|
||||
inline fun getNestedToInnerNestedNameInline() = NestedClassContainer.NestedToInner.Nested().name()
|
||||
fun getNestedToInnerInnerName() = NestedClassContainer.NestedToInner().Inner().name()
|
||||
inline fun getNestedToInnerInnerNameInline() = NestedClassContainer.NestedToInner().Inner().name()
|
||||
|
||||
fun getInnerToNestedName() = InnerClassContainer().InnerToNested().name()
|
||||
inline fun getInnerToNestedNameInline() = InnerClassContainer().InnerToNested().name()
|
||||
fun getInnerToNestedObjectName() = InnerClassContainer().InnerToNested().Object().name()
|
||||
inline fun getInnerToNestedObjectNameInline() = InnerClassContainer().InnerToNested().Object().name()
|
||||
fun getInnerToNestedCompanionName() = InnerClassContainer().InnerToNested().Companion().name()
|
||||
inline fun getInnerToNestedCompanionNameInline() = InnerClassContainer().InnerToNested().Companion().name()
|
||||
fun getInnerToNestedNestedName() = InnerClassContainer().InnerToNested().Nested().name()
|
||||
inline fun getInnerToNestedNestedNameInline() = InnerClassContainer().InnerToNested().Nested().name()
|
||||
fun getInnerToNestedInnerName() = InnerClassContainer().InnerToNested().Inner().name()
|
||||
inline fun getInnerToNestedInnerNameInline() = InnerClassContainer().InnerToNested().Inner().name()
|
||||
|
||||
annotation class AnnotationClassWithParameterThatBecomesRegularClass(val x: AnnotationClassThatBecomesRegularClass)
|
||||
annotation class AnnotationClassWithParameterOfParameterThatBecomesRegularClass(val x: AnnotationClassWithParameterThatBecomesRegularClass)
|
||||
annotation class AnnotationClassWithParameterThatDisappears(val x: AnnotationClassThatDisappears)
|
||||
annotation class AnnotationClassWithParameterOfParameterThatDisappears(val x: AnnotationClassWithParameterThatDisappears)
|
||||
|
||||
fun getAnnotationClassWithChangedParameterType(): AnnotationClassWithChangedParameterType = AnnotationClassWithChangedParameterType(101)
|
||||
inline fun getAnnotationClassWithChangedParameterTypeInline(): AnnotationClassWithChangedParameterType = AnnotationClassWithChangedParameterType(102)
|
||||
fun getAnnotationClassWithChangedParameterTypeAsAny(): Any = AnnotationClassWithChangedParameterType(103)
|
||||
inline fun getAnnotationClassWithChangedParameterTypeAsAnyInline(): Any = AnnotationClassWithChangedParameterType(104)
|
||||
fun getAnnotationClassThatBecomesRegularClass(): AnnotationClassThatBecomesRegularClass = AnnotationClassThatBecomesRegularClass(105)
|
||||
inline fun getAnnotationClassThatBecomesRegularClassInline(): AnnotationClassThatBecomesRegularClass = AnnotationClassThatBecomesRegularClass(106)
|
||||
fun getAnnotationClassThatBecomesRegularClassAsAny(): Any = AnnotationClassThatBecomesRegularClass(107)
|
||||
inline fun getAnnotationClassThatBecomesRegularClassAsAnyInline(): Any = AnnotationClassThatBecomesRegularClass(108)
|
||||
fun getAnnotationClassWithParameterThatBecomesRegularClass(): AnnotationClassWithParameterThatBecomesRegularClass = AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(109))
|
||||
inline fun getAnnotationClassWithParameterThatBecomesRegularClassInline(): AnnotationClassWithParameterThatBecomesRegularClass = AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(110))
|
||||
fun getAnnotationClassWithParameterThatBecomesRegularClassAsAny(): Any = AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(111))
|
||||
inline fun getAnnotationClassWithParameterThatBecomesRegularClassAsAnyInline(): Any = AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(112))
|
||||
fun getAnnotationClassWithParameterOfParameterThatBecomesRegularClass(): AnnotationClassWithParameterOfParameterThatBecomesRegularClass = AnnotationClassWithParameterOfParameterThatBecomesRegularClass(AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(113)))
|
||||
inline fun getAnnotationClassWithParameterOfParameterThatBecomesRegularClassInline(): AnnotationClassWithParameterOfParameterThatBecomesRegularClass = AnnotationClassWithParameterOfParameterThatBecomesRegularClass(AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(114)))
|
||||
fun getAnnotationClassWithParameterOfParameterThatBecomesRegularClassAsAny(): Any = AnnotationClassWithParameterOfParameterThatBecomesRegularClass(AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(115)))
|
||||
inline fun getAnnotationClassWithParameterOfParameterThatBecomesRegularClassAsAnyInline(): Any = AnnotationClassWithParameterOfParameterThatBecomesRegularClass(AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(116)))
|
||||
fun getAnnotationClassThatDisappears(): AnnotationClassThatDisappears = AnnotationClassThatDisappears(117)
|
||||
inline fun getAnnotationClassThatDisappearsInline(): AnnotationClassThatDisappears = AnnotationClassThatDisappears(118)
|
||||
fun getAnnotationClassThatDisappearsAsAny(): Any = AnnotationClassThatDisappears(119)
|
||||
inline fun getAnnotationClassThatDisappearsAsAnyInline(): Any = AnnotationClassThatDisappears(120)
|
||||
fun getAnnotationClassWithParameterThatDisappears(): AnnotationClassWithParameterThatDisappears = AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(121))
|
||||
inline fun getAnnotationClassWithParameterThatDisappearsInline(): AnnotationClassWithParameterThatDisappears = AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(122))
|
||||
fun getAnnotationClassWithParameterThatDisappearsAsAny(): Any = AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(123))
|
||||
inline fun getAnnotationClassWithParameterThatDisappearsAsAnyInline(): Any = AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(124))
|
||||
fun getAnnotationClassWithParameterOfParameterThatDisappears(): AnnotationClassWithParameterOfParameterThatDisappears = AnnotationClassWithParameterOfParameterThatDisappears(AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(125)))
|
||||
inline fun getAnnotationClassWithParameterOfParameterThatDisappearsInline(): AnnotationClassWithParameterOfParameterThatDisappears = AnnotationClassWithParameterOfParameterThatDisappears(AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(126)))
|
||||
fun getAnnotationClassWithParameterOfParameterThatDisappearsAsAny(): Any = AnnotationClassWithParameterOfParameterThatDisappears(AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(127)))
|
||||
inline fun getAnnotationClassWithParameterOfParameterThatDisappearsAsAnyInline(): Any = AnnotationClassWithParameterOfParameterThatDisappears(AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(128)))
|
||||
fun getAnnotationClassWithRenamedParameters(): AnnotationClassWithRenamedParameters = AnnotationClassWithRenamedParameters(129, "Banana")
|
||||
inline fun getAnnotationClassWithRenamedParametersInline(): AnnotationClassWithRenamedParameters = AnnotationClassWithRenamedParameters(130, "Pear")
|
||||
fun getAnnotationClassWithRenamedParametersAsAny(): Any = AnnotationClassWithRenamedParameters(131, "Orange")
|
||||
inline fun getAnnotationClassWithRenamedParametersAsAnyInline(): Any = AnnotationClassWithRenamedParameters(132, "Peach")
|
||||
fun getAnnotationClassWithReorderedParameters(): AnnotationClassWithReorderedParameters = AnnotationClassWithReorderedParameters(133, "Kiwi")
|
||||
inline fun getAnnotationClassWithReorderedParametersInline(): AnnotationClassWithReorderedParameters = AnnotationClassWithReorderedParameters(134, "Watermelon")
|
||||
fun getAnnotationClassWithReorderedParametersAsAny(): Any = AnnotationClassWithReorderedParameters(135, "Grapefruit")
|
||||
inline fun getAnnotationClassWithReorderedParametersAsAnyInline(): Any = AnnotationClassWithReorderedParameters(136, "Melon")
|
||||
fun getAnnotationClassWithNewParameter(): AnnotationClassWithNewParameter = AnnotationClassWithNewParameter(137)
|
||||
inline fun getAnnotationClassWithNewParameterInline(): AnnotationClassWithNewParameter = AnnotationClassWithNewParameter(138)
|
||||
fun getAnnotationClassWithNewParameterAsAny(): Any = AnnotationClassWithNewParameter(139)
|
||||
inline fun getAnnotationClassWithNewParameterAsAnyInline(): Any = AnnotationClassWithNewParameter(140)
|
||||
|
||||
@AnnotationClassWithChangedParameterType(1) class HolderOfAnnotationClassWithChangedParameterType { override fun toString() = "HolderOfAnnotationClassWithChangedParameterType" }
|
||||
@AnnotationClassThatBecomesRegularClass(2) class HolderOfAnnotationClassThatBecomesRegularClass { override fun toString() = "HolderOfAnnotationClassThatBecomesRegularClass" }
|
||||
@AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(3)) class HolderOfAnnotationClassWithParameterThatBecomesRegularClass { override fun toString() = "HolderOfAnnotationClassWithParameterThatBecomesRegularClass" }
|
||||
@AnnotationClassWithParameterOfParameterThatBecomesRegularClass(AnnotationClassWithParameterThatBecomesRegularClass(AnnotationClassThatBecomesRegularClass(4))) class HolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass { override fun toString() = "HolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass" }
|
||||
@AnnotationClassThatDisappears(5) class HolderOfAnnotationClassThatDisappears { override fun toString() = "HolderOfAnnotationClassThatDisappears" }
|
||||
@AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(6)) class HolderOfAnnotationClassWithParameterThatDisappears { override fun toString() = "HolderOfAnnotationClassWithParameterThatDisappears" }
|
||||
@AnnotationClassWithParameterOfParameterThatDisappears(AnnotationClassWithParameterThatDisappears(AnnotationClassThatDisappears(7))) class HolderOfAnnotationClassWithParameterOfParameterThatDisappears { override fun toString() = "HolderOfAnnotationClassWithParameterOfParameterThatDisappears" }
|
||||
@AnnotationClassWithRenamedParameters(8, "Grape") class HolderOfAnnotationClassWithRenamedParameters { override fun toString() = "HolderOfAnnotationClassWithRenamedParameters" }
|
||||
@AnnotationClassWithReorderedParameters(9, "Figs") class HolderOfAnnotationClassWithReorderedParameters { override fun toString() = "HolderOfAnnotationClassWithReorderedParameters" }
|
||||
@AnnotationClassWithNewParameter(10) class HolderOfAnnotationClassWithNewParameter { override fun toString() = "HolderOfAnnotationClassWithNewParameter" }
|
||||
|
||||
fun getHolderOfAnnotationClassWithChangedParameterType() = HolderOfAnnotationClassWithChangedParameterType()
|
||||
inline fun getHolderOfAnnotationClassWithChangedParameterTypeInline() = HolderOfAnnotationClassWithChangedParameterType()
|
||||
fun getHolderOfAnnotationClassThatBecomesRegularClass() = HolderOfAnnotationClassThatBecomesRegularClass()
|
||||
inline fun getHolderOfAnnotationClassThatBecomesRegularClassInline() = HolderOfAnnotationClassThatBecomesRegularClass()
|
||||
fun getHolderOfAnnotationClassWithParameterThatBecomesRegularClass() = HolderOfAnnotationClassWithParameterThatBecomesRegularClass()
|
||||
inline fun getHolderOfAnnotationClassWithParameterThatBecomesRegularClassInline() = HolderOfAnnotationClassWithParameterThatBecomesRegularClass()
|
||||
fun getHolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass() = HolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass()
|
||||
inline fun getHolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClassInline() = HolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass()
|
||||
fun getHolderOfAnnotationClassThatDisappears() = HolderOfAnnotationClassThatDisappears()
|
||||
inline fun getHolderOfAnnotationClassThatDisappearsInline() = HolderOfAnnotationClassThatDisappears()
|
||||
fun getHolderOfAnnotationClassWithParameterThatDisappears() = HolderOfAnnotationClassWithParameterThatDisappears()
|
||||
inline fun getHolderOfAnnotationClassWithParameterThatDisappearsInline() = HolderOfAnnotationClassWithParameterThatDisappears()
|
||||
fun getHolderOfAnnotationClassWithParameterOfParameterThatDisappears() = HolderOfAnnotationClassWithParameterOfParameterThatDisappears()
|
||||
inline fun getHolderOfAnnotationClassWithParameterOfParameterThatDisappearsInline() = HolderOfAnnotationClassWithParameterOfParameterThatDisappears()
|
||||
fun getHolderOfAnnotationClassWithRenamedParameters() = HolderOfAnnotationClassWithRenamedParameters()
|
||||
inline fun getHolderOfAnnotationClassWithRenamedParametersInline() = HolderOfAnnotationClassWithRenamedParameters()
|
||||
fun getHolderOfAnnotationClassWithReorderedParameters() = HolderOfAnnotationClassWithReorderedParameters()
|
||||
inline fun getHolderOfAnnotationClassWithReorderedParametersInline() = HolderOfAnnotationClassWithReorderedParameters()
|
||||
fun getHolderOfAnnotationClassWithNewParameter() = HolderOfAnnotationClassWithNewParameter()
|
||||
inline fun getHolderOfAnnotationClassWithNewParameterInline() = HolderOfAnnotationClassWithNewParameter()
|
||||
|
||||
fun getValueToClass(): ValueToClass = ValueToClass(1)
|
||||
inline fun getValueToClassInline(): ValueToClass = ValueToClass(2)
|
||||
fun getValueToClassAsAny(): Any = ValueToClass(3)
|
||||
inline fun getValueToClassAsAnyInline(): Any = ValueToClass(4)
|
||||
|
||||
fun getClassToValue(): ClassToValue = ClassToValue(1)
|
||||
inline fun getClassToValueInline(): ClassToValue = ClassToValue(2)
|
||||
fun getClassToValueAsAny(): Any = ClassToValue(3)
|
||||
inline fun getClassToValueAsAnyInline(): Any = ClassToValue(4)
|
||||
|
||||
fun getSumFromDataClass(): Int {
|
||||
val (x, y) = DataToClass(1, 2)
|
||||
return x + y
|
||||
}
|
||||
|
||||
fun getFunctionalInterfaceToInterface(): FunctionalInterfaceToInterface {
|
||||
val worker = FunctionalInterfaceToInterface { /* do some work */ }
|
||||
worker.work()
|
||||
return worker
|
||||
}
|
||||
|
||||
fun instantiationOfAbstractClass() {
|
||||
// Accessing uninitialized members of abstract class is an UB. We shall not allow instantiating
|
||||
// abstract classes except for from their direct inheritors.
|
||||
ClassToAbstractClass().getGreeting()
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
STEP 0:
|
||||
dependencies: stdlib, lib1
|
||||
@@ -0,0 +1,210 @@
|
||||
import abitestutils.abiTest
|
||||
import abitestutils.TestMode.NATIVE_CACHE_STATIC_EVERYWHERE
|
||||
|
||||
fun box() = abiTest {
|
||||
/**
|
||||
* `fun foo(): A.B`: In older version of the library `A` and `B` were classes. In newer version `B` is an entry of enum `A`.
|
||||
*
|
||||
* When no lazy IR is used, [IrCall.symbol.owner] is a function (most likely [IrFunctionImpl]) which has the stub [IrClass] (the one
|
||||
* generated by [MissingDeclarationStubGenerator]) with "/A.B|null[0]" signature in the return type. So the function is formally
|
||||
* detected as "referecing an unbound CLASS symbol" and the appropriate error message is constructed.
|
||||
*
|
||||
* When lazy IR is used, [IrCall.symbol.owner] is a lazy-IR function with the return type holding the lazy-IR class
|
||||
* generated from [EnumEntrySyntheticClassDescriptor] for the enum entry and having a different signature: "/A.B.<EEC>|null[0]".
|
||||
* This class is not detected as unbound, and the whole function is not considered as partially linked. But the [IrCall]
|
||||
* still has its own expression type recorded that is deserialized without lazy-IR-distortion, so the [IrCall] expression
|
||||
* is detected as "using an unbound CLASS symbol" with "/A.B|null[0]" signature.
|
||||
*
|
||||
* The [adjustForLazyIr] function is used to adjust tested error messages depending on whether lazy IR is used or not.
|
||||
*/
|
||||
fun adjustForLazyIr(declaration: String) = if (testMode == NATIVE_CACHE_STATIC_EVERYWHERE) "Expression" else declaration
|
||||
|
||||
expectFailure(linkage("Function 'getClassToEnumFoo' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ClassToEnum.Foo'")) { getClassToEnumFoo() }
|
||||
expectFailure(linkage("Function 'getClassToEnumFooInline' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ClassToEnum.Foo'")) { getClassToEnumFooInline() }
|
||||
expectFailure(linkage("Constructor 'Foo.<init>' can not be called: No constructor found for symbol '/ClassToEnum.Foo.<init>'")) { getClassToEnumFooAsAny() }
|
||||
expectFailure(linkage("Constructor 'Foo.<init>' can not be called: No constructor found for symbol '/ClassToEnum.Foo.<init>'")) { getClassToEnumFooAsAnyInline() }
|
||||
expectFailure(linkage("Function 'getClassToEnumBar' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ClassToEnum.Bar'")) { getClassToEnumBar() }
|
||||
expectFailure(linkage("Function 'getClassToEnumBarInline' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ClassToEnum.Bar'")) { getClassToEnumBarInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Bar': No class found for symbol '/ClassToEnum.Bar'")) { getClassToEnumBarAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Bar': No class found for symbol '/ClassToEnum.Bar'")) { getClassToEnumBarAsAnyInline() }
|
||||
expectFailure(linkage("Function 'getClassToEnumBaz' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ClassToEnum.Baz'")) { getClassToEnumBaz() }
|
||||
expectFailure(linkage("Function 'getClassToEnumBazInline' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ClassToEnum.Baz'")) { getClassToEnumBazInline() }
|
||||
expectFailure(linkage("Constructor 'ClassToEnum.<init>' can not be called: Private constructor declared in module <lib1> can not be accessed in module <lib2>")) { getClassToEnumBazAsAny() }
|
||||
expectFailure(linkage("Constructor 'ClassToEnum.<init>' can not be called: Private constructor declared in module <lib1> can not be accessed in module <lib2>")) { getClassToEnumBazAsAnyInline() }
|
||||
|
||||
expectFailure(linkage("Function 'getObjectToEnumFoo' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ObjectToEnum.Foo'")) { getObjectToEnumFoo() }
|
||||
expectFailure(linkage("Function 'getObjectToEnumFooInline' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ObjectToEnum.Foo'")) { getObjectToEnumFooInline() }
|
||||
expectFailure(linkage("Constructor 'Foo.<init>' can not be called: No constructor found for symbol '/ObjectToEnum.Foo.<init>'")) { getObjectToEnumFooAsAny() }
|
||||
expectFailure(linkage("Constructor 'Foo.<init>' can not be called: No constructor found for symbol '/ObjectToEnum.Foo.<init>'")) { getObjectToEnumFooAsAnyInline() }
|
||||
expectFailure(linkage("Function 'getObjectToEnumBar' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ObjectToEnum.Bar'")) { getObjectToEnumBar() }
|
||||
expectFailure(linkage("Function 'getObjectToEnumBarInline' can not be called: ${adjustForLazyIr("Function")} uses unlinked class symbol '/ObjectToEnum.Bar'")) { getObjectToEnumBarInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Bar': No class found for symbol '/ObjectToEnum.Bar'")) { getObjectToEnumBarAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Bar': No class found for symbol '/ObjectToEnum.Bar'")) { getObjectToEnumBarAsAnyInline() }
|
||||
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Foo': No enum entry found for symbol '/EnumToClass.Foo'")) { getEnumToClassFoo() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Foo': No enum entry found for symbol '/EnumToClass.Foo'")) { getEnumToClassFooInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Foo': No enum entry found for symbol '/EnumToClass.Foo'")) { getEnumToClassFooAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Foo': No enum entry found for symbol '/EnumToClass.Foo'")) { getEnumToClassFooAsAnyInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Bar': No enum entry found for symbol '/EnumToClass.Bar'")) { getEnumToClassBar() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Bar': No enum entry found for symbol '/EnumToClass.Bar'")) { getEnumToClassBarInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Bar': No enum entry found for symbol '/EnumToClass.Bar'")) { getEnumToClassBarAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Bar': No enum entry found for symbol '/EnumToClass.Bar'")) { getEnumToClassBarAsAnyInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Baz': No enum entry found for symbol '/EnumToClass.Baz'")) { getEnumToClassBaz() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Baz': No enum entry found for symbol '/EnumToClass.Baz'")) { getEnumToClassBazInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Baz': No enum entry found for symbol '/EnumToClass.Baz'")) { getEnumToClassBazAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToClass.Baz': No enum entry found for symbol '/EnumToClass.Baz'")) { getEnumToClassBazAsAnyInline() }
|
||||
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Foo': No enum entry found for symbol '/EnumToObject.Foo'")) { getEnumToObjectFoo() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Foo': No enum entry found for symbol '/EnumToObject.Foo'")) { getEnumToObjectFooInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Foo': No enum entry found for symbol '/EnumToObject.Foo'")) { getEnumToObjectFooAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Foo': No enum entry found for symbol '/EnumToObject.Foo'")) { getEnumToObjectFooAsAnyInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Bar': No enum entry found for symbol '/EnumToObject.Bar'")) { getEnumToObjectBar() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Bar': No enum entry found for symbol '/EnumToObject.Bar'")) { getEnumToObjectBarInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Bar': No enum entry found for symbol '/EnumToObject.Bar'")) { getEnumToObjectBarAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'EnumToObject.Bar': No enum entry found for symbol '/EnumToObject.Bar'")) { getEnumToObjectBarAsAnyInline() }
|
||||
|
||||
expectFailure(linkage("Constructor 'ClassToObject.<init>' can not be called: Private constructor declared in module <lib1> can not be accessed in module <lib2>")) { getClassToObject() }
|
||||
expectFailure(linkage("Constructor 'ClassToObject.<init>' can not be called: Private constructor declared in module <lib1> can not be accessed in module <lib2>")) { getClassToObjectInline() }
|
||||
expectFailure(linkage("Constructor 'ClassToObject.<init>' can not be called: Private constructor declared in module <lib1> can not be accessed in module <lib2>")) { getClassToObjectAsAny() }
|
||||
expectFailure(linkage("Constructor 'ClassToObject.<init>' can not be called: Private constructor declared in module <lib1> can not be accessed in module <lib2>")) { getClassToObjectAsAnyInline() }
|
||||
|
||||
expectFailure(linkage("Can not get instance of singleton 'ObjectToClass': 'ObjectToClass' is class while object is expected")) { getObjectToClass() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'ObjectToClass': 'ObjectToClass' is class while object is expected")) { getObjectToClassInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'ObjectToClass': 'ObjectToClass' is class while object is expected")) { getObjectToClassAsAny() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'ObjectToClass': 'ObjectToClass' is class while object is expected")) { getObjectToClassAsAnyInline() }
|
||||
|
||||
expectFailure(linkage("Constructor 'ClassToInterface.<init>' can not be called: No constructor found for symbol '/ClassToInterface.<init>'")) { getClassToInterface() }
|
||||
expectFailure(linkage("Constructor 'ClassToInterface.<init>' can not be called: No constructor found for symbol '/ClassToInterface.<init>'")) { getClassToInterfaceInline() }
|
||||
expectFailure(linkage("Constructor 'ClassToInterface.<init>' can not be called: No constructor found for symbol '/ClassToInterface.<init>'")) { getClassToInterfaceAsAny() }
|
||||
expectFailure(linkage("Constructor 'ClassToInterface.<init>' can not be called: No constructor found for symbol '/ClassToInterface.<init>'")) { getClassToInterfaceAsAnyInline() }
|
||||
|
||||
expectSuccess("NestedObjectToCompanion1.Companion") { getNestedObjectToCompanion1().toString() }
|
||||
expectSuccess("NestedObjectToCompanion1.Companion") { getNestedObjectToCompanion1Inline().toString() }
|
||||
expectSuccess("NestedObjectToCompanion1.Companion") { getNestedObjectToCompanion1AsAny().toString() }
|
||||
expectSuccess("NestedObjectToCompanion1.Companion") { getNestedObjectToCompanion1AsAnyInline().toString() }
|
||||
|
||||
expectSuccess("NestedObjectToCompanion2.Foo") { getNestedObjectToCompanion2().toString() }
|
||||
expectSuccess("NestedObjectToCompanion2.Foo") { getNestedObjectToCompanion2Inline().toString() }
|
||||
expectSuccess("NestedObjectToCompanion2.Foo") { getNestedObjectToCompanion2AsAny().toString() }
|
||||
expectSuccess("NestedObjectToCompanion2.Foo") { getNestedObjectToCompanion2AsAnyInline().toString() }
|
||||
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1().toString() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1Inline().toString() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1AsAny().toString() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1AsAnyInline().toString() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1Name() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1NameShort() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1NameInline() }
|
||||
expectSuccess("CompanionToNestedObject1.Companion") { getCompanionToNestedObject1NameShortInline() }
|
||||
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2().toString() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2Inline().toString() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2AsAny().toString() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2AsAnyInline().toString() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2Name() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2NameShort() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2NameInline() }
|
||||
expectSuccess("CompanionToNestedObject2.Foo") { getCompanionToNestedObject2NameShortInline() }
|
||||
|
||||
expectSuccess("Foo") { getCompanionAndNestedObjectsSwap() }
|
||||
expectSuccess("Foo") { getCompanionAndNestedObjectsSwapInline() }
|
||||
|
||||
expectFailure(linkage("Constructor 'NestedToInner.<init>' can not be called: The call site does not provide a dispatch receiver parameter 'this' that the constructor requires")) { getNestedToInnerName() }
|
||||
expectFailure(linkage("Constructor 'NestedToInner.<init>' can not be called: The call site does not provide a dispatch receiver parameter 'this' that the constructor requires")) { getNestedToInnerNameInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Object': 'Object' is inner class while object is expected")) { getNestedToInnerObjectName() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Object': 'Object' is inner class while object is expected")) { getNestedToInnerObjectNameInline() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Companion': 'Companion' is inner class while object is expected")) { getNestedToInnerCompanionName() }
|
||||
expectFailure(linkage("Can not get instance of singleton 'Companion': 'Companion' is inner class while object is expected")) { getNestedToInnerCompanionNameInline() }
|
||||
expectFailure(linkage("Constructor 'Nested.<init>' can not be called: The call site does not provide a dispatch receiver parameter 'this' that the constructor requires")) { getNestedToInnerNestedName() }
|
||||
expectFailure(linkage("Constructor 'Nested.<init>' can not be called: The call site does not provide a dispatch receiver parameter 'this' that the constructor requires")) { getNestedToInnerNestedNameInline() }
|
||||
expectFailure(linkage("Constructor 'NestedToInner.<init>' can not be called: The call site does not provide a dispatch receiver parameter 'this' that the constructor requires")) { getNestedToInnerInnerName() }
|
||||
expectFailure(linkage("Constructor 'NestedToInner.<init>' can not be called: The call site does not provide a dispatch receiver parameter 'this' that the constructor requires")) { getNestedToInnerInnerNameInline() }
|
||||
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedName() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedNameInline() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedObjectName() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedObjectNameInline() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedCompanionName() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedCompanionNameInline() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedNestedName() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedNestedNameInline() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedInnerName() }
|
||||
expectFailure(linkage("Constructor 'InnerToNested.<init>' can not be called: The call site provides excessive dispatch receiver parameter 'this' that is not needed for the constructor")) { getInnerToNestedInnerNameInline() }
|
||||
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithChangedParameterType.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithChangedParameterType.<init>'")) { getAnnotationClassWithChangedParameterType() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithChangedParameterType.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithChangedParameterType.<init>'")) { getAnnotationClassWithChangedParameterTypeInline() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithChangedParameterType.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithChangedParameterType.<init>'")) { getAnnotationClassWithChangedParameterTypeAsAny() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithChangedParameterType.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithChangedParameterType.<init>'")) { getAnnotationClassWithChangedParameterTypeAsAnyInline() }
|
||||
expectSuccess(105) { getAnnotationClassThatBecomesRegularClass().x }
|
||||
expectSuccess(106) { getAnnotationClassThatBecomesRegularClassInline().x }
|
||||
expectSuccess("AnnotationClassThatBecomesRegularClass[x=107]") { getAnnotationClassThatBecomesRegularClassAsAny().toString() }
|
||||
expectSuccess("AnnotationClassThatBecomesRegularClass[x=108]") { getAnnotationClassThatBecomesRegularClassAsAnyInline().toString() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterThatBecomesRegularClass' can not be called: Function uses annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' that has non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterThatBecomesRegularClass().x.x }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterThatBecomesRegularClassInline' can not be called: Function uses annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' that has non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterThatBecomesRegularClassInline().x.x }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithParameterThatBecomesRegularClass.<init>' can not be called: Annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' uses non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterThatBecomesRegularClassAsAny().toString() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithParameterThatBecomesRegularClass.<init>' can not be called: Annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' uses non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterThatBecomesRegularClassAsAnyInline().toString() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterOfParameterThatBecomesRegularClass' can not be called: Function uses annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' (via annotation class 'AnnotationClassWithParameterOfParameterThatBecomesRegularClass') that has non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterOfParameterThatBecomesRegularClass().x.x.x }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterOfParameterThatBecomesRegularClassInline' can not be called: Function uses annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' (via annotation class 'AnnotationClassWithParameterOfParameterThatBecomesRegularClass') that has non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterOfParameterThatBecomesRegularClassInline().x.x.x }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithParameterThatBecomesRegularClass.<init>' can not be called: Annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' uses non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterOfParameterThatBecomesRegularClassAsAny().toString() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithParameterThatBecomesRegularClass.<init>' can not be called: Annotation class 'AnnotationClassWithParameterThatBecomesRegularClass' uses non-annotation class 'AnnotationClassThatBecomesRegularClass' as a parameter")) { getAnnotationClassWithParameterOfParameterThatBecomesRegularClassAsAnyInline().toString() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassThatDisappears' can not be called: Function uses unlinked class symbol '/AnnotationClassThatDisappears'")) { getAnnotationClassThatDisappears() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassThatDisappearsInline' can not be called: Function uses unlinked class symbol '/AnnotationClassThatDisappears'")) { getAnnotationClassThatDisappearsInline() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassThatDisappears.<init>' can not be called: No constructor found for symbol '/AnnotationClassThatDisappears.<init>'")) { getAnnotationClassThatDisappearsAsAny() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassThatDisappears.<init>' can not be called: No constructor found for symbol '/AnnotationClassThatDisappears.<init>'")) { getAnnotationClassThatDisappearsAsAnyInline() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterThatDisappears' can not be called: Function uses unlinked class symbol '/AnnotationClassThatDisappears' (via annotation class 'AnnotationClassWithParameterThatDisappears')")) { getAnnotationClassWithParameterThatDisappears() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterThatDisappearsInline' can not be called: Function uses unlinked class symbol '/AnnotationClassThatDisappears' (via annotation class 'AnnotationClassWithParameterThatDisappears')")) { getAnnotationClassWithParameterThatDisappearsInline() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterOfParameterThatDisappears' can not be called: Function uses unlinked class symbol '/AnnotationClassThatDisappears' (via annotation class 'AnnotationClassWithParameterOfParameterThatDisappears')")) { getAnnotationClassWithParameterOfParameterThatDisappears() }
|
||||
expectFailure(linkage("Function 'getAnnotationClassWithParameterOfParameterThatDisappearsInline' can not be called: Function uses unlinked class symbol '/AnnotationClassThatDisappears' (via annotation class 'AnnotationClassWithParameterOfParameterThatDisappears')")) { getAnnotationClassWithParameterOfParameterThatDisappearsInline() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassThatDisappears.<init>' can not be called: No constructor found for symbol '/AnnotationClassThatDisappears.<init>'")) { getAnnotationClassWithParameterThatDisappearsAsAny() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassThatDisappears.<init>' can not be called: No constructor found for symbol '/AnnotationClassThatDisappears.<init>'")) { getAnnotationClassWithParameterThatDisappearsAsAnyInline() }
|
||||
expectSuccess("@AnnotationClassWithRenamedParameters(xi=129, xs=Banana)") { getAnnotationClassWithRenamedParameters().toString() }
|
||||
expectSuccess("@AnnotationClassWithRenamedParameters(xi=130, xs=Pear)") { getAnnotationClassWithRenamedParametersInline().toString() }
|
||||
expectSuccess("@AnnotationClassWithRenamedParameters(xi=131, xs=Orange)") { getAnnotationClassWithRenamedParametersAsAny().toString() }
|
||||
expectSuccess("@AnnotationClassWithRenamedParameters(xi=132, xs=Peach)") { getAnnotationClassWithRenamedParametersAsAnyInline().toString() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithReorderedParameters.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithReorderedParameters.<init>'")) { getAnnotationClassWithReorderedParameters() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithReorderedParameters.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithReorderedParameters.<init>'")) { getAnnotationClassWithReorderedParametersInline() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithReorderedParameters.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithReorderedParameters.<init>'")) { getAnnotationClassWithReorderedParametersAsAny() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithReorderedParameters.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithReorderedParameters.<init>'")) { getAnnotationClassWithReorderedParametersAsAnyInline() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithNewParameter.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithNewParameter.<init>'")) { getAnnotationClassWithNewParameter() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithNewParameter.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithNewParameter.<init>'")) { getAnnotationClassWithNewParameterInline() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithNewParameter.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithNewParameter.<init>'")) { getAnnotationClassWithNewParameterAsAny() }
|
||||
expectFailure(linkage("Constructor 'AnnotationClassWithNewParameter.<init>' can not be called: No constructor found for symbol '/AnnotationClassWithNewParameter.<init>'")) { getAnnotationClassWithNewParameterAsAnyInline() }
|
||||
|
||||
// Handle unlinked constructor call in annotation & non-annotation class appearing in annotation:
|
||||
expectSuccess("HolderOfAnnotationClassWithChangedParameterType") { getHolderOfAnnotationClassWithChangedParameterType().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithChangedParameterType") { getHolderOfAnnotationClassWithChangedParameterTypeInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassThatBecomesRegularClass") { getHolderOfAnnotationClassThatBecomesRegularClass().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassThatBecomesRegularClass") { getHolderOfAnnotationClassThatBecomesRegularClassInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterThatBecomesRegularClass") { getHolderOfAnnotationClassWithParameterThatBecomesRegularClass().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterThatBecomesRegularClass") { getHolderOfAnnotationClassWithParameterThatBecomesRegularClassInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass") { getHolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClass") { getHolderOfAnnotationClassWithParameterOfParameterThatBecomesRegularClassInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassThatDisappears") { getHolderOfAnnotationClassThatDisappears().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassThatDisappears") { getHolderOfAnnotationClassThatDisappearsInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterThatDisappears") { getHolderOfAnnotationClassWithParameterThatDisappears().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterThatDisappears") { getHolderOfAnnotationClassWithParameterThatDisappearsInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterOfParameterThatDisappears") { getHolderOfAnnotationClassWithParameterOfParameterThatDisappears().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithParameterOfParameterThatDisappears") { getHolderOfAnnotationClassWithParameterOfParameterThatDisappearsInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithRenamedParameters") { getHolderOfAnnotationClassWithRenamedParameters().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithRenamedParameters") { getHolderOfAnnotationClassWithRenamedParametersInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithReorderedParameters") { getHolderOfAnnotationClassWithReorderedParameters().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithReorderedParameters") { getHolderOfAnnotationClassWithReorderedParametersInline().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithNewParameter") { getHolderOfAnnotationClassWithNewParameter().toString() }
|
||||
expectSuccess("HolderOfAnnotationClassWithNewParameter") { getHolderOfAnnotationClassWithNewParameterInline().toString() }
|
||||
|
||||
expectSuccess { getValueToClass(); "OK" }
|
||||
expectSuccess { getValueToClassInline(); "OK" }
|
||||
expectSuccess { getValueToClassAsAny(); "OK" }
|
||||
expectSuccess { getValueToClassAsAnyInline(); "OK" }
|
||||
|
||||
expectSuccess { getClassToValue(); "OK" }
|
||||
expectSuccess { getClassToValueInline(); "OK" }
|
||||
expectSuccess { getClassToValueAsAny(); "OK" }
|
||||
expectSuccess { getClassToValueAsAnyInline(); "OK" }
|
||||
|
||||
expectFailure(linkage("Function 'component1' can not be called: No function found for symbol '/DataToClass.component1'")) { getSumFromDataClass() }
|
||||
|
||||
expectSuccess { getFunctionalInterfaceToInterface(); "OK" }
|
||||
|
||||
expectFailure(linkage("Constructor 'ClassToAbstractClass.<init>' can not be called: Can not instantiate abstract class 'ClassToAbstractClass'")) { instantiationOfAbstractClass() }
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
STEP 0:
|
||||
dependencies: stdlib, lib1, lib2
|
||||
@@ -0,0 +1,7 @@
|
||||
MODULES: lib1, lib2, main
|
||||
|
||||
STEP 0:
|
||||
libs: lib1, lib2, main
|
||||
|
||||
STEP 1:
|
||||
libs: lib1
|
||||
Reference in New Issue
Block a user