[PL] ABI compatibility tests for reworked partial linkage

This commit is contained in:
Dmitriy Dolovov
2023-03-22 13:59:33 +01:00
committed by Space Team
parent 2a4d880037
commit 4f1155b06f
262 changed files with 4278 additions and 1359 deletions
@@ -1,5 +1,7 @@
public val publicToInternalTopLevelProperty1 = "publicToInternalTopLevelProperty1.v1"
public val publicToInternalTopLevelProperty2 get() = "publicToInternalTopLevelProperty2.v1"
public val publicToInternalPATopLevelProperty1 = "publicToInternalPATopLevelProperty1.v1"
public val publicToInternalPATopLevelProperty2 get() = "publicToInternalPATopLevelProperty2.v1"
public val publicToPrivateTopLevelProperty1 = "publicToPrivateTopLevelProperty1.v1"
public val publicToPrivateTopLevelProperty2 get() = "publicToPrivateTopLevelProperty2.v1"
@@ -8,6 +10,8 @@ open class Container {
public val publicToProtectedProperty2 get() = "Container.publicToProtectedProperty2.v1"
public val publicToInternalProperty1 = "Container.publicToInternalProperty1.v1"
public val publicToInternalProperty2 get() = "Container.publicToInternalProperty2.v1"
public val publicToInternalPAProperty1 = "Container.publicToInternalPAProperty1.v1"
public val publicToInternalPAProperty2 get() = "Container.publicToInternalPAProperty2.v1"
public val publicToPrivateProperty1 = "Container.publicToPrivateProperty1.v1"
public val publicToPrivateProperty2 get() = "Container.publicToPrivateProperty2.v1"
@@ -15,6 +19,8 @@ open class Container {
protected val protectedToPublicProperty2 get() = "Container.protectedToPublicProperty2.v1"
protected val protectedToInternalProperty1 = "Container.protectedToInternalProperty1.v1"
protected val protectedToInternalProperty2 get() = "Container.protectedToInternalProperty2.v1"
protected val protectedToInternalPAProperty1 = "Container.protectedToInternalPAProperty1.v1"
protected val protectedToInternalPAProperty2 get() = "Container.protectedToInternalPAProperty2.v1"
protected val protectedToPrivateProperty1 = "Container.protectedToPrivateProperty1.v1"
protected val protectedToPrivateProperty2 get() = "Container.protectedToPrivateProperty2.v1"
@@ -26,6 +32,10 @@ open class Container {
public open val publicToInternalOverriddenProperty2 get() = "Container.publicToInternalOverriddenProperty2.v1"
public open val publicToInternalOverriddenProperty3 = "Container.publicToInternalOverriddenProperty3.v1"
public open val publicToInternalOverriddenProperty4 get() = "Container.publicToInternalOverriddenProperty4.v1"
public open val publicToInternalPAOverriddenProperty1 = "Container.publicToInternalPAOverriddenProperty1.v1"
public open val publicToInternalPAOverriddenProperty2 get() = "Container.publicToInternalPAOverriddenProperty2.v1"
public open val publicToInternalPAOverriddenProperty3 = "Container.publicToInternalPAOverriddenProperty3.v1"
public open val publicToInternalPAOverriddenProperty4 get() = "Container.publicToInternalPAOverriddenProperty4.v1"
public open val publicToPrivateOverriddenProperty1 = "Container.publicToPrivateOverriddenProperty1.v1"
public open val publicToPrivateOverriddenProperty2 get() = "Container.publicToPrivateOverriddenProperty2.v1"
public open val publicToPrivateOverriddenProperty3 = "Container.publicToPrivateOverriddenProperty3.v1"
@@ -39,6 +49,10 @@ open class Container {
protected open val protectedToInternalOverriddenProperty2 get() = "Container.protectedToInternalOverriddenProperty2.v1"
protected open val protectedToInternalOverriddenProperty3 = "Container.protectedToInternalOverriddenProperty3.v1"
protected open val protectedToInternalOverriddenProperty4 get() = "Container.protectedToInternalOverriddenProperty4.v1"
protected open val protectedToInternalPAOverriddenProperty1 = "Container.protectedToInternalPAOverriddenProperty1.v1"
protected open val protectedToInternalPAOverriddenProperty2 get() = "Container.protectedToInternalPAOverriddenProperty2.v1"
protected open val protectedToInternalPAOverriddenProperty3 = "Container.protectedToInternalPAOverriddenProperty3.v1"
protected open val protectedToInternalPAOverriddenProperty4 get() = "Container.protectedToInternalPAOverriddenProperty4.v1"
protected open val protectedToPrivateOverriddenProperty1 = "Container.protectedToPrivateOverriddenProperty1.v1"
protected open val protectedToPrivateOverriddenProperty2 get() = "Container.protectedToPrivateOverriddenProperty2.v1"
protected open val protectedToPrivateOverriddenProperty3 = "Container.protectedToPrivateOverriddenProperty3.v1"
@@ -68,6 +82,14 @@ open class Container {
// internal open val newOpenInternalProperty2 get() = "Container.newOpenInternalProperty2.v1"
// internal open val newOpenInternalProperty3 = "Container.newOpenInternalProperty3.v1"
// internal open val newOpenInternalProperty4 get() = "Container.newOpenInternalProperty4.v1"
// internal val newInternalPAProperty1 = "Container.newInternalPAProperty1.v1"
// internal val newInternalPAProperty2 get() = "Container.newInternalPAProperty2.v1"
// internal val newInternalPAProperty3 = "Container.newInternalPAProperty3.v1"
// internal val newInternalPAProperty4 get() = "Container.newInternalPAProperty4.v1"
// internal open val newOpenInternalPAProperty1 = "Container.newOpenInternalPAProperty1.v1"
// internal open val newOpenInternalPAProperty2 get() = "Container.newOpenInternalPAProperty2.v1"
// internal open val newOpenInternalPAProperty3 = "Container.newOpenInternalPAProperty3.v1"
// internal open val newOpenInternalPAProperty4 get() = "Container.newOpenInternalPAProperty4.v1"
// private val newPrivateProperty1 = "Container.newPrivateProperty1.v1"
// private val newPrivateProperty2 get() = "Container.newPrivateProperty2.v1"
// private val newPrivateProperty3 = "Container.newPrivateProperty3.v1"
@@ -1,5 +1,7 @@
internal val publicToInternalTopLevelProperty1 = "publicToInternalTopLevelProperty1.v2"
internal val publicToInternalTopLevelProperty2 get() = "publicToInternalTopLevelProperty2.v2"
@PublishedApi internal val publicToInternalPATopLevelProperty1 = "publicToInternalPATopLevelProperty1.v2"
@PublishedApi internal val publicToInternalPATopLevelProperty2 get() = "publicToInternalPATopLevelProperty2.v2"
private val publicToPrivateTopLevelProperty1 = "publicToPrivateTopLevelProperty1.v2"
private val publicToPrivateTopLevelProperty2 get() = "publicToPrivateTopLevelProperty2.v2"
@@ -8,6 +10,8 @@ open class Container {
protected val publicToProtectedProperty2 get() = "Container.publicToProtectedProperty2.v2"
internal val publicToInternalProperty1 = "Container.publicToInternalProperty1.v2"
internal val publicToInternalProperty2 get() = "Container.publicToInternalProperty2.v2"
@PublishedApi internal val publicToInternalPAProperty1 = "Container.publicToInternalPAProperty1.v2"
@PublishedApi internal val publicToInternalPAProperty2 get() = "Container.publicToInternalPAProperty2.v2"
private val publicToPrivateProperty1 = "Container.publicToPrivateProperty1.v2"
private val publicToPrivateProperty2 get() = "Container.publicToPrivateProperty2.v2"
@@ -15,6 +19,8 @@ open class Container {
public val protectedToPublicProperty2 get() = "Container.protectedToPublicProperty2.v2"
internal val protectedToInternalProperty1 = "Container.protectedToInternalProperty1.v2"
internal val protectedToInternalProperty2 get() = "Container.protectedToInternalProperty2.v2"
@PublishedApi internal val protectedToInternalPAProperty1 = "Container.protectedToInternalPAProperty1.v2"
@PublishedApi internal val protectedToInternalPAProperty2 get() = "Container.protectedToInternalPAProperty2.v2"
private val protectedToPrivateProperty1 = "Container.protectedToPrivateProperty1.v2"
private val protectedToPrivateProperty2 get() = "Container.protectedToPrivateProperty2.v2"
@@ -26,6 +32,10 @@ open class Container {
internal open val publicToInternalOverriddenProperty2 get() = "Container.publicToInternalOverriddenProperty2.v2"
internal open val publicToInternalOverriddenProperty3 get() = "Container.publicToInternalOverriddenProperty3.v2"
internal open val publicToInternalOverriddenProperty4 = "Container.publicToInternalOverriddenProperty4.v2"
@PublishedApi internal open val publicToInternalPAOverriddenProperty1 = "Container.publicToInternalPAOverriddenProperty1.v2"
@PublishedApi internal open val publicToInternalPAOverriddenProperty2 get() = "Container.publicToInternalPAOverriddenProperty2.v2"
@PublishedApi internal open val publicToInternalPAOverriddenProperty3 = "Container.publicToInternalPAOverriddenProperty3.v2"
@PublishedApi internal open val publicToInternalPAOverriddenProperty4 get() = "Container.publicToInternalPAOverriddenProperty4.v2"
private /*open*/ val publicToPrivateOverriddenProperty1 = "Container.publicToPrivateOverriddenProperty1.v2"
private /*open*/ val publicToPrivateOverriddenProperty2 get() = "Container.publicToPrivateOverriddenProperty2.v2"
private /*open*/ val publicToPrivateOverriddenProperty3 get() = "Container.publicToPrivateOverriddenProperty3.v2"
@@ -39,6 +49,10 @@ open class Container {
internal open val protectedToInternalOverriddenProperty2 get() = "Container.protectedToInternalOverriddenProperty2.v2"
internal open val protectedToInternalOverriddenProperty3 get() = "Container.protectedToInternalOverriddenProperty3.v2"
internal open val protectedToInternalOverriddenProperty4 = "Container.protectedToInternalOverriddenProperty4.v2"
@PublishedApi internal open val protectedToInternalPAOverriddenProperty1 = "Container.protectedToInternalPAOverriddenProperty1.v2"
@PublishedApi internal open val protectedToInternalPAOverriddenProperty2 get() = "Container.protectedToInternalPAOverriddenProperty2.v2"
@PublishedApi internal open val protectedToInternalPAOverriddenProperty3 = "Container.protectedToInternalPAOverriddenProperty3.v2"
@PublishedApi internal open val protectedToInternalPAOverriddenProperty4 get() = "Container.protectedToInternalPAOverriddenProperty4.v2"
private /*open*/ val protectedToPrivateOverriddenProperty1 = "Container.protectedToPrivateOverriddenProperty1.v2"
private /*open*/ val protectedToPrivateOverriddenProperty2 get() = "Container.protectedToPrivateOverriddenProperty2.v2"
private /*open*/ val protectedToPrivateOverriddenProperty3 get() = "Container.protectedToPrivateOverriddenProperty3.v2"
@@ -68,6 +82,14 @@ open class Container {
internal open val newOpenInternalProperty2 get() = "Container.newOpenInternalProperty2.v2"
internal open val newOpenInternalProperty3 = "Container.newOpenInternalProperty3.v2"
internal open val newOpenInternalProperty4 get() = "Container.newOpenInternalProperty4.v2"
@PublishedApi internal val newInternalPAProperty1 = "Container.newInternalPAProperty1.v2"
@PublishedApi internal val newInternalPAProperty2 get() = "Container.newInternalPAProperty2.v2"
@PublishedApi internal val newInternalPAProperty3 = "Container.newInternalPAProperty3.v2"
@PublishedApi internal val newInternalPAProperty4 get() = "Container.newInternalPAProperty4.v2"
@PublishedApi internal open val newOpenInternalPAProperty1 = "Container.newOpenInternalPAProperty1.v2"
@PublishedApi internal open val newOpenInternalPAProperty2 get() = "Container.newOpenInternalPAProperty2.v2"
@PublishedApi internal open val newOpenInternalPAProperty3 = "Container.newOpenInternalPAProperty3.v2"
@PublishedApi internal open val newOpenInternalPAProperty4 get() = "Container.newOpenInternalPAProperty4.v2"
private val newPrivateProperty1 = "Container.newPrivateProperty1.v2"
private val newPrivateProperty2 get() = "Container.newPrivateProperty2.v2"
private val newPrivateProperty3 = "Container.newPrivateProperty3.v2"
@@ -4,6 +4,8 @@ class ContainerImpl : Container() {
fun publicToProtectedProperty2Access() = publicToProtectedProperty2
fun publicToInternalProperty1Access() = publicToInternalProperty1
fun publicToInternalProperty2Access() = publicToInternalProperty2
fun publicToInternalPAProperty1Access() = publicToInternalPAProperty1
fun publicToInternalPAProperty2Access() = publicToInternalPAProperty2
fun publicToPrivateProperty1Access() = publicToPrivateProperty1
fun publicToPrivateProperty2Access() = publicToPrivateProperty2
@@ -12,6 +14,8 @@ class ContainerImpl : Container() {
fun protectedToPublicProperty2Access() = protectedToPublicProperty2
fun protectedToInternalProperty1Access() = protectedToInternalProperty1
fun protectedToInternalProperty2Access() = protectedToInternalProperty2
fun protectedToInternalPAProperty1Access() = protectedToInternalPAProperty1
fun protectedToInternalPAProperty2Access() = protectedToInternalPAProperty2
fun protectedToPrivateProperty1Access() = protectedToPrivateProperty1
fun protectedToPrivateProperty2Access() = protectedToPrivateProperty2
@@ -24,6 +28,10 @@ class ContainerImpl : Container() {
override val publicToInternalOverriddenProperty2 get() = "ContainerImpl.publicToInternalOverriddenProperty2"
override val publicToInternalOverriddenProperty3 get() = "ContainerImpl.publicToInternalOverriddenProperty3"
override val publicToInternalOverriddenProperty4 = "ContainerImpl.publicToInternalOverriddenProperty4"
override val publicToInternalPAOverriddenProperty1 = "ContainerImpl.publicToInternalPAOverriddenProperty1"
override val publicToInternalPAOverriddenProperty2 get() = "ContainerImpl.publicToInternalPAOverriddenProperty2"
override val publicToInternalPAOverriddenProperty3 get() = "ContainerImpl.publicToInternalPAOverriddenProperty3"
override val publicToInternalPAOverriddenProperty4 = "ContainerImpl.publicToInternalPAOverriddenProperty4"
override val publicToPrivateOverriddenProperty1 = "ContainerImpl.publicToPrivateOverriddenProperty1"
override val publicToPrivateOverriddenProperty2 get() = "ContainerImpl.publicToPrivateOverriddenProperty2"
override val publicToPrivateOverriddenProperty3 get() = "ContainerImpl.publicToPrivateOverriddenProperty3"
@@ -37,6 +45,10 @@ class ContainerImpl : Container() {
override val protectedToInternalOverriddenProperty2 get() = "ContainerImpl.protectedToInternalOverriddenProperty2"
override val protectedToInternalOverriddenProperty3 get() = "ContainerImpl.protectedToInternalOverriddenProperty3"
override val protectedToInternalOverriddenProperty4 = "ContainerImpl.protectedToInternalOverriddenProperty4"
override val protectedToInternalPAOverriddenProperty1 = "ContainerImpl.protectedToInternalPAOverriddenProperty1"
override val protectedToInternalPAOverriddenProperty2 get() = "ContainerImpl.protectedToInternalPAOverriddenProperty2"
override val protectedToInternalPAOverriddenProperty3 get() = "ContainerImpl.protectedToInternalPAOverriddenProperty3"
override val protectedToInternalPAOverriddenProperty4 = "ContainerImpl.protectedToInternalPAOverriddenProperty4"
override val protectedToPrivateOverriddenProperty1 = "ContainerImpl.protectedToPrivateOverriddenProperty1"
override val protectedToPrivateOverriddenProperty2 get() = "ContainerImpl.protectedToPrivateOverriddenProperty2"
override val protectedToPrivateOverriddenProperty3 get() = "ContainerImpl.protectedToPrivateOverriddenProperty3"
@@ -51,6 +63,10 @@ class ContainerImpl : Container() {
fun protectedToInternalOverriddenProperty2Access() = protectedToInternalOverriddenProperty2
fun protectedToInternalOverriddenProperty3Access() = protectedToInternalOverriddenProperty3
fun protectedToInternalOverriddenProperty4Access() = protectedToInternalOverriddenProperty4
fun protectedToInternalPAOverriddenProperty1Access() = protectedToInternalPAOverriddenProperty1
fun protectedToInternalPAOverriddenProperty2Access() = protectedToInternalPAOverriddenProperty2
fun protectedToInternalPAOverriddenProperty3Access() = protectedToInternalPAOverriddenProperty3
fun protectedToInternalPAOverriddenProperty4Access() = protectedToInternalPAOverriddenProperty4
fun protectedToPrivateOverriddenProperty1Access() = protectedToPrivateOverriddenProperty1
fun protectedToPrivateOverriddenProperty2Access() = protectedToPrivateOverriddenProperty2
fun protectedToPrivateOverriddenProperty3Access() = protectedToPrivateOverriddenProperty3
@@ -81,6 +97,14 @@ class ContainerImpl : Container() {
internal open val newOpenInternalProperty2 get() = "ContainerImpl.newOpenInternalProperty2"
internal open val newOpenInternalProperty3 get() = "ContainerImpl.newOpenInternalProperty3"
internal open val newOpenInternalProperty4 = "ContainerImpl.newOpenInternalProperty4"
internal val newInternalPAProperty1 = "ContainerImpl.newInternalPAProperty1"
internal val newInternalPAProperty2 get() = "ContainerImpl.newInternalPAProperty2"
internal val newInternalPAProperty3 get() = "ContainerImpl.newInternalPAProperty3"
internal val newInternalPAProperty4 = "ContainerImpl.newInternalPAProperty4"
internal open val newOpenInternalPAProperty1 = "ContainerImpl.newOpenInternalPAProperty1"
internal open val newOpenInternalPAProperty2 get() = "ContainerImpl.newOpenInternalPAProperty2"
internal open val newOpenInternalPAProperty3 get() = "ContainerImpl.newOpenInternalPAProperty3"
internal open val newOpenInternalPAProperty4 = "ContainerImpl.newOpenInternalPAProperty4"
private val newPrivateProperty1 = "ContainerImpl.newPrivateProperty1"
private val newPrivateProperty2 get() = "ContainerImpl.newPrivateProperty2"
private val newPrivateProperty3 get() = "ContainerImpl.newPrivateProperty3"
@@ -104,6 +128,14 @@ class ContainerImpl : Container() {
fun newOpenInternalProperty2Access() = newOpenInternalProperty2
fun newOpenInternalProperty3Access() = newOpenInternalProperty3
fun newOpenInternalProperty4Access() = newOpenInternalProperty4
fun newInternalPAProperty1Access() = newInternalPAProperty1
fun newInternalPAProperty2Access() = newInternalPAProperty2
fun newInternalPAProperty3Access() = newInternalPAProperty3
fun newInternalPAProperty4Access() = newInternalPAProperty4
fun newOpenInternalPAProperty1Access() = newOpenInternalPAProperty1
fun newOpenInternalPAProperty2Access() = newOpenInternalPAProperty2
fun newOpenInternalPAProperty3Access() = newOpenInternalPAProperty3
fun newOpenInternalPAProperty4Access() = newOpenInternalPAProperty4
fun newPrivateProperty1Access() = newPrivateProperty1
fun newPrivateProperty2Access() = newPrivateProperty2
fun newPrivateProperty3Access() = newPrivateProperty3
+127 -76
View File
@@ -1,82 +1,133 @@
import abitestutils.abiTest
import abitestutils.TestBuilder
import abitestutils.TestMode.NATIVE_CACHE_STATIC_EVERYWHERE
fun box() = abiTest {
val c = Container()
val ci = ContainerImpl()
expectSuccess("publicToInternalTopLevelProperty1.v2") { publicToInternalTopLevelProperty1 }
expectSuccess("publicToInternalTopLevelProperty2.v2") { publicToInternalTopLevelProperty2 }
expectFailure(prefixed("property accessor publicToPrivateTopLevelProperty1.<get-publicToPrivateTopLevelProperty1> can not be called")) { publicToPrivateTopLevelProperty1 }
expectFailure(prefixed("property accessor publicToPrivateTopLevelProperty2.<get-publicToPrivateTopLevelProperty2> can not be called")) { publicToPrivateTopLevelProperty2 }
expectSuccess("Container.publicToProtectedProperty1.v2") { c.publicToProtectedProperty1 }
expectSuccess("Container.publicToProtectedProperty1.v2") { ci.publicToProtectedProperty1 }
expectSuccess("Container.publicToProtectedProperty2.v2") { c.publicToProtectedProperty2 }
expectSuccess("Container.publicToProtectedProperty2.v2") { ci.publicToProtectedProperty2 }
expectFailure(prefixed("property accessor publicToInternalProperty1.<get-publicToInternalProperty1> can not be called")) { c.publicToInternalProperty1 }
expectFailure(prefixed("property accessor publicToInternalProperty1.<get-publicToInternalProperty1> can not be called")) { ci.publicToInternalProperty1 }
expectFailure(prefixed("property accessor publicToInternalProperty2.<get-publicToInternalProperty2> can not be called")) { c.publicToInternalProperty2 }
expectFailure(prefixed("property accessor publicToInternalProperty2.<get-publicToInternalProperty2> can not be called")) { ci.publicToInternalProperty2 }
expectFailure(prefixed("property accessor publicToPrivateProperty1.<get-publicToPrivateProperty1> can not be called")) { c.publicToPrivateProperty1 }
expectFailure(prefixed("property accessor publicToPrivateProperty1.<get-publicToPrivateProperty1> can not be called")) { ci.publicToPrivateProperty1 }
expectFailure(prefixed("property accessor publicToPrivateProperty2.<get-publicToPrivateProperty2> can not be called")) { c.publicToPrivateProperty2 }
expectFailure(prefixed("property accessor publicToPrivateProperty2.<get-publicToPrivateProperty2> can not be called")) { ci.publicToPrivateProperty2 }
expectSuccess("Container.publicToProtectedProperty1.v2") { ci.publicToProtectedProperty1Access() }
expectSuccess("Container.publicToProtectedProperty2.v2") { ci.publicToProtectedProperty2Access() }
expectFailure(prefixed("property accessor publicToInternalProperty1.<get-publicToInternalProperty1> can not be called")) { ci.publicToInternalProperty1Access() }
expectFailure(prefixed("property accessor publicToInternalProperty2.<get-publicToInternalProperty2> can not be called")) { ci.publicToInternalProperty2Access() }
expectFailure(prefixed("property accessor publicToPrivateProperty1.<get-publicToPrivateProperty1> can not be called")) { ci.publicToPrivateProperty1Access() }
expectFailure(prefixed("property accessor publicToPrivateProperty2.<get-publicToPrivateProperty2> can not be called")) { ci.publicToPrivateProperty2Access() }
expectSuccess("Container.protectedToPublicProperty1.v2") { ci.protectedToPublicProperty1Access() }
expectSuccess("Container.protectedToPublicProperty2.v2") { ci.protectedToPublicProperty2Access() }
expectFailure(prefixed("property accessor protectedToInternalProperty1.<get-protectedToInternalProperty1> can not be called")) { ci.protectedToInternalProperty1Access() }
expectFailure(prefixed("property accessor protectedToInternalProperty2.<get-protectedToInternalProperty2> can not be called")) { ci.protectedToInternalProperty2Access() }
expectFailure(prefixed("property accessor protectedToPrivateProperty1.<get-protectedToPrivateProperty1> can not be called")) { ci.protectedToPrivateProperty1Access() }
expectFailure(prefixed("property accessor protectedToPrivateProperty2.<get-protectedToPrivateProperty2> can not be called")) { ci.protectedToPrivateProperty2Access() }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty1") { ci.publicToProtectedOverriddenProperty1 }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty2") { ci.publicToProtectedOverriddenProperty2 }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty3") { ci.publicToProtectedOverriddenProperty3 }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty4") { ci.publicToProtectedOverriddenProperty4 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty1") { ci.publicToInternalOverriddenProperty1 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty2") { ci.publicToInternalOverriddenProperty2 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty3") { ci.publicToInternalOverriddenProperty3 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty4") { ci.publicToInternalOverriddenProperty4 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty1") { ci.publicToPrivateOverriddenProperty1 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty2") { ci.publicToPrivateOverriddenProperty2 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty3") { ci.publicToPrivateOverriddenProperty3 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty4") { ci.publicToPrivateOverriddenProperty4 }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty1") { ci.protectedToPublicOverriddenProperty1Access() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty2") { ci.protectedToPublicOverriddenProperty2Access() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty3") { ci.protectedToPublicOverriddenProperty3Access() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty4") { ci.protectedToPublicOverriddenProperty4Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty1") { ci.protectedToInternalOverriddenProperty1Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty2") { ci.protectedToInternalOverriddenProperty2Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty3") { ci.protectedToInternalOverriddenProperty3Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty4") { ci.protectedToInternalOverriddenProperty4Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty1") { ci.protectedToPrivateOverriddenProperty1Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty2") { ci.protectedToPrivateOverriddenProperty2Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty3") { ci.protectedToPrivateOverriddenProperty3Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty4") { ci.protectedToPrivateOverriddenProperty4Access() }
expectSuccess("ContainerImpl.newPublicProperty1") { ci.newPublicProperty1 }
expectSuccess("ContainerImpl.newPublicProperty2") { ci.newPublicProperty2 }
expectSuccess("ContainerImpl.newPublicProperty3") { ci.newPublicProperty3 }
expectSuccess("ContainerImpl.newPublicProperty4") { ci.newPublicProperty4 }
expectSuccess("ContainerImpl.newProtectedProperty1") { ci.newProtectedProperty1Access() }
expectSuccess("ContainerImpl.newProtectedProperty2") { ci.newProtectedProperty2Access() }
expectSuccess("ContainerImpl.newProtectedProperty3") { ci.newProtectedProperty3Access() }
expectSuccess("ContainerImpl.newProtectedProperty4") { ci.newProtectedProperty4Access() }
expectSuccess("ContainerImpl.newOpenProtectedProperty1") { ci.newOpenProtectedProperty1Access() }
expectSuccess("ContainerImpl.newOpenProtectedProperty2") { ci.newOpenProtectedProperty2Access() }
expectSuccess("ContainerImpl.newOpenProtectedProperty3") { ci.newOpenProtectedProperty3Access() }
expectSuccess("ContainerImpl.newOpenProtectedProperty4") { ci.newOpenProtectedProperty4Access() }
expectSuccess("ContainerImpl.newInternalProperty1") { ci.newInternalProperty1Access() }
expectSuccess("ContainerImpl.newInternalProperty2") { ci.newInternalProperty2Access() }
expectSuccess("ContainerImpl.newInternalProperty3") { ci.newInternalProperty3Access() }
expectSuccess("ContainerImpl.newInternalProperty4") { ci.newInternalProperty4Access() }
expectSuccess("ContainerImpl.newOpenInternalProperty1") { ci.newOpenInternalProperty1Access() }
expectSuccess("ContainerImpl.newOpenInternalProperty2") { ci.newOpenInternalProperty2Access() }
expectSuccess("ContainerImpl.newOpenInternalProperty3") { ci.newOpenInternalProperty3Access() }
expectSuccess("ContainerImpl.newOpenInternalProperty4") { ci.newOpenInternalProperty4Access() }
expectSuccess("ContainerImpl.newPrivateProperty1") { ci.newPrivateProperty1Access() }
expectSuccess("ContainerImpl.newPrivateProperty2") { ci.newPrivateProperty2Access() }
expectSuccess("ContainerImpl.newPrivateProperty3") { ci.newPrivateProperty3Access() }
expectSuccess("ContainerImpl.newPrivateProperty4") { ci.newPrivateProperty4Access() }
success("publicToInternalTopLevelProperty1.v2") { publicToInternalTopLevelProperty1 } // Signature remains the same.
success("publicToInternalTopLevelProperty2.v2") { publicToInternalTopLevelProperty2 } // Signature remains the same.
success("publicToInternalPATopLevelProperty1.v2") { publicToInternalPATopLevelProperty1 } // Signature remains the same.
success("publicToInternalPATopLevelProperty2.v2") { publicToInternalPATopLevelProperty2 } // Signature remains the same.
unlinkedSymbol("/publicToPrivateTopLevelProperty1.<get-publicToPrivateTopLevelProperty1>") { publicToPrivateTopLevelProperty1 } // Signature changed.
unlinkedSymbol("/publicToPrivateTopLevelProperty2.<get-publicToPrivateTopLevelProperty2>") { publicToPrivateTopLevelProperty2 } // Signature changed.
success("Container.publicToProtectedProperty1.v2") { c.publicToProtectedProperty1 } // Signature remains the same.
success("Container.publicToProtectedProperty1.v2") { ci.publicToProtectedProperty1 } // Signature remains the same.
success("Container.publicToProtectedProperty2.v2") { c.publicToProtectedProperty2 } // Signature remains the same.
success("Container.publicToProtectedProperty2.v2") { ci.publicToProtectedProperty2 } // Signature remains the same.
// TODO: KT-54469, Container.publicToInternalProperty1 should fail because it is accessed from another module.
success("Container.publicToInternalProperty1.v2") { c.publicToInternalProperty1 } // Signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToInternalProperty1.<get-publicToInternalProperty1>") { ci.publicToInternalProperty1 } // FOs are not generated for internal members from other module.
// TODO: KT-54469, Container.publicToInternalProperty2 should fail because it is accessed from another module.
success("Container.publicToInternalProperty2.v2") { c.publicToInternalProperty2 } // Signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToInternalProperty2.<get-publicToInternalProperty2>") { ci.publicToInternalProperty2 } // FOs are not generated for internal members from other module.
// TODO: KT-54469, Container.publicToInternalPAProperty1 should fail because it is accessed from another module.
success("Container.publicToInternalPAProperty1.v2") { c.publicToInternalPAProperty1 } // Signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty1.<get-publicToInternalPAProperty1>") { ci.publicToInternalPAProperty1 } // FOs are not generated for internal members from other module.
// TODO: KT-54469, Container.publicToInternalPAProperty2 should fail because it is accessed from another module.
success("Container.publicToInternalPAProperty2.v2") { c.publicToInternalPAProperty2 } // Signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty2.<get-publicToInternalPAProperty2>") { ci.publicToInternalPAProperty2 } // FOs are not generated for internal members from other module.
inaccessible("publicToPrivateProperty1.<get-publicToPrivateProperty1>") { c.publicToPrivateProperty1 } // Inaccessible from other module though signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToPrivateProperty1.<get-publicToPrivateProperty1>") { ci.publicToPrivateProperty1 } // FOs are not generated for private members.
inaccessible("publicToPrivateProperty2.<get-publicToPrivateProperty2>") { c.publicToPrivateProperty2 } // Inaccessible from other module though signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToPrivateProperty2.<get-publicToPrivateProperty2>") { ci.publicToPrivateProperty2 } // FOs are not generated for private members.
success("Container.publicToProtectedProperty1.v2") { ci.publicToProtectedProperty1Access() } // Signature remains the same.
success("Container.publicToProtectedProperty2.v2") { ci.publicToProtectedProperty2Access() } // Signature remains the same.
unlinkedSymbol("/ContainerImpl.publicToInternalProperty1.<get-publicToInternalProperty1>") { ci.publicToInternalProperty1Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.publicToInternalProperty2.<get-publicToInternalProperty2>") { ci.publicToInternalProperty2Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty1.<get-publicToInternalPAProperty1>") { ci.publicToInternalPAProperty1Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.publicToInternalPAProperty2.<get-publicToInternalPAProperty2>") { ci.publicToInternalPAProperty2Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.publicToPrivateProperty1.<get-publicToPrivateProperty1>") { ci.publicToPrivateProperty1Access() } // FOs are not generated for private members.
unlinkedSymbol("/ContainerImpl.publicToPrivateProperty2.<get-publicToPrivateProperty2>") { ci.publicToPrivateProperty2Access() } // FOs are not generated for private members.
success("Container.protectedToPublicProperty1.v2") { ci.protectedToPublicProperty1Access() } // Signature remains the same.
success("Container.protectedToPublicProperty2.v2") { ci.protectedToPublicProperty2Access() } // Signature remains the same.
unlinkedSymbol("/ContainerImpl.protectedToInternalProperty1.<get-protectedToInternalProperty1>") { ci.protectedToInternalProperty1Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.protectedToInternalProperty2.<get-protectedToInternalProperty2>") { ci.protectedToInternalProperty2Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.protectedToInternalPAProperty1.<get-protectedToInternalPAProperty1>") { ci.protectedToInternalPAProperty1Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.protectedToInternalPAProperty2.<get-protectedToInternalPAProperty2>") { ci.protectedToInternalPAProperty2Access() } // FOs are not generated for internal members from other module.
unlinkedSymbol("/ContainerImpl.protectedToPrivateProperty1.<get-protectedToPrivateProperty1>") { ci.protectedToPrivateProperty1Access() } // FOs are not generated for private members.
unlinkedSymbol("/ContainerImpl.protectedToPrivateProperty2.<get-protectedToPrivateProperty2>") { ci.protectedToPrivateProperty2Access() } // FOs are not generated for private members.
success("ContainerImpl.publicToProtectedOverriddenProperty1") { ci.publicToProtectedOverriddenProperty1 }
success("ContainerImpl.publicToProtectedOverriddenProperty2") { ci.publicToProtectedOverriddenProperty2 }
success("ContainerImpl.publicToProtectedOverriddenProperty3") { ci.publicToProtectedOverriddenProperty3 }
success("ContainerImpl.publicToProtectedOverriddenProperty4") { ci.publicToProtectedOverriddenProperty4 }
success("ContainerImpl.publicToInternalOverriddenProperty1") { ci.publicToInternalOverriddenProperty1 }
success("ContainerImpl.publicToInternalOverriddenProperty2") { ci.publicToInternalOverriddenProperty2 }
success("ContainerImpl.publicToInternalOverriddenProperty3") { ci.publicToInternalOverriddenProperty3 }
success("ContainerImpl.publicToInternalOverriddenProperty4") { ci.publicToInternalOverriddenProperty4 }
success("ContainerImpl.publicToInternalPAOverriddenProperty1") { ci.publicToInternalPAOverriddenProperty1 }
success("ContainerImpl.publicToInternalPAOverriddenProperty2") { ci.publicToInternalPAOverriddenProperty2 }
success("ContainerImpl.publicToInternalPAOverriddenProperty3") { ci.publicToInternalPAOverriddenProperty3 }
success("ContainerImpl.publicToInternalPAOverriddenProperty4") { ci.publicToInternalPAOverriddenProperty4 }
success("ContainerImpl.publicToPrivateOverriddenProperty1") { ci.publicToPrivateOverriddenProperty1 }
success("ContainerImpl.publicToPrivateOverriddenProperty2") { ci.publicToPrivateOverriddenProperty2 }
success("ContainerImpl.publicToPrivateOverriddenProperty3") { ci.publicToPrivateOverriddenProperty3 }
success("ContainerImpl.publicToPrivateOverriddenProperty4") { ci.publicToPrivateOverriddenProperty4 }
success("ContainerImpl.protectedToPublicOverriddenProperty1") { ci.protectedToPublicOverriddenProperty1Access() }
success("ContainerImpl.protectedToPublicOverriddenProperty2") { ci.protectedToPublicOverriddenProperty2Access() }
success("ContainerImpl.protectedToPublicOverriddenProperty3") { ci.protectedToPublicOverriddenProperty3Access() }
success("ContainerImpl.protectedToPublicOverriddenProperty4") { ci.protectedToPublicOverriddenProperty4Access() }
success("ContainerImpl.protectedToInternalOverriddenProperty1") { ci.protectedToInternalOverriddenProperty1Access() }
success("ContainerImpl.protectedToInternalOverriddenProperty2") { ci.protectedToInternalOverriddenProperty2Access() }
success("ContainerImpl.protectedToInternalOverriddenProperty3") { ci.protectedToInternalOverriddenProperty3Access() }
success("ContainerImpl.protectedToInternalOverriddenProperty4") { ci.protectedToInternalOverriddenProperty4Access() }
success("ContainerImpl.protectedToInternalPAOverriddenProperty1") { ci.protectedToInternalPAOverriddenProperty1Access() }
success("ContainerImpl.protectedToInternalPAOverriddenProperty2") { ci.protectedToInternalPAOverriddenProperty2Access() }
success("ContainerImpl.protectedToInternalPAOverriddenProperty3") { ci.protectedToInternalPAOverriddenProperty3Access() }
success("ContainerImpl.protectedToInternalPAOverriddenProperty4") { ci.protectedToInternalPAOverriddenProperty4Access() }
success("ContainerImpl.protectedToPrivateOverriddenProperty1") { ci.protectedToPrivateOverriddenProperty1Access() }
success("ContainerImpl.protectedToPrivateOverriddenProperty2") { ci.protectedToPrivateOverriddenProperty2Access() }
success("ContainerImpl.protectedToPrivateOverriddenProperty3") { ci.protectedToPrivateOverriddenProperty3Access() }
success("ContainerImpl.protectedToPrivateOverriddenProperty4") { ci.protectedToPrivateOverriddenProperty4Access() }
success("ContainerImpl.newPublicProperty1") { ci.newPublicProperty1 }
success("ContainerImpl.newPublicProperty2") { ci.newPublicProperty2 }
success("ContainerImpl.newPublicProperty3") { ci.newPublicProperty3 }
success("ContainerImpl.newPublicProperty4") { ci.newPublicProperty4 }
success("ContainerImpl.newProtectedProperty1") { ci.newProtectedProperty1Access() }
success("ContainerImpl.newProtectedProperty2") { ci.newProtectedProperty2Access() }
success("ContainerImpl.newProtectedProperty3") { ci.newProtectedProperty3Access() }
success("ContainerImpl.newProtectedProperty4") { ci.newProtectedProperty4Access() }
success("ContainerImpl.newOpenProtectedProperty1") { ci.newOpenProtectedProperty1Access() }
success("ContainerImpl.newOpenProtectedProperty2") { ci.newOpenProtectedProperty2Access() }
success("ContainerImpl.newOpenProtectedProperty3") { ci.newOpenProtectedProperty3Access() }
success("ContainerImpl.newOpenProtectedProperty4") { ci.newOpenProtectedProperty4Access() }
success("ContainerImpl.newInternalProperty1") { ci.newInternalProperty1Access() }
success("ContainerImpl.newInternalProperty2") { ci.newInternalProperty2Access() }
success("ContainerImpl.newInternalProperty3") { ci.newInternalProperty3Access() }
success("ContainerImpl.newInternalProperty4") { ci.newInternalProperty4Access() }
success("ContainerImpl.newOpenInternalProperty1") { ci.newOpenInternalProperty1Access() }
success("ContainerImpl.newOpenInternalProperty2") { ci.newOpenInternalProperty2Access() }
success("ContainerImpl.newOpenInternalProperty3") { ci.newOpenInternalProperty3Access() }
success("ContainerImpl.newOpenInternalProperty4") { ci.newOpenInternalProperty4Access() }
success("ContainerImpl.newInternalPAProperty1") { ci.newInternalPAProperty1Access() }
success("ContainerImpl.newInternalPAProperty2") { ci.newInternalPAProperty2Access() }
success("ContainerImpl.newInternalPAProperty3") { ci.newInternalPAProperty3Access() }
success("ContainerImpl.newInternalPAProperty4") { ci.newInternalPAProperty4Access() }
success("ContainerImpl.newOpenInternalPAProperty1") { ci.newOpenInternalPAProperty1Access() }
success("ContainerImpl.newOpenInternalPAProperty2") { ci.newOpenInternalPAProperty2Access() }
success("ContainerImpl.newOpenInternalPAProperty3") { ci.newOpenInternalPAProperty3Access() }
success("ContainerImpl.newOpenInternalPAProperty4") { ci.newOpenInternalPAProperty4Access() }
success("ContainerImpl.newPrivateProperty1") { ci.newPrivateProperty1Access() }
success("ContainerImpl.newPrivateProperty2") { ci.newPrivateProperty2Access() }
success("ContainerImpl.newPrivateProperty3") { ci.newPrivateProperty3Access() }
success("ContainerImpl.newPrivateProperty4") { ci.newPrivateProperty4Access() }
}
// Shortcuts:
private inline fun TestBuilder.success(expectedOutcome: String, noinline block: () -> String) =
expectSuccess(expectedOutcome, block)
private inline fun TestBuilder.unlinkedSymbol(signature: String, noinline block: () -> Unit) {
val accessorName = signature.removePrefix("/").split('.').takeLast(2).joinToString(".")
expectFailure(linkage("Property accessor '$accessorName' can not be called: No property accessor found for symbol '$signature'"), block)
}
private inline fun TestBuilder.inaccessible(accessorName: String, noinline block: () -> Unit) = expectFailure(
linkage("Property accessor '$accessorName' can not be called: Private property accessor declared in module <lib1> can not be accessed in module <main>"),
block
)
@@ -1,4 +1,3 @@
MUTED
MODULES: lib1, lib2, main
STEP 0: