From bd5eee5cc2384b467cb974490b5b40c19cfc4f61 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 14 Nov 2013 22:54:22 +0400 Subject: [PATCH] Put enum entries into enum in lazy resolve --- .../lazy/data/FilteringClassLikeInfo.java | 116 ------------------ .../lazy/descriptors/LazyClassDescriptor.java | 48 +------- .../lazyResolve/namespaceComparator/enum.txt | 32 ++--- 3 files changed, 18 insertions(+), 178 deletions(-) delete mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/FilteringClassLikeInfo.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/FilteringClassLikeInfo.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/FilteringClassLikeInfo.java deleted file mode 100644 index b2878fb98c0..00000000000 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/FilteringClassLikeInfo.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.resolve.lazy.data; - -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; -import com.intellij.psi.PsiElement; -import jet.Function0; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.ClassKind; -import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.storage.NotNullLazyValue; -import org.jetbrains.jet.storage.StorageManager; - -import java.util.List; - -public class FilteringClassLikeInfo implements JetClassLikeInfo { - private final JetClassLikeInfo delegate; - private final NotNullLazyValue> filteredDeclarations; - - public FilteringClassLikeInfo( - @NotNull StorageManager storageManager, - @NotNull final JetClassLikeInfo delegate, - @NotNull final Predicate declarationFilter - ) { - this.delegate = delegate; - this.filteredDeclarations = storageManager.createLazyValue(new Function0>() { - @Override - public List invoke() { - return Lists.newArrayList(Collections2.filter(delegate.getDeclarations(), declarationFilter)); - } - }); - } - - @NotNull - @Override - public FqName getContainingPackageFqName() { - return delegate.getContainingPackageFqName(); - } - - @Override - @NotNull - public List getDelegationSpecifiers() { - return delegate.getDelegationSpecifiers(); - } - - @Override - @Nullable - public JetModifierList getModifierList() { - return delegate.getModifierList(); - } - - @Override - @Nullable - public JetClassObject getClassObject() { - return delegate.getClassObject(); - } - - @Override - @NotNull - public PsiElement getScopeAnchor() { - return delegate.getScopeAnchor(); - } - - @Override - @Nullable - public JetClassOrObject getCorrespondingClassOrObject() { - return delegate.getCorrespondingClassOrObject(); - } - - @Override - @NotNull - public List getTypeParameters() { - return delegate.getTypeParameters(); - } - - @Override - @NotNull - public List getPrimaryConstructorParameters() { - return delegate.getPrimaryConstructorParameters(); - } - - @Override - @NotNull - public ClassKind getClassKind() { - return delegate.getClassKind(); - } - - @Override - @NotNull - public List getDeclarations() { - return filteredDeclarations.invoke(); - } - - @Override - public String toString() { - return "filtering " + delegate.toString(); - } -} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index 353bd45957b..e2187835e6f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.resolve.lazy.descriptors; import com.google.common.base.Predicate; -import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.intellij.psi.PsiElement; @@ -37,7 +36,6 @@ import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.lazy.LazyDescriptor; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; -import org.jetbrains.jet.lang.resolve.lazy.data.FilteringClassLikeInfo; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo; import org.jetbrains.jet.lang.resolve.lazy.data.SyntheticClassObjectInfo; @@ -58,8 +56,6 @@ import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; import static org.jetbrains.jet.lang.resolve.name.SpecialNames.getClassObjectName; public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDescriptor, ClassDescriptor { - - private static final Predicate ONLY_ENUM_ENTRIES = Predicates.instanceOf(JetEnumEntry.class); private static final Predicate VALID_SUPERTYPE = new Predicate() { @Override public boolean apply(JetType type) { @@ -100,9 +96,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc } this.originalClassInfo = classLikeInfo; - JetClassLikeInfo classLikeInfoForMembers = classLikeInfo.getClassKind() != ClassKind.ENUM_CLASS ? classLikeInfo : noEnumEntries(); - this.declarationProvider = - resolveSession.getDeclarationProviderFactory().getClassMemberDeclarationProvider(classLikeInfoForMembers); + this.declarationProvider = resolveSession.getDeclarationProviderFactory().getClassMemberDeclarationProvider(classLikeInfo); this.unsubstitutedMemberScope = new LazyClassMemberScope(resolveSession, declarationProvider, this); @@ -271,13 +265,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc return JetClassInfoUtil.createClassLikeInfo(objectDeclaration); } } - else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY) { + else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY || getKind() == ClassKind.ENUM_CLASS) { return new SyntheticClassObjectInfo(originalClassInfo, this); } - else if (getKind() == ClassKind.ENUM_CLASS) { - // Enum classes always have class objects, and enum constants are their members - return enumClassObjectInfo(); - } return null; } @@ -478,42 +468,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc } } - @NotNull - private JetClassLikeInfo noEnumEntries() { - return new FilteringClassLikeInfo(resolveSession.getStorageManager(), originalClassInfo, Predicates.not(ONLY_ENUM_ENTRIES)); - } - - @NotNull - private JetClassLikeInfo enumClassObjectInfo() { - return new FilteringClassLikeInfo(resolveSession.getStorageManager(), originalClassInfo, ONLY_ENUM_ENTRIES) { - @Override - public JetClassOrObject getCorrespondingClassOrObject() { - return null; - } - - @NotNull - @Override - public ClassKind getClassKind() { - return ClassKind.CLASS_OBJECT; - } - - @NotNull - @Override - public List getPrimaryConstructorParameters() { - return Collections.emptyList(); - } - - @NotNull - @Override - public List getTypeParameters() { - return Collections.emptyList(); - } - }; - } - @NotNull private ScopeProvider getScopeProvider() { return resolveSession.getInjector().getScopeProvider(); } - } diff --git a/compiler/testData/lazyResolve/namespaceComparator/enum.txt b/compiler/testData/lazyResolve/namespaceComparator/enum.txt index 34c924cac9f..d91d0cb24fe 100644 --- a/compiler/testData/lazyResolve/namespaceComparator/enum.txt +++ b/compiler/testData/lazyResolve/namespaceComparator/enum.txt @@ -9,29 +9,29 @@ internal final enum class Test : jet.Enum { /*primary*/ private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.Test public final /*synthesized*/ fun values(): jet.Array + } + + public enum entry A : test.Test { + /*primary*/ 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.Test { - /*primary*/ private constructor A() + public class object : test.Test.A { + /*primary*/ 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.Test.A { - /*primary*/ 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.Test { + /*primary*/ 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.Test { - /*primary*/ private constructor B() + public class object : test.Test.B { + /*primary*/ 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.Test.B { - /*primary*/ private constructor () - public final override /*1*/ /*fake_override*/ fun name(): jet.String - public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - } } } }