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) {
|
||||
return new FilteringClassLikeInfo(classLikeInfo, Predicates.not(ONLY_ENUM_ENTRIES));
|
||||
private JetClassLikeInfo noEnumEntries(JetClassLikeInfo classLikeInfo) {
|
||||
return new FilteringClassLikeInfo(resolveSession.getStorageManager(), classLikeInfo, Predicates.not(ONLY_ENUM_ENTRIES));
|
||||
}
|
||||
|
||||
private static JetClassLikeInfo enumClassObjectInfo(JetClassLikeInfo classLikeInfo) {
|
||||
return new FilteringClassLikeInfo(classLikeInfo, ONLY_ENUM_ENTRIES) {
|
||||
private JetClassLikeInfo enumClassObjectInfo(JetClassLikeInfo classLikeInfo) {
|
||||
return new FilteringClassLikeInfo(resolveSession.getStorageManager(), classLikeInfo, ONLY_ENUM_ENTRIES) {
|
||||
@Override
|
||||
public JetClassOrObject getCorrespondingClassOrObject() {
|
||||
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.collect.Collections2;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.psi.PsiElement;
|
||||
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.lazy.LazyValue;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.StorageManager;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class FilteringClassLikeInfo implements JetClassLikeInfo {
|
||||
private final JetClassLikeInfo delegate;
|
||||
private final Predicate<? super JetDeclaration> declarationFilter;
|
||||
private List<JetDeclaration> filteredDeclarations;
|
||||
private final LazyValue<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.declarationFilter = declarationFilter;
|
||||
this.filteredDeclarations = storageManager.createLazyValue(new Computable<List<JetDeclaration>>() {
|
||||
@Override
|
||||
public List<JetDeclaration> compute() {
|
||||
return Lists.newArrayList(Collections2.filter(delegate.getDeclarations(), declarationFilter));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -95,10 +106,7 @@ public class FilteringClassLikeInfo implements JetClassLikeInfo {
|
||||
@Override
|
||||
@NotNull
|
||||
public List<JetDeclaration> getDeclarations() {
|
||||
if (filteredDeclarations == null) {
|
||||
filteredDeclarations = Lists.newArrayList(Collections2.filter(delegate.getDeclarations(), declarationFilter));
|
||||
}
|
||||
return filteredDeclarations;
|
||||
return filteredDeclarations.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user