[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() }
}
@@ -17,4 +17,30 @@ open class Container {
protected val protectedToInternalProperty2 get() = "Container.protectedToInternalProperty2.v1"
protected val protectedToPrivateProperty1 = "Container.protectedToPrivateProperty1.v1"
protected val protectedToPrivateProperty2 get() = "Container.protectedToPrivateProperty2.v1"
public open val publicToProtectedOverriddenProperty1 = "Container.publicToProtectedOverriddenProperty1.v1"
public open val publicToProtectedOverriddenProperty2 get() = "Container.publicToProtectedOverriddenProperty2.v1"
public open val publicToProtectedOverriddenProperty3 = "Container.publicToProtectedOverriddenProperty3.v1"
public open val publicToProtectedOverriddenProperty4 get() = "Container.publicToProtectedOverriddenProperty4.v1"
public open val publicToInternalOverriddenProperty1 = "Container.publicToInternalOverriddenProperty1.v1"
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 publicToPrivateOverriddenProperty1 = "Container.publicToPrivateOverriddenProperty1.v1"
public open val publicToPrivateOverriddenProperty2 get() = "Container.publicToPrivateOverriddenProperty2.v1"
public open val publicToPrivateOverriddenProperty3 = "Container.publicToPrivateOverriddenProperty3.v1"
public open val publicToPrivateOverriddenProperty4 get() = "Container.publicToPrivateOverriddenProperty4.v1"
protected open val protectedToPublicOverriddenProperty1 = "Container.protectedToPublicOverriddenProperty1.v1"
protected open val protectedToPublicOverriddenProperty2 get() = "Container.protectedToPublicOverriddenProperty2.v1"
protected open val protectedToPublicOverriddenProperty3 = "Container.protectedToPublicOverriddenProperty3.v1"
protected open val protectedToPublicOverriddenProperty4 get() = "Container.protectedToPublicOverriddenProperty4.v1"
protected open val protectedToInternalOverriddenProperty1 = "Container.protectedToInternalOverriddenProperty1.v1"
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 protectedToPrivateOverriddenProperty1 = "Container.protectedToPrivateOverriddenProperty1.v1"
protected open val protectedToPrivateOverriddenProperty2 get() = "Container.protectedToPrivateOverriddenProperty2.v1"
protected open val protectedToPrivateOverriddenProperty3 = "Container.protectedToPrivateOverriddenProperty3.v1"
protected open val protectedToPrivateOverriddenProperty4 get() = "Container.protectedToPrivateOverriddenProperty4.v1"
}
@@ -17,4 +17,30 @@ open class Container {
internal val protectedToInternalProperty2 get() = "Container.protectedToInternalProperty2.v2"
private val protectedToPrivateProperty1 = "Container.protectedToPrivateProperty1.v2"
private val protectedToPrivateProperty2 get() = "Container.protectedToPrivateProperty2.v2"
protected open val publicToProtectedOverriddenProperty1 = "Container.publicToProtectedOverriddenProperty1.v2"
protected open val publicToProtectedOverriddenProperty2 get() = "Container.publicToProtectedOverriddenProperty2.v2"
protected open val publicToProtectedOverriddenProperty3 get() = "Container.publicToProtectedOverriddenProperty3.v2"
protected open val publicToProtectedOverriddenProperty4 = "Container.publicToProtectedOverriddenProperty4.v2"
internal open val publicToInternalOverriddenProperty1 = "Container.publicToInternalOverriddenProperty1.v2"
internal open val publicToInternalOverriddenProperty2 get() = "Container.publicToInternalOverriddenProperty2.v2"
internal open val publicToInternalOverriddenProperty3 get() = "Container.publicToInternalOverriddenProperty3.v2"
internal open val publicToInternalOverriddenProperty4 = "Container.publicToInternalOverriddenProperty4.v2"
private /*open*/ val publicToPrivateOverriddenProperty1 = "Container.publicToPrivateOverriddenProperty1.v2"
private /*open*/ val publicToPrivateOverriddenProperty2 get() = "Container.publicToPrivateOverriddenProperty2.v2"
private /*open*/ val publicToPrivateOverriddenProperty3 get() = "Container.publicToPrivateOverriddenProperty3.v2"
private /*open*/ val publicToPrivateOverriddenProperty4 = "Container.publicToPrivateOverriddenProperty4.v2"
public open val protectedToPublicOverriddenProperty1 = "Container.protectedToPublicOverriddenProperty1.v2"
public open val protectedToPublicOverriddenProperty2 get() = "Container.protectedToPublicOverriddenProperty2.v2"
public open val protectedToPublicOverriddenProperty3 get() = "Container.protectedToPublicOverriddenProperty3.v2"
public open val protectedToPublicOverriddenProperty4 = "Container.protectedToPublicOverriddenProperty4.v2"
internal open val protectedToInternalOverriddenProperty1 = "Container.protectedToInternalOverriddenProperty1.v2"
internal open val protectedToInternalOverriddenProperty2 get() = "Container.protectedToInternalOverriddenProperty2.v2"
internal open val protectedToInternalOverriddenProperty3 get() = "Container.protectedToInternalOverriddenProperty3.v2"
internal open val protectedToInternalOverriddenProperty4 = "Container.protectedToInternalOverriddenProperty4.v2"
private /*open*/ val protectedToPrivateOverriddenProperty1 = "Container.protectedToPrivateOverriddenProperty1.v2"
private /*open*/ val protectedToPrivateOverriddenProperty2 get() = "Container.protectedToPrivateOverriddenProperty2.v2"
private /*open*/ val protectedToPrivateOverriddenProperty3 get() = "Container.protectedToPrivateOverriddenProperty3.v2"
private /*open*/ val protectedToPrivateOverriddenProperty4 = "Container.protectedToPrivateOverriddenProperty4.v2"
}
@@ -14,4 +14,45 @@ class ContainerImpl : Container() {
fun protectedToInternalProperty2Access() = protectedToInternalProperty2
fun protectedToPrivateProperty1Access() = protectedToPrivateProperty1
fun protectedToPrivateProperty2Access() = protectedToPrivateProperty2
// Overridden properties with changed visibility:
override val publicToProtectedOverriddenProperty1 = "ContainerImpl.publicToProtectedOverriddenProperty1"
override val publicToProtectedOverriddenProperty2 get() = "ContainerImpl.publicToProtectedOverriddenProperty2"
override val publicToProtectedOverriddenProperty3 get() = "ContainerImpl.publicToProtectedOverriddenProperty3"
override val publicToProtectedOverriddenProperty4 = "ContainerImpl.publicToProtectedOverriddenProperty4"
override val publicToInternalOverriddenProperty1 = "ContainerImpl.publicToInternalOverriddenProperty1"
override val publicToInternalOverriddenProperty2 get() = "ContainerImpl.publicToInternalOverriddenProperty2"
override val publicToInternalOverriddenProperty3 get() = "ContainerImpl.publicToInternalOverriddenProperty3"
override val publicToInternalOverriddenProperty4 = "ContainerImpl.publicToInternalOverriddenProperty4"
override val publicToPrivateOverriddenProperty1 = "ContainerImpl.publicToPrivateOverriddenProperty1"
override val publicToPrivateOverriddenProperty2 get() = "ContainerImpl.publicToPrivateOverriddenProperty2"
override val publicToPrivateOverriddenProperty3 get() = "ContainerImpl.publicToPrivateOverriddenProperty3"
override val publicToPrivateOverriddenProperty4 = "ContainerImpl.publicToPrivateOverriddenProperty4"
override val protectedToPublicOverriddenProperty1 = "ContainerImpl.protectedToPublicOverriddenProperty1"
override val protectedToPublicOverriddenProperty2 get() = "ContainerImpl.protectedToPublicOverriddenProperty2"
override val protectedToPublicOverriddenProperty3 get() = "ContainerImpl.protectedToPublicOverriddenProperty3"
override val protectedToPublicOverriddenProperty4 = "ContainerImpl.protectedToPublicOverriddenProperty4"
override val protectedToInternalOverriddenProperty1 = "ContainerImpl.protectedToInternalOverriddenProperty1"
override val protectedToInternalOverriddenProperty2 get() = "ContainerImpl.protectedToInternalOverriddenProperty2"
override val protectedToInternalOverriddenProperty3 get() = "ContainerImpl.protectedToInternalOverriddenProperty3"
override val protectedToInternalOverriddenProperty4 = "ContainerImpl.protectedToInternalOverriddenProperty4"
override val protectedToPrivateOverriddenProperty1 = "ContainerImpl.protectedToPrivateOverriddenProperty1"
override val protectedToPrivateOverriddenProperty2 get() = "ContainerImpl.protectedToPrivateOverriddenProperty2"
override val protectedToPrivateOverriddenProperty3 get() = "ContainerImpl.protectedToPrivateOverriddenProperty3"
override val protectedToPrivateOverriddenProperty4 = "ContainerImpl.protectedToPrivateOverriddenProperty4"
// As far as protected members can't be accessed outside of the class hierarchy, we need special accessors.
fun protectedToPublicOverriddenProperty1Access() = protectedToPublicOverriddenProperty1
fun protectedToPublicOverriddenProperty2Access() = protectedToPublicOverriddenProperty2
fun protectedToPublicOverriddenProperty3Access() = protectedToPublicOverriddenProperty3
fun protectedToPublicOverriddenProperty4Access() = protectedToPublicOverriddenProperty4
fun protectedToInternalOverriddenProperty1Access() = protectedToInternalOverriddenProperty1
fun protectedToInternalOverriddenProperty2Access() = protectedToInternalOverriddenProperty2
fun protectedToInternalOverriddenProperty3Access() = protectedToInternalOverriddenProperty3
fun protectedToInternalOverriddenProperty4Access() = protectedToInternalOverriddenProperty4
fun protectedToPrivateOverriddenProperty1Access() = protectedToPrivateOverriddenProperty1
fun protectedToPrivateOverriddenProperty2Access() = protectedToPrivateOverriddenProperty2
fun protectedToPrivateOverriddenProperty3Access() = protectedToPrivateOverriddenProperty3
fun protectedToPrivateOverriddenProperty4Access() = protectedToPrivateOverriddenProperty4
}
@@ -24,4 +24,28 @@ fun box() = abiTest {
expectFailure(prefixed("property accessor protectedToInternalProperty2.<get-protectedToInternalProperty2> can not be called")) { c.protectedToInternalProperty2Access() }
expectFailure(prefixed("property accessor protectedToPrivateProperty1.<get-protectedToPrivateProperty1> can not be called")) { c.protectedToPrivateProperty1Access() }
expectFailure(prefixed("property accessor protectedToPrivateProperty2.<get-protectedToPrivateProperty2> can not be called")) { c.protectedToPrivateProperty2Access() }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty1") { c.publicToProtectedOverriddenProperty1 }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty2") { c.publicToProtectedOverriddenProperty2 }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty3") { c.publicToProtectedOverriddenProperty3 }
expectSuccess("ContainerImpl.publicToProtectedOverriddenProperty4") { c.publicToProtectedOverriddenProperty4 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty1") { c.publicToInternalOverriddenProperty1 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty2") { c.publicToInternalOverriddenProperty2 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty3") { c.publicToInternalOverriddenProperty3 }
expectSuccess("ContainerImpl.publicToInternalOverriddenProperty4") { c.publicToInternalOverriddenProperty4 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty1") { c.publicToPrivateOverriddenProperty1 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty2") { c.publicToPrivateOverriddenProperty2 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty3") { c.publicToPrivateOverriddenProperty3 }
expectSuccess("ContainerImpl.publicToPrivateOverriddenProperty4") { c.publicToPrivateOverriddenProperty4 }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty1") { c.protectedToPublicOverriddenProperty1Access() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty2") { c.protectedToPublicOverriddenProperty2Access() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty3") { c.protectedToPublicOverriddenProperty3Access() }
expectSuccess("ContainerImpl.protectedToPublicOverriddenProperty4") { c.protectedToPublicOverriddenProperty4Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty1") { c.protectedToInternalOverriddenProperty1Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty2") { c.protectedToInternalOverriddenProperty2Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty3") { c.protectedToInternalOverriddenProperty3Access() }
expectSuccess("ContainerImpl.protectedToInternalOverriddenProperty4") { c.protectedToInternalOverriddenProperty4Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty1") { c.protectedToPrivateOverriddenProperty1Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty2") { c.protectedToPrivateOverriddenProperty2Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty3") { c.protectedToPrivateOverriddenProperty3Access() }
expectSuccess("ContainerImpl.protectedToPrivateOverriddenProperty4") { c.protectedToPrivateOverriddenProperty4Access() }
}