| // 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() {} |