From 5a4cc1e2fe23c9449ca3cc34c94e0f0af28ae70d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 13 Nov 2013 21:26:31 +0400 Subject: [PATCH] Put enum entries into enum class in JDR --- .../jet/codegen/ExpressionCodegen.java | 18 ------- .../codegen/ImplementationBodyCodegen.java | 2 +- .../jet/lang/resolve/AnnotationResolver.java | 11 ----- .../loadJava/compiledJava/EnumMembers.txt | 40 ++++++++-------- .../loadJava/compiledJava/JavaEnum.txt | 32 ++++++------- .../annotations/CustomAnnotation.txt | 16 +++---- .../loadJava/compiledJava/static/Enum.txt | 48 +++++++++---------- .../static/StaticMembersInEnum.txt | 16 +++---- .../resolver/DescriptorResolverUtils.java | 17 +++---- .../java/resolver/JavaFunctionResolver.java | 2 +- .../java/resolver/JavaNamespaceResolver.java | 2 +- .../java/resolver/JavaPropertyResolver.java | 3 +- .../scope/JavaClassNonStaticMembersScope.java | 46 ++++++++++++++++++ .../java/scope/JavaEnumClassObjectScope.java | 42 +--------------- .../EnumEntrySyntheticClassDescriptor.java | 7 ++- 15 files changed, 139 insertions(+), 163 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 93a32896ddd..0ac045a7afa 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1642,10 +1642,6 @@ public class ExpressionCodegen extends JetVisitor implem } } - if (descriptor instanceof VariableDescriptorForObject) { - return genObjectClassInstance((VariableDescriptorForObject) descriptor); - } - int index = lookupLocalIndex(descriptor); if (index >= 0) { return stackValueForLocal(descriptor, index); @@ -1731,20 +1727,6 @@ public class ExpressionCodegen extends JetVisitor implem throw new UnsupportedOperationException("don't know how to generate reference " + descriptor); } - @NotNull - private StackValue genObjectClassInstance(@NotNull VariableDescriptorForObject variableDescriptor) { - boolean isEnumEntry = DescriptorUtils.isEnumClassObject(variableDescriptor.getContainingDeclaration()); - if (isEnumEntry) { - ClassDescriptor containing = (ClassDescriptor) variableDescriptor.getContainingDeclaration().getContainingDeclaration(); - assert containing != null; - Type type = typeMapper.mapType(containing); - return StackValue.field(type, type, variableDescriptor.getName().asString(), true); - } - else { - return StackValue.singleton(variableDescriptor.getObjectClass(), typeMapper); - } - } - private StackValue stackValueForLocal(DeclarationDescriptor descriptor, int index) { if (descriptor instanceof VariableDescriptor) { Type sharedVarType = typeMapper.getSharedVarType(descriptor); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index c0cb1d79826..25ae7010291 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -279,7 +279,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (inner == null || isTopLevelDeclaration(inner)) { break; } - if (inner instanceof ClassDescriptor && !isEnumClassObject(inner)) { + if (inner instanceof ClassDescriptor) { writeInnerClass((ClassDescriptor) inner); } inner = inner.getContainingDeclaration(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java index ccd2c335d15..95c6e083d49 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java @@ -303,9 +303,6 @@ public class AnnotationResolver { CallableDescriptor callableDescriptor = resolvedCall.getResultingDescriptor(); if (callableDescriptor instanceof PropertyDescriptor) { PropertyDescriptor propertyDescriptor = (PropertyDescriptor) callableDescriptor; - if (isEnumProperty(propertyDescriptor)) { - return new EnumValue(((VariableDescriptorForObject) propertyDescriptor).getObjectClass()); - } if (AnnotationUtils.isPropertyAcceptableAsAnnotationParameter(propertyDescriptor)) { return trace.getBindingContext().get(COMPILE_TIME_INITIALIZER, propertyDescriptor); } @@ -366,14 +363,6 @@ public class AnnotationResolver { return expression.accept(visitor, null); } - private static boolean isEnumProperty(@NotNull PropertyDescriptor descriptor) { - // TODO: this is true only for enum entries loaded from Java, refactor JDR to use classes with class objects instead - ClassifierDescriptor classifier = descriptor.getType().getConstructor().getDeclarationDescriptor(); - return classifier != null && - DescriptorUtils.isEnumClass(classifier) && - DescriptorUtils.isEnumClassObject(descriptor.getContainingDeclaration()); - } - @SuppressWarnings("MethodMayBeStatic") @NotNull public List getResolvedAnnotations(@NotNull List annotations, @NotNull BindingTrace trace) { diff --git a/compiler/testData/loadJava/compiledJava/EnumMembers.txt b/compiler/testData/loadJava/compiledJava/EnumMembers.txt index 2466f8af994..1ccf8cf9041 100644 --- a/compiler/testData/loadJava/compiledJava/EnumMembers.txt +++ b/compiler/testData/loadJava/compiledJava/EnumMembers.txt @@ -11,37 +11,37 @@ public final enum class EnumMembers : jet.Enum { private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.EnumMembers public final /*synthesized*/ fun values(): jet.Array + } + + public enum entry FIRST : test.EnumMembers { + private constructor FIRST() + public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean + public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry FIRST : test.EnumMembers { - private constructor FIRST() + public class object : test.EnumMembers.FIRST { + private constructor () public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.EnumMembers.FIRST { - private constructor () - public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean - public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } + } + + public enum entry SECOND : test.EnumMembers { + private constructor SECOND() + public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean + public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry SECOND : test.EnumMembers { - private constructor SECOND() + public class object : test.EnumMembers.SECOND { + private constructor () public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.EnumMembers.SECOND { - private constructor () - public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean - public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } } } diff --git a/compiler/testData/loadJava/compiledJava/JavaEnum.txt b/compiler/testData/loadJava/compiledJava/JavaEnum.txt index 7989fac475e..96c6d2a0af9 100644 --- a/compiler/testData/loadJava/compiledJava/JavaEnum.txt +++ b/compiler/testData/loadJava/compiledJava/JavaEnum.txt @@ -9,29 +9,29 @@ public final enum class JavaEnum : jet.Enum { private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.JavaEnum public final /*synthesized*/ fun values(): jet.Array + } + + public enum entry ANOTHER : test.JavaEnum { + private constructor ANOTHER() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry ANOTHER : test.JavaEnum { - private constructor ANOTHER() + public class object : test.JavaEnum.ANOTHER { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.JavaEnum.ANOTHER { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } + } + + public enum entry ENTRY : test.JavaEnum { + private constructor ENTRY() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry ENTRY : test.JavaEnum { - private constructor ENTRY() + public class object : test.JavaEnum.ENTRY { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.JavaEnum.ENTRY { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } } } diff --git a/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.txt b/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.txt index f4abf6329e5..b0417b33b7b 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.txt @@ -16,17 +16,17 @@ public trait CustomAnnotation : java.lang.Object { private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.CustomAnnotation.MyEnum public final /*synthesized*/ fun values(): jet.Array + } + + public enum entry ONE : test.CustomAnnotation.MyEnum { + private constructor ONE() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry ONE : test.CustomAnnotation.MyEnum { - private constructor ONE() + public class object : test.CustomAnnotation.MyEnum.ONE { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.CustomAnnotation.MyEnum.ONE { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } } } diff --git a/compiler/testData/loadJava/compiledJava/static/Enum.txt b/compiler/testData/loadJava/compiledJava/static/Enum.txt index c0e78b4076a..203c6048549 100644 --- a/compiler/testData/loadJava/compiledJava/static/Enum.txt +++ b/compiler/testData/loadJava/compiledJava/static/Enum.txt @@ -9,41 +9,41 @@ public final enum class Enum : jet.Enum { private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.Enum public final /*synthesized*/ fun values(): jet.Array + } + + public enum entry A : test.Enum { + private constructor A() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry A : test.Enum { - private constructor A() + public class object : test.Enum.A { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.Enum.A { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } + } + + public enum entry B : test.Enum { + private constructor B() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry B : test.Enum { - private constructor B() + public class object : test.Enum.B { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.Enum.B { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } + } + + public enum entry C : test.Enum { + private constructor C() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry C : test.Enum { - private constructor C() + public class object : test.Enum.C { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.Enum.C { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } } diff --git a/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt b/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt index 6a2bf22085f..eb7f64ae8fa 100644 --- a/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt +++ b/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt @@ -9,17 +9,17 @@ public final enum class StaticMembersInEnum : jet.Enum private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.StaticMembersInEnum public final /*synthesized*/ fun values(): jet.Array + } + + public enum entry ENTRY : test.StaticMembersInEnum { + private constructor ENTRY() + public final override /*1*/ /*fake_override*/ fun name(): jet.String + public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - public enum entry ENTRY : test.StaticMembersInEnum { - private constructor ENTRY() + public class object : test.StaticMembersInEnum.ENTRY { + private constructor () public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - - public class object : test.StaticMembersInEnum.ENTRY { - private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index 791efa2f26d..8383fcde797 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -115,23 +115,20 @@ public final class DescriptorResolverUtils { } /** - * @return true if {@code member} is a static member of enum class, which is to be put into its class object (and not into the - * corresponding package). This applies to enum entries, values() and valueOf(String) methods + * @return true if {@code method} is a static method of enum class, which is to be put into its class object (and not into the + * corresponding package). This applies to values() and valueOf(String) methods */ - public static boolean shouldBeInEnumClassObject(@NotNull JavaMember member) { - if (!member.getContainingClass().isEnum()) return false; + public static boolean shouldBeInEnumClassObject(@NotNull JavaMethod method) { + if (!method.getContainingClass().isEnum()) return false; - if (member instanceof JavaField && ((JavaField) member).isEnumEntry()) return true; - - if (!(member instanceof JavaMethod)) return false; - String signature = JavaSignatureFormatter.getInstance().formatMethod((JavaMethod) member); + String signature = JavaSignatureFormatter.getInstance().formatMethod(method); return "values()".equals(signature) || "valueOf(java.lang.String)".equals(signature); } - public static boolean isCorrectOwnerForEnumMember(@NotNull ClassOrNamespaceDescriptor ownerDescriptor, @NotNull JavaMember member) { - return isEnumClassObject(ownerDescriptor) == shouldBeInEnumClassObject(member); + public static boolean isCorrectOwnerForEnumMethod(@NotNull ClassOrNamespaceDescriptor ownerDescriptor, @NotNull JavaMethod method) { + return isEnumClassObject(ownerDescriptor) == shouldBeInEnumClassObject(method); } public static boolean isObjectMethodInInterface(@NotNull JavaMember member) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index 358b1b12669..53f350ddf02 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -101,7 +101,7 @@ public final class JavaFunctionResolver { @NotNull ClassOrNamespaceDescriptor ownerDescriptor, boolean record ) { - if (!DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, method)) { + if (!DescriptorResolverUtils.isCorrectOwnerForEnumMethod(ownerDescriptor, method)) { return null; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java index 22585723388..7354fb52f89 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java @@ -228,7 +228,7 @@ public final class JavaNamespaceResolver { } for (JavaField field : javaClass.getFields()) { - if (field.isStatic() && !DescriptorResolverUtils.shouldBeInEnumClassObject(field)) { + if (field.isStatic() && !field.isEnumEntry()) { return true; } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java index 39df71a2103..636f9ebb126 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java @@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.types.TypeUtils; import javax.inject.Inject; import java.util.*; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumClass; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumClassObject; import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.resolveOverrides; @@ -79,7 +80,7 @@ public final class JavaPropertyResolver { assert fields.size() <= 1; if (fields.size() == 1) { JavaField field = fields.iterator().next(); - if (DescriptorResolverUtils.isCorrectOwnerForEnumMember(owner, field)) { + if (!field.isEnumEntry()) { propertiesFromCurrent.add(resolveProperty(owner, propertyName, field)); } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassNonStaticMembersScope.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassNonStaticMembersScope.java index d4f2d12acde..183069f250d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassNonStaticMembersScope.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassNonStaticMembersScope.java @@ -16,17 +16,26 @@ package org.jetbrains.jet.lang.resolve.java.scope; +import jet.Function0; +import jet.Function1; +import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor; +import org.jetbrains.jet.lang.descriptors.impl.EnumEntrySyntheticClassDescriptor; import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; +import org.jetbrains.jet.lang.resolve.java.structure.JavaField; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.storage.LockBasedStorageManager; +import org.jetbrains.jet.storage.NotNullLazyValue; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumClass; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES; public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope { @@ -58,6 +67,43 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope for (JavaClass innerClass : innerClasses) { result.add(resolveInnerClass(innerClass)); } + + if (isEnumClass(descriptor)) { + result.addAll(computeEnumEntries()); + } + + return result; + } + + private Collection computeEnumEntries() { + List result = new ArrayList(); + + final Collection enumNonStaticMembers = MembersProvider.forClass(javaClass, true).allMembers(); + + NotNullLazyValue> enumMemberNames = + LockBasedStorageManager.NO_LOCKS.createLazyValue(new Function0>() { + @Override + public Collection invoke() { + return KotlinPackage.map(enumNonStaticMembers, new Function1() { + @Override + public Name invoke(@NotNull NamedMembers members) { + return members.getName(); + } + }); + } + }); + + for (NamedMembers members : enumNonStaticMembers) { + for (JavaField field : members.getFields()) { + if (field.isEnumEntry()) { + EnumEntrySyntheticClassDescriptor enumEntry = EnumEntrySyntheticClassDescriptor + .create(LockBasedStorageManager.NO_LOCKS, descriptor, members.getName(), enumMemberNames); + result.add(enumEntry); + break; + } + } + } + return result; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaEnumClassObjectScope.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaEnumClassObjectScope.java index 2476d369f4a..64a12e2a8cb 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaEnumClassObjectScope.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaEnumClassObjectScope.java @@ -16,24 +16,14 @@ package org.jetbrains.jet.lang.resolve.java.scope; -import jet.Function0; -import jet.Function1; -import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor; -import org.jetbrains.jet.lang.descriptors.impl.EnumEntrySyntheticClassDescriptor; import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; -import org.jetbrains.jet.lang.resolve.java.structure.JavaField; -import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.storage.LockBasedStorageManager; -import org.jetbrains.jet.storage.NotNullLazyValue; -import org.jetbrains.jet.storage.StorageManager; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; +import java.util.Collections; public class JavaEnumClassObjectScope extends JavaClassMembersScope { public JavaEnumClassObjectScope( @@ -47,34 +37,6 @@ public class JavaEnumClassObjectScope extends JavaClassMembersScope { @NotNull @Override protected Collection computeInnerClasses() { - List result = new ArrayList(); - - final Collection enumNonStaticMembers = membersProvider.allMembers(); - - NotNullLazyValue> enumMemberNames = - LockBasedStorageManager.NO_LOCKS.createLazyValue(new Function0>() { - @Override - public Collection invoke() { - return KotlinPackage.map(enumNonStaticMembers, new Function1() { - @Override - public Name invoke(@NotNull NamedMembers members) { - return members.getName(); - } - }); - } - }); - - for (NamedMembers members : enumNonStaticMembers) { - for (JavaField field : members.getFields()) { - if (field.isEnumEntry()) { - EnumEntrySyntheticClassDescriptor enumEntry = EnumEntrySyntheticClassDescriptor - .create(LockBasedStorageManager.NO_LOCKS, (ClassDescriptor) descriptor, members.getName(), enumMemberNames); - result.add(enumEntry); - break; - } - } - } - - return result; + return Collections.emptySet(); } } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java index c43b611d392..460c8fb78f2 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -53,14 +53,13 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { @NotNull public static EnumEntrySyntheticClassDescriptor create( @NotNull StorageManager storageManager, - @NotNull ClassDescriptor enumClassObject, + @NotNull ClassDescriptor enumClass, @NotNull Name name, @NotNull NotNullLazyValue> enumMemberNames ) { - JetType enumType = ((ClassDescriptor) enumClassObject.getContainingDeclaration()).getDefaultType(); + JetType enumType = enumClass.getDefaultType(); - return new EnumEntrySyntheticClassDescriptor(storageManager, enumClassObject, enumType, name, ClassKind.ENUM_ENTRY, - enumMemberNames); + return new EnumEntrySyntheticClassDescriptor(storageManager, enumClass, enumType, name, ClassKind.ENUM_ENTRY, enumMemberNames); } private EnumEntrySyntheticClassDescriptor(