[IR][tests] Add cases to visibility-related tests where a visibility of an open callable in super class is narrowed

^KT-53608
This commit is contained in:
Dmitriy Dolovov
2022-09-15 10:43:23 +02:00
parent 15cf2bab98
commit ec4b85b111
8 changed files with 153 additions and 0 deletions
@@ -9,4 +9,12 @@ open class Container {
protected fun protectedToPublicFunction() = "Container.protectedToPublicFunction.v1"
protected fun protectedToInternalFunction() = "Container.protectedToInternalFunction.v1"
protected fun protectedToPrivateFunction() = "Container.protectedToPrivateFunction.v1"
public open fun publicToProtectedOverriddenFunction() = "Container.publicToProtectedOverriddenFunction.v1"
public open fun publicToInternalOverriddenFunction() = "Container.publicToInternalOverriddenFunction.v1"
public open fun publicToPrivateOverriddenFunction() = "Container.publicToPrivateOverriddenFunction.v1"
protected open fun protectedToPublicOverriddenFunction() = "Container.protectedToPublicOverriddenFunction.v1"
protected open fun protectedToInternalOverriddenFunction() = "Container.protectedToInternalOverriddenFunction.v1"
protected open fun protectedToPrivateOverriddenFunction() = "Container.protectedToPrivateOverriddenFunction.v1"
}
@@ -9,4 +9,12 @@ open class Container {
public fun protectedToPublicFunction() = "Container.protectedToPublicFunction.v2"
internal fun protectedToInternalFunction() = "Container.protectedToInternalFunction.v2"
private fun protectedToPrivateFunction() = "Container.protectedToPrivateFunction.v2"
protected open fun publicToProtectedOverriddenFunction() = "Container.publicToProtectedOverriddenFunction.v2"
internal open fun publicToInternalOverriddenFunction() = "Container.publicToInternalOverriddenFunction.v2"
private /*open*/ fun publicToPrivateOverriddenFunction() = "Container.publicToPrivateOverriddenFunction.v2"
public open fun protectedToPublicOverriddenFunction() = "Container.protectedToPublicOverriddenFunction.v2"
internal open fun protectedToInternalOverriddenFunction() = "Container.protectedToInternalOverriddenFunction.v2"
private /*open*/ fun protectedToPrivateOverriddenFunction() = "Container.protectedToPrivateOverriddenFunction.v2"
}
@@ -8,4 +8,18 @@ class ContainerImpl : Container() {
fun protectedToPublicFunctionAccess() = protectedToPublicFunction()
fun protectedToInternalFunctionAccess() = protectedToInternalFunction()
fun protectedToPrivateFunctionAccess() = protectedToPrivateFunction()
// Overridden functions with changed visibility:
override fun publicToProtectedOverriddenFunction() = "ContainerImpl.publicToProtectedOverriddenFunction"
override fun publicToInternalOverriddenFunction() = "ContainerImpl.publicToInternalOverriddenFunction"
override fun publicToPrivateOverriddenFunction() = "ContainerImpl.publicToPrivateOverriddenFunction"
override fun protectedToPublicOverriddenFunction() = "ContainerImpl.protectedToPublicOverriddenFunction"
override fun protectedToInternalOverriddenFunction() = "ContainerImpl.protectedToInternalOverriddenFunction"
override fun protectedToPrivateOverriddenFunction() = "ContainerImpl.protectedToPrivateOverriddenFunction"
// As far as protected members can't be accessed outside of the class hierarchy, we need special accessors.
fun protectedToPublicOverriddenFunctionAccess() = protectedToPublicOverriddenFunction()
fun protectedToInternalOverriddenFunctionAccess() = protectedToInternalOverriddenFunction()
fun protectedToPrivateOverriddenFunctionAccess() = protectedToPrivateOverriddenFunction()
}
@@ -13,4 +13,10 @@ fun box() = abiTest {
expectSuccess("Container.protectedToPublicFunction.v2") { c.protectedToPublicFunctionAccess() }
expectFailure(prefixed("function protectedToInternalFunction can not be called")) { c.protectedToInternalFunctionAccess() }
expectFailure(prefixed("function protectedToPrivateFunction can not be called")) { c.protectedToPrivateFunctionAccess() }
expectSuccess("ContainerImpl.publicToProtectedOverriddenFunction") { c.publicToProtectedOverriddenFunction() }
expectSuccess("ContainerImpl.publicToInternalOverriddenFunction") { c.publicToInternalOverriddenFunction() }
expectSuccess("ContainerImpl.publicToPrivateOverriddenFunction") { c.publicToPrivateOverriddenFunction() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenFunction") { c.protectedToPublicOverriddenFunctionAccess() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenFunction") { c.protectedToInternalOverriddenFunctionAccess() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenFunction") { c.protectedToPrivateOverriddenFunctionAccess() }
}