From 099725da7f073852824c882e184103665b50caa0 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 9 Nov 2011 16:21:19 +0400 Subject: [PATCH] KT-449 class object in inner class must be an error === class A { class B { class object { } } } === --- .../jet/lang/descriptors/MutableClassDescriptor.java | 3 +++ .../checkerWithErrorTypes/quick/InnerClassClassObject.jet | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 compiler/testData/checkerWithErrorTypes/quick/InnerClassClassObject.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java index d9a993b4155..3e500172016 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java @@ -61,6 +61,9 @@ 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)) { + return ClassObjectStatus.NOT_ALLOWED; + } assert classObjectDescriptor.getKind() == ClassKind.OBJECT; this.classObjectDescriptor = classObjectDescriptor; return ClassObjectStatus.OK; diff --git a/compiler/testData/checkerWithErrorTypes/quick/InnerClassClassObject.jet b/compiler/testData/checkerWithErrorTypes/quick/InnerClassClassObject.jet new file mode 100644 index 00000000000..0d8f5da30f2 --- /dev/null +++ b/compiler/testData/checkerWithErrorTypes/quick/InnerClassClassObject.jet @@ -0,0 +1,7 @@ +// http://youtrack.jetbrains.net/issue/KT-449 + +class A { + class B { + class object { } + } +}