KT-499 allow class object in static inner classes

like this:

===
class A {
    class object {
        class B {
            class object { }
        }
    }
}
===
This commit is contained in:
Stepan Koltsov
2011-11-10 12:59:29 +04:00
parent a28716af1d
commit abec6933cf
2 changed files with 25 additions and 1 deletions
@@ -61,7 +61,7 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
@Override
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
if (this.classObjectDescriptor != null) return ClassObjectStatus.DUPLICATE;
if (!(this.getContainingDeclaration() instanceof NamespaceDescriptor)) {
if (!isStatic(this.getContainingDeclaration())) {
return ClassObjectStatus.NOT_ALLOWED;
}
assert classObjectDescriptor.getKind() == ClassKind.OBJECT;
@@ -69,6 +69,17 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
return ClassObjectStatus.OK;
}
private static boolean isStatic(DeclarationDescriptor declarationDescriptor) {
if (declarationDescriptor instanceof NamespaceDescriptor) {
return true;
} else if (declarationDescriptor instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) declarationDescriptor;
return classDescriptor.getKind() == ClassKind.OBJECT || classDescriptor.getKind() == ClassKind.ENUM_CLASS;
} else {
return false;
}
}
@Nullable
public MutableClassDescriptor getClassObjectDescriptor() {
return classObjectDescriptor;
@@ -5,3 +5,16 @@ class A {
<!CLASS_OBJECT_NOT_ALLOWED!>class object { }<!>
}
}
class B {
class object {
class B {
class object {
class C {
class object { }
}
}
}
}
}