diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java index da0994ff5d9..7cd038a7ae5 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java @@ -16,7 +16,6 @@ package org.jetbrains.jet.lang.resolve.java.resolver; -import com.google.common.collect.Lists; import com.intellij.psi.*; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; @@ -24,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.constants.*; import org.jetbrains.jet.lang.resolve.constants.StringValue; import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; @@ -31,7 +31,6 @@ import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import javax.inject.Inject; @@ -142,16 +141,9 @@ public final class JavaCompileTimeConstResolver { return null; } - JetScope scope; ClassDescriptor classDescriptor = classResolver.resolveClass(new FqName(fqName), INCLUDE_KOTLIN_SOURCES, taskList); - if (classDescriptor == null) { - return null; - } - ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor(); - if (classObjectDescriptor == null) { - return null; - } - scope = classObjectDescriptor.getMemberScope(Lists.newArrayList()); + if (classDescriptor == null) return null; + JetScope scope = DescriptorUtils.getEnumEntriesScope(classDescriptor); Name identifier = Name.identifier(((PsiEnumConstant) resolveElement).getName()); Collection properties = scope.getProperties(identifier); diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java index 1f36f81eac3..d55958c9faa 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.renderer.DescriptorRenderer; import java.util.*; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getEnumEntriesScope; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isTopLevelOrInnerClass; public class DescriptorSerializer { @@ -127,9 +128,7 @@ public class DescriptorSerializer { } if (classDescriptor.getKind() == ClassKind.ENUM_CLASS) { - ClassDescriptor classObject = classDescriptor.getClassObjectDescriptor(); - assert classObject != null : "Enum class object shouldn't be null: " + classDescriptor; - for (ClassDescriptor descriptor : classObject.getDefaultType().getMemberScope().getObjectDescriptors()) { + for (ClassDescriptor descriptor : getEnumEntriesScope(classDescriptor).getObjectDescriptors()) { if (descriptor.getKind() == ClassKind.ENUM_ENTRY) { builder.addEnumEntry(nameTable.getSimpleNameIndex(descriptor.getName())); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java index 2cc4d0ae3a3..f929ea194fb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java @@ -18,16 +18,18 @@ package org.jetbrains.jet.lang.cfg; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.ClassKind; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptorForObject; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.TypeProjection; import java.util.Collection; -import java.util.Collections; + +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getEnumEntriesScope; public final class WhenChecker { private WhenChecker() { @@ -42,10 +44,7 @@ public final class WhenChecker { if (!(declarationDescriptor instanceof ClassDescriptor)) return false; ClassDescriptor classDescriptor = (ClassDescriptor) declarationDescriptor; if (classDescriptor.getKind() != ClassKind.ENUM_CLASS || classDescriptor.getModality().isOverridable()) return false; - ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor(); - assert classObjectDescriptor != null : "Enum classes must have class object."; - JetScope memberScope = classObjectDescriptor.getMemberScope(Collections.emptyList()); - Collection objectDescriptors = memberScope.getObjectDescriptors(); + Collection objectDescriptors = getEnumEntriesScope(classDescriptor).getObjectDescriptors(); boolean isExhaust = true; boolean notEmpty = false; for (ClassDescriptor descriptor : objectDescriptors) { 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 b1e862c719d..3592e58bb72 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -575,4 +575,12 @@ public class DescriptorUtils { return isTopLevelDeclaration(descriptor) || containing instanceof ClassDescriptor && isTopLevelOrInnerClass((ClassDescriptor) containing); } + + @NotNull + public static JetScope getEnumEntriesScope(@NotNull ClassDescriptor enumClass) { + assert enumClass.getKind() == ClassKind.ENUM_CLASS : "Only enum classes have enum entries: " + enumClass; + ClassDescriptor classObject = enumClass.getClassObjectDescriptor(); + assert classObject != null : "Enum class should have a class object: " + enumClass; + return classObject.getDefaultType().getMemberScope(); + } }