Add test on actual with more permissive visibility

Currently the behaviour is undesired, see KT-19664. The next commit
fixes it.
This commit is contained in:
Dmitry Savvinov
2019-01-18 17:58:57 +03:00
parent a122cba862
commit 0338753c11
6 changed files with 140 additions and 0 deletions
@@ -0,0 +1,37 @@
// !LANGUAGE: +MultiPlatformProjects
// !DIAGNOSTICS: -UNUSED_PARAMETER
// MODULE: m1-common
// FILE: common.kt
expect open class Container {
fun publicFun()
internal fun internalFun1()
internal fun internalFun2()
internal fun internalFun3()
protected fun protectedFun1()
protected fun protectedFun2()
protected fun protectedFun3()
open internal fun openInternalFun()
}
// MODULE: m2-jvm(m1-common)
// FILE: jvm.kt
actual open class Container {
actual fun publicFun() {} // OK: public -> public
actual fun <!ACTUAL_WITHOUT_EXPECT!>internalFun1<!>() {} // OK: internal -> public
actual internal fun internalFun2() {} // OK: internal -> internal
actual fun <!ACTUAL_WITHOUT_EXPECT!>protectedFun1<!>() {} // OK: protected -> public
actual protected fun protectedFun2() {} // OK: protected -> protected
actual <!ACTUAL_WITHOUT_EXPECT!>internal<!> fun protectedFun3() {} // BAD: protected -> internal
actual <!ACTUAL_WITHOUT_EXPECT!>protected<!> fun internalFun3() {} // BAD: internal -> protected
actual open fun <!ACTUAL_WITHOUT_EXPECT!>openInternalFun<!>() {} // BAD: internal+open -> public
}
@@ -0,0 +1,35 @@
// -- Module: <m1-common> --
package
public open expect class Container {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
internal final expect fun internalFun1(): kotlin.Unit
internal final expect fun internalFun2(): kotlin.Unit
internal final expect fun internalFun3(): kotlin.Unit
internal open expect fun openInternalFun(): kotlin.Unit
protected final expect fun protectedFun1(): kotlin.Unit
protected final expect fun protectedFun2(): kotlin.Unit
protected final expect fun protectedFun3(): kotlin.Unit
public final expect fun publicFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
// -- Module: <m2-jvm> --
package
public open actual class Container {
public constructor Container()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final actual fun internalFun1(): kotlin.Unit
internal final actual fun internalFun2(): kotlin.Unit
protected final actual fun internalFun3(): kotlin.Unit
public open actual fun openInternalFun(): kotlin.Unit
public final actual fun protectedFun1(): kotlin.Unit
protected final actual fun protectedFun2(): kotlin.Unit
internal final actual fun protectedFun3(): kotlin.Unit
public final actual fun publicFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,22 @@
// !LANGUAGE: +MultiPlatformProjects
// !DIAGNOSTICS: -UNUSED_PARAMETER
// MODULE: m1-common
// FILE: common.kt
expect open class Container {
internal fun internalFun()
}
// MODULE: m2-jvm(m1-common)
// FILE: foo/Foo.java
package foo;
public class Foo {
public final void internalFun() {} // OK: internal -> public
}
// FILE: jvm.kt
actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Container<!> = foo.Foo
@@ -0,0 +1,26 @@
// -- Module: <m1-common> --
package
public open expect class Container {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
internal final expect fun internalFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
// -- Module: <m2-jvm> --
package
public actual typealias Container = foo.Foo
package foo {
public open class Foo {
public constructor Foo()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun internalFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -13419,6 +13419,16 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/modalityCheckForExplicitAndImplicitOverride.kt");
}
@TestMetadata("morePermissiveVisibilityOnActual.kt")
public void testMorePermissiveVisibilityOnActual() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/morePermissiveVisibilityOnActual.kt");
}
@TestMetadata("morePermissiveVisibilityOnActualViaTypeAlias.kt")
public void testMorePermissiveVisibilityOnActualViaTypeAlias() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/morePermissiveVisibilityOnActualViaTypeAlias.kt");
}
@TestMetadata("nestedClasses.kt")
public void testNestedClasses() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClasses.kt");
@@ -13419,6 +13419,16 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/modalityCheckForExplicitAndImplicitOverride.kt");
}
@TestMetadata("morePermissiveVisibilityOnActual.kt")
public void testMorePermissiveVisibilityOnActual() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/morePermissiveVisibilityOnActual.kt");
}
@TestMetadata("morePermissiveVisibilityOnActualViaTypeAlias.kt")
public void testMorePermissiveVisibilityOnActualViaTypeAlias() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/morePermissiveVisibilityOnActualViaTypeAlias.kt");
}
@TestMetadata("nestedClasses.kt")
public void testNestedClasses() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClasses.kt");