Allow resolve class declarations in class objects

Use INACCESSIBLE_OUTER_CLASS_EXPRESSION error for marking already resolved elements

 #KT-3261 Fixed
This commit is contained in:
Nikolay Krasko
2013-06-04 16:18:29 +04:00
parent a04ecb185e
commit 37cd7eb1ba
24 changed files with 239 additions and 51 deletions
@@ -0,0 +1,11 @@
class Test {
[`InnerAnnotation`InnerAnnotation]
class object : StaticClass(), <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!><!MANY_CLASSES_IN_SUPERTYPE_LIST!>InnerClass<!>()<!> {
}
annotation class InnerAnnotation
open class StaticClass
open inner class InnerClass
}
@@ -0,0 +1,11 @@
class Test {
class object {
fun test(<!UNUSED_PARAMETER!>t<!>: TestInner) = 42
}
class TestStatic {
fun test(<!UNUSED_PARAMETER!>t<!>: TestInner) = 42
}
inner class TestInner
}
@@ -0,0 +1,26 @@
open class SomeClass<T>
class TestSome<P> {
class object : SomeClass<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>P<!>>() {
}
}
class Test {
class object : <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> {
val a = object: <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> {
}
fun more(): InnerClass {
val b = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!>
val <!UNUSED_VARIABLE!>testVal<!> = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>inClass<!>
<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>foo()<!>
return b
}
}
val inClass = 12
fun foo() {}
open inner class InnerClass
}
@@ -0,0 +1,27 @@
open class SomeClass<T>
class TestSome<P> {
object Some : SomeClass<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>P<!>>() {
}
}
class Test {
object Some : <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> {
val a = object: <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> {
}
fun more(): InnerClass {
val b = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!>
val <!UNUSED_VARIABLE!>testVal<!> = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>inClass<!>
<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>foo()<!>
return b
}
}
val inClass = 12
fun foo() {
}
open inner class InnerClass
}
@@ -0,0 +1,9 @@
open class PackageTest
class MoreTest() {
class object: PackageTest() {
}
object Some: PackageTest()
}
@@ -0,0 +1,9 @@
class Test {
[ClassObjectAnnotation]
[NestedAnnotation]
class object {
annotation class ClassObjectAnnotation
}
annotation class NestedAnnotation
}