Calls to non-@JvmStatic protected members of companion objects from subclasses are now errors (unsupported yet)

This commit is contained in:
Mikhail Glukhikh
2015-11-25 20:21:31 +03:00
parent e39ca63bcc
commit ea4f167091
11 changed files with 269 additions and 2 deletions
@@ -0,0 +1,87 @@
open class VeryBase {
protected fun baz() {}
}
open class Base {
protected fun foo() {
bar() // Ok
baz() // Ok
}
inner class Inner {
fun fromInner() {
foo() // Ok
bar() // Ok
gav() // Ok
baz() // Ok
}
}
class NestedDerived : Base() {
fun fromNestedDerived() {
foo() // Ok
bar() // Ok
gav() // Ok
baz() // Ok
}
}
companion object : VeryBase() {
protected fun bar() {}
@JvmStatic protected fun gav() {}
class Nested {
fun fromNested() {
bar() // Ok
gav() // Ok
}
}
}
}
class Derived : Base() {
fun test() {
foo() // Ok
gav() // Ok
<!SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC!>bar()<!>
<!SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC!>baz()<!>
}
inner class DerivedInner {
fun fromDerivedInner() {
foo() // Ok
gav() // Ok
<!SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC!>bar()<!>
<!SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC!>baz()<!>
}
}
companion object {
fun test2() {
gav() // Ok
<!SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC!>bar()<!>
<!SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC!>baz()<!>
}
}
}
class Other {
fun test(base: Base, derived: Derived) {
base.<!INVISIBLE_MEMBER!>foo<!>()
base.<!UNRESOLVED_REFERENCE!>gav<!>()
base.<!UNRESOLVED_REFERENCE!>bar<!>()
derived.<!INVISIBLE_MEMBER!>foo<!>()
derived.<!UNRESOLVED_REFERENCE!>gav<!>()
derived.<!UNRESOLVED_REFERENCE!>bar<!>()
}
}
fun top(base: Base, derived: Derived) {
base.<!INVISIBLE_MEMBER!>foo<!>()
base.<!UNRESOLVED_REFERENCE!>bar<!>()
base.<!UNRESOLVED_REFERENCE!>gav<!>()
derived.<!INVISIBLE_MEMBER!>foo<!>()
derived.<!UNRESOLVED_REFERENCE!>bar<!>()
derived.<!UNRESOLVED_REFERENCE!>gav<!>()
}