asserts in JetScopeImpl, add enum entry to proper scope

This commit is contained in:
Stepan Koltsov
2012-03-12 22:54:00 +04:00
parent 88f55100ca
commit 9d66a9a842
3 changed files with 21 additions and 1 deletions
@@ -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);
}
}
}
@@ -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) {
@@ -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);
}