Thread-safe lazy values introduced into FilteringClassLikeInfo
This commit is contained in:
@@ -492,12 +492,12 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JetClassLikeInfo noEnumEntries(JetClassLikeInfo classLikeInfo) {
|
private JetClassLikeInfo noEnumEntries(JetClassLikeInfo classLikeInfo) {
|
||||||
return new FilteringClassLikeInfo(classLikeInfo, Predicates.not(ONLY_ENUM_ENTRIES));
|
return new FilteringClassLikeInfo(resolveSession.getStorageManager(), classLikeInfo, Predicates.not(ONLY_ENUM_ENTRIES));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JetClassLikeInfo enumClassObjectInfo(JetClassLikeInfo classLikeInfo) {
|
private JetClassLikeInfo enumClassObjectInfo(JetClassLikeInfo classLikeInfo) {
|
||||||
return new FilteringClassLikeInfo(classLikeInfo, ONLY_ENUM_ENTRIES) {
|
return new FilteringClassLikeInfo(resolveSession.getStorageManager(), classLikeInfo, ONLY_ENUM_ENTRIES) {
|
||||||
@Override
|
@Override
|
||||||
public JetClassOrObject getCorrespondingClassOrObject() {
|
public JetClassOrObject getCorrespondingClassOrObject() {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
+16
-8
@@ -19,23 +19,34 @@ package org.jetbrains.jet.lang.resolve.lazy.data;
|
|||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Collections2;
|
import com.google.common.collect.Collections2;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.intellij.openapi.util.Computable;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
|
import org.jetbrains.jet.lang.resolve.lazy.LazyValue;
|
||||||
|
import org.jetbrains.jet.lang.resolve.lazy.StorageManager;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class FilteringClassLikeInfo implements JetClassLikeInfo {
|
public class FilteringClassLikeInfo implements JetClassLikeInfo {
|
||||||
private final JetClassLikeInfo delegate;
|
private final JetClassLikeInfo delegate;
|
||||||
private final Predicate<? super JetDeclaration> declarationFilter;
|
private final LazyValue<List<JetDeclaration>> filteredDeclarations;
|
||||||
private List<JetDeclaration> filteredDeclarations;
|
|
||||||
|
|
||||||
public FilteringClassLikeInfo(@NotNull JetClassLikeInfo delegate, @NotNull Predicate<? super JetDeclaration> declarationFilter) {
|
public FilteringClassLikeInfo(
|
||||||
|
@NotNull StorageManager storageManager,
|
||||||
|
@NotNull final JetClassLikeInfo delegate,
|
||||||
|
@NotNull final Predicate<? super JetDeclaration> declarationFilter
|
||||||
|
) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.declarationFilter = declarationFilter;
|
this.filteredDeclarations = storageManager.createLazyValue(new Computable<List<JetDeclaration>>() {
|
||||||
|
@Override
|
||||||
|
public List<JetDeclaration> compute() {
|
||||||
|
return Lists.newArrayList(Collections2.filter(delegate.getDeclarations(), declarationFilter));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -95,10 +106,7 @@ public class FilteringClassLikeInfo implements JetClassLikeInfo {
|
|||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<JetDeclaration> getDeclarations() {
|
public List<JetDeclaration> getDeclarations() {
|
||||||
if (filteredDeclarations == null) {
|
return filteredDeclarations.get();
|
||||||
filteredDeclarations = Lists.newArrayList(Collections2.filter(delegate.getDeclarations(), declarationFilter));
|
|
||||||
}
|
|
||||||
return filteredDeclarations;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user