150 lines
2.7 KiB
Kotlin
Vendored
150 lines
2.7 KiB
Kotlin
Vendored
// !CHECK_TYPE
|
|
/*
|
|
* UNEXPECTED BEHAVIOUR
|
|
* ISSUES: KT-37120
|
|
*/
|
|
|
|
val case1 = object : A {
|
|
inner class Child(property: B) : Base(property) {
|
|
fun Base.zoo() {
|
|
val x = property
|
|
}
|
|
|
|
fun foo() {
|
|
baseFun()
|
|
val x = property
|
|
zoo()
|
|
hoo()
|
|
}
|
|
}
|
|
fun Child.voo() {
|
|
val x = property
|
|
}
|
|
|
|
fun Base.hoo() {
|
|
val x = property
|
|
}
|
|
|
|
open inner class Base(/*protected*/ val property: B) {
|
|
fun baseFun() {}
|
|
}
|
|
|
|
fun caseForBase() {
|
|
val base = Base(B())
|
|
/*member of Base*/
|
|
base.baseFun()
|
|
base.property
|
|
/*extensions*/
|
|
base.hoo()
|
|
}
|
|
|
|
fun caseForChild() {
|
|
val child = Child(B())
|
|
/*member of Base*/
|
|
child.baseFun()
|
|
child.property
|
|
/*member of Child*/
|
|
child.foo()
|
|
/*extensions*/
|
|
child.hoo()
|
|
child.voo()
|
|
}
|
|
}
|
|
|
|
|
|
class Case2() {
|
|
val x = object : Base(B()) {
|
|
fun Base.zoo() {
|
|
val x = property
|
|
|
|
}
|
|
|
|
fun foo() {
|
|
baseFun()
|
|
val x = property
|
|
zoo()
|
|
hoo()
|
|
}
|
|
}
|
|
|
|
|
|
fun Base.hoo() {
|
|
val x = property
|
|
}
|
|
|
|
open inner class Base(/*protected*/ val property: B) {
|
|
fun baseFun() {}
|
|
}
|
|
|
|
fun caseForBase() {
|
|
val base = Base(B())
|
|
/*member of Base*/
|
|
base.baseFun()
|
|
base.property
|
|
/*extensions*/
|
|
base.hoo()
|
|
}
|
|
|
|
fun caseForChild() {
|
|
val child = x
|
|
/*member of Base*/
|
|
child.baseFun()
|
|
child.property
|
|
/*extensions*/
|
|
child.hoo()
|
|
}
|
|
}
|
|
|
|
|
|
class Case3() {
|
|
val x = object : A {
|
|
inner class Child(property: B) : Base(property) {
|
|
fun Base.zoo() {
|
|
val x = property
|
|
}
|
|
|
|
fun foo() {
|
|
baseFun()
|
|
val x = property
|
|
zoo()
|
|
hoo()
|
|
}
|
|
}
|
|
|
|
fun Child.voo() {
|
|
val x = property
|
|
}
|
|
fun Base.hoo() {
|
|
val x = property
|
|
}
|
|
|
|
open inner class Base(/*protected*/ val property: B) {
|
|
fun baseFun() {}
|
|
}
|
|
|
|
fun caseForBase() {
|
|
val base = Base(B())
|
|
/*member of Base*/
|
|
base.baseFun()
|
|
base.property
|
|
/*extensions*/
|
|
base.hoo()
|
|
}
|
|
|
|
fun caseForChild() {
|
|
val child = Child(B())
|
|
/*member of Base*/
|
|
child.baseFun()
|
|
child.property
|
|
/*member of Child*/
|
|
child.foo()
|
|
/*extensions*/
|
|
child.hoo()
|
|
child.voo()
|
|
}
|
|
}
|
|
}
|
|
|
|
interface A {}
|
|
class B() {}
|