Inaccessible outer class member is now an error

#KT-1174 In Progress
This commit is contained in:
Alexander Udalov
2012-12-11 22:30:25 +04:00
parent e76abcb625
commit 5d92453532
35 changed files with 358 additions and 25 deletions
@@ -1,8 +1,8 @@
class Outer() {
open class InnerBase() {
open inner class InnerBase() {
}
class InnerDerived(): InnerBase() {
inner class InnerDerived(): InnerBase() {
}
public val foo: InnerBase? = InnerDerived()
@@ -4,7 +4,7 @@ import java.io.*
class World() {
public val items: ArrayList<Item> = ArrayList<Item>()
class Item() {
inner class Item() {
{
items.add(this)
}
@@ -1,5 +1,5 @@
class Outer(val foo: StringBuilder) {
class Inner() {
inner class Inner() {
fun len() : Int {
return foo.length()
}
@@ -20,7 +20,7 @@ class C {
return "OK"
}
private class Inner() {
private inner class Inner() {
fun innerFun() {
"".ext()
f()
@@ -17,7 +17,7 @@ class C{
return v
}
private class Inner() {
private inner class Inner() {
fun innerFun() {
v = v + 1
}
@@ -1,10 +1,10 @@
class Outer() {
val s = "xyzzy"
open class InnerBase(public val name: String) {
open inner class InnerBase(public val name: String) {
}
class InnerDerived(): InnerBase(s) {
inner class InnerDerived(): InnerBase(s) {
}
val x = InnerDerived()
@@ -1,5 +1,5 @@
class A {
class B(val a: String = "a", val b: Int = 55, val c: String = "c")
inner class B(val a: String = "a", val b: Int = 55, val c: String = "c")
}
fun box(): String {
@@ -1,5 +1,5 @@
class A {
class B(val a: Double = 1.0, val b: Int = 55, val c: String = "c")
inner class B(val a: Double = 1.0, val b: Int = 55, val c: String = "c")
}
fun box(): String {
@@ -1,6 +1,6 @@
fun box(): String {
val o = object {
class A(val value: String = "OK")
inner class A(val value: String = "OK")
}
return o.A().value
@@ -1,5 +1,5 @@
class A {
public class Foo(val a: Int = 1) {}
public inner class Foo(val a: Int = 1) {}
fun foo() {
Foo()
@@ -1,5 +1,5 @@
private class A {
public class Foo(val a: Int = 1) {}
public inner class Foo(val a: Int = 1) {}
}
// CLASS: A$Foo
@@ -4,14 +4,14 @@ fun box() = IssueState.DEFAULT.ToString() + IssueState.FIXED.ToString()
enum class IssueState {
DEFAULT {
class D {
inner class D {
val k = ToString()
}
}
FIXED {
override fun ToString() = "K"
object D {
inner class D {
val k = ToString()
}
}
@@ -16,7 +16,7 @@ public object SomeObject {
}
public class SomeClass() {
class Inner {
inner class Inner {
val copy = list
}
@@ -6,7 +6,7 @@ open class N() : M() {
override var y = 200
open class C() {
open inner class C() {
fun test5() = y
fun test6() : Int {
super<M>@N.y += 200
@@ -229,7 +229,7 @@ class Outer() {
$b = 1
}
class Inner() {
inner class Inner() {
{
<!VAL_REASSIGNMENT!>a<!>++
b++
@@ -0,0 +1,32 @@
class Outer1 {
class Nested
class C1 { val b = Nested() }
class C2(val b: Any = Nested())
inner class C3 { val b = Nested() }
inner class C4(val b: Any = Nested())
inner class Inner
class C5 { val b = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner()<!> }
class C6(val b: Any = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner()<!>)
inner class C7 { val b = Inner() }
inner class C8(val b: Any = Inner())
}
class Outer2 {
class Nested {
fun foo() = Outer2()
fun bar() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner()<!>
}
inner class Inner {
fun foo() = Outer2()
fun bar() = Nested()
}
fun foo() {
Nested()
Inner()
}
}
@@ -0,0 +1,12 @@
enum class E {
E1 {
override fun foo() = outerFun() + super.outerFun()
}
E2 {
override fun foo() = E1.foo()
}
abstract fun foo(): Int
fun outerFun() = 42
}
@@ -0,0 +1,28 @@
class Outer {
class Nested
inner class Inner
fun Inner.foo() {
Outer()
Nested()
Inner()
}
fun Nested.bar() {
Outer()
Nested()
Inner()
}
fun Outer.baz() {
Outer()
Nested()
Inner()
}
}
fun Outer.foo() {
Outer()
<!UNRESOLVED_REFERENCE!>Nested<!>()
Inner()
}
@@ -0,0 +1,18 @@
class Outer {
fun foo(): Int {
if (outerState > 0) return outerState
class Local {
val localState = outerState
inner class LocalInner {
val o = outerState
val l = localState
}
}
return Local().localState
}
val outerState = 42
}
@@ -0,0 +1,11 @@
class Outer {
class Nested {
fun foo() {
class Local {
val state = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>outerState<!>
}
}
}
val outerState = 42
}
@@ -0,0 +1,17 @@
class Outer {
open class OpenNested
class FinalNested
open inner class OpenInner
class FinalInner
class Nested1 : OpenNested()
class Nested2 : <!FINAL_SUPERTYPE!>FinalNested<!>()
class Nested3 : <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>OpenInner()<!>
class Nested4 : <!FINAL_SUPERTYPE!>FinalInner<!>()
inner class Inner1 : OpenNested()
inner class Inner2 : <!FINAL_SUPERTYPE!>FinalNested<!>()
inner class Inner3 : OpenInner()
inner class Inner4 : <!FINAL_SUPERTYPE!>FinalInner<!>()
}
@@ -0,0 +1,8 @@
open class Outer {
class Nested : Outer() {
fun bar() = foo()
fun baz() = super.foo()
}
fun foo() = 42
}
@@ -0,0 +1,12 @@
open class Outer<T> {
class Nested<U> : Outer<U>() {
fun bar(): U = foo()
fun baz(): U = super.foo()
}
class Nested2 : Outer<String>() {
fun bar(): String = foo()
fun baz(): String = super.foo()
}
fun foo(): T = null!!
}
@@ -0,0 +1,19 @@
class Outer {
fun function() = 42
val property = ""
class Nested {
fun f() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>function()<!>
fun g() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>property<!>
}
inner class Inner {
fun innerFun() = function()
val innerProp = property
inner class InnerInner {
fun f() = innerFun()
fun g() = innerProp
}
}
}
@@ -0,0 +1,34 @@
open class Outer {
private class PrivateNested
private inner class PrivateInner
protected class ProtectedNested
protected inner class ProtectedInner
public class PublicNested
public inner class PublicInner
}
class Derived : Outer() {
fun foo() {
Outer.<!INVISIBLE_MEMBER!>PrivateNested<!>()
super.<!INVISIBLE_MEMBER!>PrivateInner<!>()
Outer.ProtectedNested()
super.ProtectedInner()
Outer.PublicNested()
super.PublicInner()
}
}
fun foo() {
Outer.<!INVISIBLE_MEMBER!>PrivateNested<!>()
Outer().<!INVISIBLE_MEMBER!>PrivateInner<!>()
Outer.<!INVISIBLE_MEMBER!>ProtectedNested<!>()
Outer().<!INVISIBLE_MEMBER!>ProtectedInner<!>()
Outer.PublicNested()
Outer().PublicInner()
}
@@ -19,7 +19,7 @@ val A.foo1 : Int get() = ii
class C {
class D {}
inner class D {}
}
val C.foo : C.D = <!UNRESOLVED_REFERENCE!>D<!>()
@@ -9,7 +9,7 @@ abstract class Foo {
class Bar : Foo() {
protected val i: Int = 1
class Baz {
inner class Baz {
val copy = color // INVISIBLE_MEMBER: Cannot access 'color' in 'Bar'
val j = i
}