From cd007c02df1d257c8d963de250fc72e7f5a79f41 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Tue, 13 Sep 2022 19:03:45 +0200 Subject: [PATCH] [IR][tests] Add cases to visibility-related tests where a callable accidentally starts to override newly added open callable in super class ^KT-53608 --- .../changeFunctionVisibility/lib1/l1.kt | 8 +++ .../changeFunctionVisibility/lib1/l1.kt.1 | 8 +++ .../changeFunctionVisibility/lib2/l2.kt | 17 ++++++ .../changeFunctionVisibility/main/m.kt | 7 +++ .../changePropertyVisibility/lib1/l1.kt | 29 ++++++++++ .../changePropertyVisibility/lib1/l1.kt.1 | 29 ++++++++++ .../changePropertyVisibility/lib2/l2.kt | 53 +++++++++++++++++++ .../changePropertyVisibility/main/m.kt | 24 +++++++++ 8 files changed, 175 insertions(+) diff --git a/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt b/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt index 12425d8bc7f..b0d40d0b7ff 100644 --- a/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt +++ b/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt @@ -17,4 +17,12 @@ open class Container { protected open fun protectedToPublicOverriddenFunction() = "Container.protectedToPublicOverriddenFunction.v1" protected open fun protectedToInternalOverriddenFunction() = "Container.protectedToInternalOverriddenFunction.v1" protected open fun protectedToPrivateOverriddenFunction() = "Container.protectedToPrivateOverriddenFunction.v1" + +// public fun newPublicFunction() = "Container.newPublicFunction.v1" +// public open fun newOpenPublicFunction() = "Container.newOpenPublicFunction.v1" +// protected fun newProtectedFunction() = "Container.newProtectedFunction.v1" +// protected open fun newOpenProtectedFunction() = "Container.newOpenProtectedFunction.v1" +// internal fun newInternalFunction() = "Container.newInternalFunction.v1" +// internal open fun newOpenInternalFunction() = "Container.newOpenInternalFunction.v1" +// private fun newPrivateFunction() = "Container.newPrivateFunction.v1" } diff --git a/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt.1 b/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt.1 index 838684e579b..bab9666ccf1 100644 --- a/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt.1 +++ b/compiler/testData/klibABI/changeFunctionVisibility/lib1/l1.kt.1 @@ -17,4 +17,12 @@ open class Container { public open fun protectedToPublicOverriddenFunction() = "Container.protectedToPublicOverriddenFunction.v2" internal open fun protectedToInternalOverriddenFunction() = "Container.protectedToInternalOverriddenFunction.v2" private /*open*/ fun protectedToPrivateOverriddenFunction() = "Container.protectedToPrivateOverriddenFunction.v2" + + public fun newPublicFunction() = "Container.newPublicFunction.v2" + public open fun newOpenPublicFunction() = "Container.newOpenPublicFunction.v2" + protected fun newProtectedFunction() = "Container.newProtectedFunction.v2" + protected open fun newOpenProtectedFunction() = "Container.newOpenProtectedFunction.v2" + internal fun newInternalFunction() = "Container.newInternalFunction.v2" + internal open fun newOpenInternalFunction() = "Container.newOpenInternalFunction.v2" + private fun newPrivateFunction() = "Container.newPrivateFunction.v2" } diff --git a/compiler/testData/klibABI/changeFunctionVisibility/lib2/l2.kt b/compiler/testData/klibABI/changeFunctionVisibility/lib2/l2.kt index ed7e88e6891..326c77ee5a6 100644 --- a/compiler/testData/klibABI/changeFunctionVisibility/lib2/l2.kt +++ b/compiler/testData/klibABI/changeFunctionVisibility/lib2/l2.kt @@ -22,4 +22,21 @@ class ContainerImpl : Container() { fun protectedToPublicOverriddenFunctionAccess() = protectedToPublicOverriddenFunction() fun protectedToInternalOverriddenFunctionAccess() = protectedToInternalOverriddenFunction() fun protectedToPrivateOverriddenFunctionAccess() = protectedToPrivateOverriddenFunction() + + // Functions that accedentally start to override/conflict with functions added to Container since version v2: + public fun newPublicFunction() = "ContainerImpl.newPublicFunction" + public fun newOpenPublicFunction() = "ContainerImpl.newOpenPublicFunction" + protected fun newProtectedFunction() = "ContainerImpl.newProtectedFunction" + protected fun newOpenProtectedFunction() = "ContainerImpl.newOpenProtectedFunction" + internal fun newInternalFunction() = "ContainerImpl.newInternalFunction" + internal fun newOpenInternalFunction() = "ContainerImpl.newOpenInternalFunction" + private fun newPrivateFunction() = "ContainerImpl.newPrivateFunction" + + // As far as protected/private members can't be accessed outside of the class hierarchy, and internal can't be accessed + // outside of module, we need special accessors. + fun newProtectedFunctionAccess() = newProtectedFunction() + fun newOpenProtectedFunctionAccess() = newOpenProtectedFunction() + fun newInternalFunctionAccess() = newInternalFunction() + fun newOpenInternalFunctionAccess() = newOpenInternalFunction() + fun newPrivateFunctionAccess() = newPrivateFunction() } diff --git a/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt b/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt index ea060990c94..01430df37cb 100644 --- a/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt +++ b/compiler/testData/klibABI/changeFunctionVisibility/main/m.kt @@ -19,4 +19,11 @@ fun box() = abiTest { expectSuccess("ContainerImpl.protectedToPublicOverriddenFunction") { c.protectedToPublicOverriddenFunctionAccess() } expectSuccess("ContainerImpl.protectedToInternalOverriddenFunction") { c.protectedToInternalOverriddenFunctionAccess() } expectSuccess("ContainerImpl.protectedToPrivateOverriddenFunction") { c.protectedToPrivateOverriddenFunctionAccess() } + expectSuccess("ContainerImpl.newPublicFunction") { c.newPublicFunction() } + expectSuccess("ContainerImpl.newOpenPublicFunction") { c.newOpenPublicFunction() } + expectSuccess("ContainerImpl.newProtectedFunction") { c.newProtectedFunctionAccess() } + expectSuccess("ContainerImpl.newOpenProtectedFunction") { c.newOpenProtectedFunctionAccess() } + expectSuccess("ContainerImpl.newInternalFunction") { c.newInternalFunctionAccess() } + expectSuccess("ContainerImpl.newOpenInternalFunction") { c.newOpenInternalFunctionAccess() } + expectSuccess("ContainerImpl.newPrivateFunction") { c.newPrivateFunctionAccess() } } diff --git a/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt b/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt index 4dca985ae42..d28af0feccb 100644 --- a/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt +++ b/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt @@ -43,4 +43,33 @@ open class Container { protected open val protectedToPrivateOverriddenProperty2 get() = "Container.protectedToPrivateOverriddenProperty2.v1" protected open val protectedToPrivateOverriddenProperty3 = "Container.protectedToPrivateOverriddenProperty3.v1" protected open val protectedToPrivateOverriddenProperty4 get() = "Container.protectedToPrivateOverriddenProperty4.v1" + +// public val newPublicProperty1 = "Container.newPublicProperty1.v1" +// public val newPublicProperty2 get() = "Container.newPublicProperty2.v1" +// public val newPublicProperty3 = "Container.newPublicProperty3.v1" +// public val newPublicProperty4 get() = "Container.newPublicProperty4.v1" +// public open val newOpenPublicProperty1 = "Container.newOpenPublicProperty1.v1" +// public open val newOpenPublicProperty2 get() = "Container.newOpenPublicProperty2.v1" +// public open val newOpenPublicProperty3 = "Container.newOpenPublicProperty3.v1" +// public open val newOpenPublicProperty4 get() = "Container.newOpenPublicProperty4.v1" +// protected val newProtectedProperty1 = "Container.newProtectedProperty1.v1" +// protected val newProtectedProperty2 get() = "Container.newProtectedProperty2.v1" +// protected val newProtectedProperty3 = "Container.newProtectedProperty3.v1" +// protected val newProtectedProperty4 get() = "Container.newProtectedProperty4.v1" +// protected open val newOpenProtectedProperty1 = "Container.newOpenProtectedProperty1.v1" +// protected open val newOpenProtectedProperty2 get() = "Container.newOpenProtectedProperty2.v1" +// protected open val newOpenProtectedProperty3 = "Container.newOpenProtectedProperty3.v1" +// protected open val newOpenProtectedProperty4 get() = "Container.newOpenProtectedProperty4.v1" +// internal val newInternalProperty1 = "Container.newInternalProperty1.v1" +// internal val newInternalProperty2 get() = "Container.newInternalProperty2.v1" +// internal val newInternalProperty3 = "Container.newInternalProperty3.v1" +// internal val newInternalProperty4 get() = "Container.newInternalProperty4.v1" +// internal open val newOpenInternalProperty1 = "Container.newOpenInternalProperty1.v1" +// internal open val newOpenInternalProperty2 get() = "Container.newOpenInternalProperty2.v1" +// internal open val newOpenInternalProperty3 = "Container.newOpenInternalProperty3.v1" +// internal open val newOpenInternalProperty4 get() = "Container.newOpenInternalProperty4.v1" +// private val newPrivateProperty1 = "Container.newPrivateProperty1.v1" +// private val newPrivateProperty2 get() = "Container.newPrivateProperty2.v1" +// private val newPrivateProperty3 = "Container.newPrivateProperty3.v1" +// private val newPrivateProperty4 get() = "Container.newPrivateProperty4.v1" } diff --git a/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt.1 b/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt.1 index e30d69b9087..c2d5fea7d23 100644 --- a/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt.1 +++ b/compiler/testData/klibABI/changePropertyVisibility/lib1/l1.kt.1 @@ -43,4 +43,33 @@ open class Container { private /*open*/ val protectedToPrivateOverriddenProperty2 get() = "Container.protectedToPrivateOverriddenProperty2.v2" private /*open*/ val protectedToPrivateOverriddenProperty3 get() = "Container.protectedToPrivateOverriddenProperty3.v2" private /*open*/ val protectedToPrivateOverriddenProperty4 = "Container.protectedToPrivateOverriddenProperty4.v2" + + public val newPublicProperty1 = "Container.newPublicProperty1.v2" + public val newPublicProperty2 get() = "Container.newPublicProperty2.v2" + public val newPublicProperty3 = "Container.newPublicProperty3.v2" + public val newPublicProperty4 get() = "Container.newPublicProperty4.v2" + public open val newOpenPublicProperty1 = "Container.newOpenPublicProperty1.v2" + public open val newOpenPublicProperty2 get() = "Container.newOpenPublicProperty2.v2" + public open val newOpenPublicProperty3 = "Container.newOpenPublicProperty3.v2" + public open val newOpenPublicProperty4 get() = "Container.newOpenPublicProperty4.v2" + protected val newProtectedProperty1 = "Container.newProtectedProperty1.v2" + protected val newProtectedProperty2 get() = "Container.newProtectedProperty2.v2" + protected val newProtectedProperty3 = "Container.newProtectedProperty3.v2" + protected val newProtectedProperty4 get() = "Container.newProtectedProperty4.v2" + protected open val newOpenProtectedProperty1 = "Container.newOpenProtectedProperty1.v2" + protected open val newOpenProtectedProperty2 get() = "Container.newOpenProtectedProperty2.v2" + protected open val newOpenProtectedProperty3 = "Container.newOpenProtectedProperty3.v2" + protected open val newOpenProtectedProperty4 get() = "Container.newOpenProtectedProperty4.v2" + internal val newInternalProperty1 = "Container.newInternalProperty1.v2" + internal val newInternalProperty2 get() = "Container.newInternalProperty2.v2" + internal val newInternalProperty3 = "Container.newInternalProperty3.v2" + internal val newInternalProperty4 get() = "Container.newInternalProperty4.v2" + internal open val newOpenInternalProperty1 = "Container.newOpenInternalProperty1.v2" + internal open val newOpenInternalProperty2 get() = "Container.newOpenInternalProperty2.v2" + internal open val newOpenInternalProperty3 = "Container.newOpenInternalProperty3.v2" + internal open val newOpenInternalProperty4 get() = "Container.newOpenInternalProperty4.v2" + private val newPrivateProperty1 = "Container.newPrivateProperty1.v2" + private val newPrivateProperty2 get() = "Container.newPrivateProperty2.v2" + private val newPrivateProperty3 = "Container.newPrivateProperty3.v2" + private val newPrivateProperty4 get() = "Container.newPrivateProperty4.v2" } diff --git a/compiler/testData/klibABI/changePropertyVisibility/lib2/l2.kt b/compiler/testData/klibABI/changePropertyVisibility/lib2/l2.kt index 56ac63522e8..7819377ab0c 100644 --- a/compiler/testData/klibABI/changePropertyVisibility/lib2/l2.kt +++ b/compiler/testData/klibABI/changePropertyVisibility/lib2/l2.kt @@ -55,4 +55,57 @@ class ContainerImpl : Container() { fun protectedToPrivateOverriddenProperty2Access() = protectedToPrivateOverriddenProperty2 fun protectedToPrivateOverriddenProperty3Access() = protectedToPrivateOverriddenProperty3 fun protectedToPrivateOverriddenProperty4Access() = protectedToPrivateOverriddenProperty4 + + // Properties that accedentally start to override/conflict with properties added to Container since version v2: + public val newPublicProperty1 = "ContainerImpl.newPublicProperty1" + public val newPublicProperty2 get() = "ContainerImpl.newPublicProperty2" + public val newPublicProperty3 get() = "ContainerImpl.newPublicProperty3" + public val newPublicProperty4 = "ContainerImpl.newPublicProperty4" + public open val newOpenPublicProperty1 = "ContainerImpl.newOpenPublicProperty1" + public open val newOpenPublicProperty2 get() = "ContainerImpl.newOpenPublicProperty2" + public open val newOpenPublicProperty3 get() = "ContainerImpl.newOpenPublicProperty3" + public open val newOpenPublicProperty4 = "ContainerImpl.newOpenPublicProperty4" + protected val newProtectedProperty1 = "ContainerImpl.newProtectedProperty1" + protected val newProtectedProperty2 get() = "ContainerImpl.newProtectedProperty2" + protected val newProtectedProperty3 get() = "ContainerImpl.newProtectedProperty3" + protected val newProtectedProperty4 = "ContainerImpl.newProtectedProperty4" + protected open val newOpenProtectedProperty1 = "ContainerImpl.newOpenProtectedProperty1" + protected open val newOpenProtectedProperty2 get() = "ContainerImpl.newOpenProtectedProperty2" + protected open val newOpenProtectedProperty3 get() = "ContainerImpl.newOpenProtectedProperty3" + protected open val newOpenProtectedProperty4 = "ContainerImpl.newOpenProtectedProperty4" + internal val newInternalProperty1 = "ContainerImpl.newInternalProperty1" + internal val newInternalProperty2 get() = "ContainerImpl.newInternalProperty2" + internal val newInternalProperty3 get() = "ContainerImpl.newInternalProperty3" + internal val newInternalProperty4 = "ContainerImpl.newInternalProperty4" + internal open val newOpenInternalProperty1 = "ContainerImpl.newOpenInternalProperty1" + internal open val newOpenInternalProperty2 get() = "ContainerImpl.newOpenInternalProperty2" + internal open val newOpenInternalProperty3 get() = "ContainerImpl.newOpenInternalProperty3" + internal open val newOpenInternalProperty4 = "ContainerImpl.newOpenInternalProperty4" + private val newPrivateProperty1 = "ContainerImpl.newPrivateProperty1" + private val newPrivateProperty2 get() = "ContainerImpl.newPrivateProperty2" + private val newPrivateProperty3 get() = "ContainerImpl.newPrivateProperty3" + private val newPrivateProperty4 = "ContainerImpl.newPrivateProperty4" + + // As far as protected/private members can't be accessed outside of the class hierarchy, and internal can't be accessed + // outside of module, we need special accessors. + fun newProtectedProperty1Access() = newProtectedProperty1 + fun newProtectedProperty2Access() = newProtectedProperty2 + fun newProtectedProperty3Access() = newProtectedProperty3 + fun newProtectedProperty4Access() = newProtectedProperty4 + fun newOpenProtectedProperty1Access() = newOpenProtectedProperty1 + fun newOpenProtectedProperty2Access() = newOpenProtectedProperty2 + fun newOpenProtectedProperty3Access() = newOpenProtectedProperty3 + fun newOpenProtectedProperty4Access() = newOpenProtectedProperty4 + fun newInternalProperty1Access() = newInternalProperty1 + fun newInternalProperty2Access() = newInternalProperty2 + fun newInternalProperty3Access() = newInternalProperty3 + fun newInternalProperty4Access() = newInternalProperty4 + fun newOpenInternalProperty1Access() = newOpenInternalProperty1 + fun newOpenInternalProperty2Access() = newOpenInternalProperty2 + fun newOpenInternalProperty3Access() = newOpenInternalProperty3 + fun newOpenInternalProperty4Access() = newOpenInternalProperty4 + fun newPrivateProperty1Access() = newPrivateProperty1 + fun newPrivateProperty2Access() = newPrivateProperty2 + fun newPrivateProperty3Access() = newPrivateProperty3 + fun newPrivateProperty4Access() = newPrivateProperty4 } diff --git a/compiler/testData/klibABI/changePropertyVisibility/main/m.kt b/compiler/testData/klibABI/changePropertyVisibility/main/m.kt index 3f7c2c4b395..4e8049c79a2 100644 --- a/compiler/testData/klibABI/changePropertyVisibility/main/m.kt +++ b/compiler/testData/klibABI/changePropertyVisibility/main/m.kt @@ -48,4 +48,28 @@ fun box() = abiTest { expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty2") { c.protectedToPrivateOverriddenProperty2Access() } expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty3") { c.protectedToPrivateOverriddenProperty3Access() } expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty4") { c.protectedToPrivateOverriddenProperty4Access() } + expectSuccess("ContainerImpl.newPublicProperty1") { c.newPublicProperty1 } + expectSuccess("ContainerImpl.newPublicProperty2") { c.newPublicProperty2 } + expectSuccess("ContainerImpl.newPublicProperty3") { c.newPublicProperty3 } + expectSuccess("ContainerImpl.newPublicProperty4") { c.newPublicProperty4 } + expectSuccess("ContainerImpl.newProtectedProperty1") { c.newProtectedProperty1Access() } + expectSuccess("ContainerImpl.newProtectedProperty2") { c.newProtectedProperty2Access() } + expectSuccess("ContainerImpl.newProtectedProperty3") { c.newProtectedProperty3Access() } + expectSuccess("ContainerImpl.newProtectedProperty4") { c.newProtectedProperty4Access() } + expectSuccess("ContainerImpl.newOpenProtectedProperty1") { c.newOpenProtectedProperty1Access() } + expectSuccess("ContainerImpl.newOpenProtectedProperty2") { c.newOpenProtectedProperty2Access() } + expectSuccess("ContainerImpl.newOpenProtectedProperty3") { c.newOpenProtectedProperty3Access() } + expectSuccess("ContainerImpl.newOpenProtectedProperty4") { c.newOpenProtectedProperty4Access() } + expectSuccess("ContainerImpl.newInternalProperty1") { c.newInternalProperty1Access() } + expectSuccess("ContainerImpl.newInternalProperty2") { c.newInternalProperty2Access() } + expectSuccess("ContainerImpl.newInternalProperty3") { c.newInternalProperty3Access() } + expectSuccess("ContainerImpl.newInternalProperty4") { c.newInternalProperty4Access() } + expectSuccess("ContainerImpl.newOpenInternalProperty1") { c.newOpenInternalProperty1Access() } + expectSuccess("ContainerImpl.newOpenInternalProperty2") { c.newOpenInternalProperty2Access() } + expectSuccess("ContainerImpl.newOpenInternalProperty3") { c.newOpenInternalProperty3Access() } + expectSuccess("ContainerImpl.newOpenInternalProperty4") { c.newOpenInternalProperty4Access() } + expectSuccess("ContainerImpl.newPrivateProperty1") { c.newPrivateProperty1Access() } + expectSuccess("ContainerImpl.newPrivateProperty2") { c.newPrivateProperty2Access() } + expectSuccess("ContainerImpl.newPrivateProperty3") { c.newPrivateProperty3Access() } + expectSuccess("ContainerImpl.newPrivateProperty4") { c.newPrivateProperty4Access() } }