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
|
@Override
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
|
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
|
||||||
if (this.classObjectDescriptor != null) return ClassObjectStatus.DUPLICATE;
|
if (this.classObjectDescriptor != null) return ClassObjectStatus.DUPLICATE;
|
||||||
if (!(this.getContainingDeclaration() instanceof NamespaceDescriptor)) {
|
if (!isStatic(this.getContainingDeclaration())) {
|
||||||
return ClassObjectStatus.NOT_ALLOWED;
|
return ClassObjectStatus.NOT_ALLOWED;
|
||||||
}
|
}
|
||||||
assert classObjectDescriptor.getKind() == ClassKind.OBJECT;
|
assert classObjectDescriptor.getKind() == ClassKind.OBJECT;
|
||||||
@@ -69,6 +69,17 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
|
|||||||
return ClassObjectStatus.OK;
|
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
|
@Nullable
|
||||||
public MutableClassDescriptor getClassObjectDescriptor() {
|
public MutableClassDescriptor getClassObjectDescriptor() {
|
||||||
return classObjectDescriptor;
|
return classObjectDescriptor;
|
||||||
|
|||||||
@@ -5,3 +5,16 @@ class A {
|
|||||||
<!CLASS_OBJECT_NOT_ALLOWED!>class object { }<!>
|
<!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