From 9d66a9a842853f599d5453a07e0a4540de0e8d2a Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 12 Mar 2012 22:54:00 +0400 Subject: [PATCH] asserts in JetScopeImpl, add enum entry to proper scope --- .../jetbrains/jet/lang/resolve/DescriptorUtils.java | 11 +++++++++++ .../jet/lang/resolve/TypeHierarchyResolver.java | 2 +- .../jet/lang/resolve/scopes/WritableScopeImpl.java | 9 +++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index d4293240231..90009214e2a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -260,4 +260,15 @@ public class DescriptorUtils { } return expectedType != null ? expectedType : TypeUtils.NO_EXPECTED_TYPE; } + + public static boolean isObject(@NotNull ClassifierDescriptor classifier) { + if (classifier instanceof ClassDescriptor) { + ClassDescriptor clazz = (ClassDescriptor) classifier; + return clazz.getKind() == ClassKind.OBJECT || clazz.getKind() == ClassKind.ENUM_ENTRY; + } else if (classifier instanceof TypeParameterDescriptor) { + return false; + } else { + throw new IllegalStateException("unknown classifier: " + classifier); + } + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index 726ddcc1219..5c8e51724b4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -164,7 +164,7 @@ public class TypeHierarchyResolver { (Map) context.getClasses(), mutableClassDescriptor ); - classObjectDescriptor.addClassifierDescriptor(mutableClassDescriptor); + classObjectDescriptor.addObjectDescriptor(mutableClassDescriptor); } private MutableClassDescriptor createClassDescriptorForObject(@NotNull JetClassOrObject declaration, @NotNull NamespaceLike owner, JetScope scope, ClassKind classKind) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeImpl.java index 51be5a52015..bf2c3d0d5fd 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeImpl.java @@ -23,6 +23,7 @@ import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.util.CommonSuppliers; @@ -308,12 +309,20 @@ public class WritableScopeImpl extends WritableScopeWithImports { public void addClassifierDescriptor(@NotNull ClassifierDescriptor classDescriptor) { checkMayWrite(); + if (DescriptorUtils.isObject(classDescriptor)) { + throw new IllegalStateException("must not be object: " + classDescriptor); + } + addClassifierAlias(classDescriptor.getName(), classDescriptor); } @Override public void addObjectDescriptor(@NotNull ClassDescriptor objectDescriptor) { checkMayWrite(); + + if (!DescriptorUtils.isObject(objectDescriptor)) { + throw new IllegalStateException("must be object: " + objectDescriptor); + } getObjectDescriptorsMap().put(objectDescriptor.getName(), objectDescriptor); }