KT-499 allow class object in static inner classes
like this:
===
class A {
class object {
class B {
class object { }
}
}
}
===
This commit is contained in:
+12
-1
@@ -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 { }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user