cancelable collection processor: more cancelability where CollectProcessor is used

This commit is contained in:
Alexey Kudravtsev
2016-04-06 18:36:46 +03:00
parent 5f8491f5f7
commit e98ae76fa3
34 changed files with 207 additions and 154 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -28,14 +28,16 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.psi.util.ClassUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.util.indexing.FindSymbolParameters;
import com.intellij.util.indexing.IdFilter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
public class DefaultClassNavigationContributor implements ChooseByNameContributorEx, GotoClassContributor {
@@ -44,10 +46,12 @@ public class DefaultClassNavigationContributor implements ChooseByNameContributo
public String[] getNames(Project project, boolean includeNonProjectItems) {
if (FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping) {
GlobalSearchScope scope = includeNonProjectItems ? GlobalSearchScope.allScope(project) : GlobalSearchScope.projectScope(project);
CommonProcessors.CollectProcessor<String> processor = new CommonProcessors.CollectProcessor<String>();
List<String> result = new ArrayList<>();
Processor<String> processor = Processors.cancelableCollectProcessor(result);
processNames(processor, scope, IdFilter.getProjectIdFilter(project, includeNonProjectItems));
return ArrayUtil.toStringArray(processor.getResults());
return ArrayUtil.toStringArray(result);
}
return PsiShortNamesCache.getInstance(project).getAllClassNames();
@@ -56,10 +60,12 @@ public class DefaultClassNavigationContributor implements ChooseByNameContributo
@Override
@NotNull
public NavigationItem[] getItemsByName(String name, final String pattern, Project project, boolean includeNonProjectItems) {
CommonProcessors.CollectProcessor<NavigationItem> processor = new CommonProcessors.CollectProcessor<NavigationItem>();
List<NavigationItem> result = new ArrayList<>();
Processor<NavigationItem> processor = Processors.cancelableCollectProcessor(result);
processElementsWithName(name, processor, FindSymbolParameters.wrap(pattern, project, includeNonProjectItems));
return processor.toArray(new NavigationItem[processor.getResults().size()]);
return result.isEmpty() ? NavigationItem.EMPTY_NAVIGATION_ITEM_ARRAY :
result.toArray(new NavigationItem[result.size()]);
}
@Override
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -26,8 +26,8 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -97,8 +97,8 @@ public class JavaTestFinder implements TestFinder {
if (klass == null) return Collections.emptySet();
List<Pair<? extends PsiNamedElement, Integer>> classesWithProximities = new ArrayList<Pair<? extends PsiNamedElement, Integer>>();
final CommonProcessors.CollectProcessor<Pair<? extends PsiNamedElement, Integer>> processor =
new CommonProcessors.CollectProcessor<Pair<? extends PsiNamedElement, Integer>>(classesWithProximities);
Processor<Pair<? extends PsiNamedElement, Integer>> processor =
Processors.cancelableCollectProcessor(classesWithProximities);
collectTests(klass, processor);
return TestFinderHelper.getSortedElements(classesWithProximities, true);
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -27,10 +27,7 @@ import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.psi.stubs.StubIndex;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.SmartList;
import com.intellij.util.*;
import com.intellij.util.containers.HashSet;
import com.intellij.util.indexing.IdFilter;
import gnu.trove.THashMap;
@@ -120,7 +117,8 @@ public class PsiShortNamesCacheImpl extends PsiShortNamesCache {
@Override
public void getAllClassNames(@NotNull HashSet<String> set) {
processAllClassNames(new CommonProcessors.CollectProcessor<String>(set));
Processor<String> processor = Processors.cancelableCollectProcessor(set);
processAllClassNames(processor);
}
@Override
@@ -187,7 +185,7 @@ public class PsiShortNamesCacheImpl extends PsiShortNamesCache {
@Override
public void getAllMethodNames(@NotNull HashSet<String> set) {
JavaMethodNameIndex.getInstance().processAllKeys(myManager.getProject(), new CommonProcessors.CollectProcessor<String>(set));
JavaMethodNameIndex.getInstance().processAllKeys(myManager.getProject(), Processors.cancelableCollectProcessor(set));
}
@Override
@@ -226,7 +224,8 @@ public class PsiShortNamesCacheImpl extends PsiShortNamesCache {
@Override
public void getAllFieldNames(@NotNull HashSet<String> set) {
JavaFieldNameIndex.getInstance().processAllKeys(myManager.getProject(), new CommonProcessors.CollectProcessor<String>(set));
Processor<String> processor = Processors.cancelableCollectProcessor(set);
JavaFieldNameIndex.getInstance().processAllKeys(myManager.getProject(), processor);
}
@Override
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -36,9 +36,9 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.stubs.StubIndex;
import com.intellij.psi.stubs.StubIndexKey;
import com.intellij.psi.util.*;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Function;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.HashSet;
import com.intellij.util.indexing.FileBasedIndex;
import org.jetbrains.annotations.NotNull;
@@ -174,7 +174,7 @@ public class JavaFunctionalExpressionSearcher extends QueryExecutorBase<PsiFunct
final Set<String> usedMethodNames = newHashSet();
FileBasedIndex.getInstance().processAllKeys(JavaFunctionalExpressionIndex.JAVA_FUNCTIONAL_EXPRESSION_INDEX_ID,
new CommonProcessors.CollectProcessor<String>(usedMethodNames), candidateScope, null);
Processors.cancelableCollectProcessor(usedMethodNames), candidateScope, null);
final LinkedHashSet<PsiMethod> methods = newLinkedHashSet();
Processor<PsiMethod> methodProcessor = new Processor<PsiMethod>() {
@@ -200,12 +200,9 @@ public class JavaFunctionalExpressionSearcher extends QueryExecutorBase<PsiFunct
@NotNull
private static GlobalSearchScope combineResolveScopes(Project project, Set<VirtualFile> candidateFiles) {
final PsiManager psiManager = PsiManager.getInstance(project);
LinkedHashSet<GlobalSearchScope> resolveScopes = newLinkedHashSet(mapNotNull(candidateFiles, new Function<VirtualFile, GlobalSearchScope>() {
@Override
public GlobalSearchScope fun(VirtualFile file) {
PsiFile psiFile = file.isValid() ? psiManager.findFile(file) : null;
return psiFile == null ? null : psiFile.getResolveScope();
}
Set<GlobalSearchScope> resolveScopes = newLinkedHashSet(mapNotNull(candidateFiles, file -> {
PsiFile psiFile = file.isValid() ? psiManager.findFile(file) : null;
return psiFile == null ? null : psiFile.getResolveScope();
}));
return GlobalSearchScope.union(resolveScopes.toArray(new GlobalSearchScope[resolveScopes.size()]));
}
@@ -214,7 +211,7 @@ public class JavaFunctionalExpressionSearcher extends QueryExecutorBase<PsiFunct
private static Set<VirtualFile> getFilesWithFunctionalExpressionsScope(Project project, GlobalSearchScope useScope) {
final Set<VirtualFile> files = newLinkedHashSet();
final PsiSearchHelperImpl helper = (PsiSearchHelperImpl)PsiSearchHelper.SERVICE.getInstance(project);
final CommonProcessors.CollectProcessor<VirtualFile> processor = new CommonProcessors.CollectProcessor<VirtualFile>(files);
Processor<VirtualFile> processor = Processors.cancelableCollectProcessor(files);
helper.processFilesWithText(useScope, UsageSearchContext.IN_CODE, true, "::", processor);
helper.processFilesWithText(useScope, UsageSearchContext.IN_CODE, true, "->", processor);
return files;
@@ -19,7 +19,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.util.*;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ConcurrentFactoryMap;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
@@ -197,14 +198,16 @@ public class AnnotationUtil {
@Nullable
@Override
public Result<List<T>> compute() {
LinkedHashSet<PsiModifierListOwner> result = ContainerUtil.newLinkedHashSet();
Set<PsiModifierListOwner> result = ContainerUtil.newLinkedHashSet();
if (element instanceof PsiMethod) {
collectSuperMethods(result, ((PsiMethod)element).getHierarchicalMethodSignature(), element,
JavaPsiFacade.getInstance(element.getProject()).getResolveHelper());
} else if (element instanceof PsiClass) {
}
else if (element instanceof PsiClass) {
//noinspection unchecked
InheritanceUtil.processSupers((PsiClass)element, false, new CommonProcessors.CollectProcessor<PsiClass>((Set)result));
} else if (element instanceof PsiParameter) {
InheritanceUtil.processSupers((PsiClass)element, false, (Processor)Processors.cancelableCollectProcessor(result));
}
else if (element instanceof PsiParameter) {
collectSuperParameters(result, (PsiParameter)element);
}
@@ -249,7 +252,7 @@ public class AnnotationUtil {
return map.get(annotationNames);
}
private static void collectSuperParameters(LinkedHashSet<PsiModifierListOwner> result, @NotNull PsiParameter parameter) {
private static void collectSuperParameters(@NotNull Set<PsiModifierListOwner> result, @NotNull PsiParameter parameter) {
PsiElement scope = parameter.getDeclarationScope();
if (!(scope instanceof PsiMethod)) {
return;
@@ -269,7 +272,7 @@ public class AnnotationUtil {
}
}
private static void collectSuperMethods(LinkedHashSet<PsiModifierListOwner> result,
private static void collectSuperMethods(@NotNull Set<PsiModifierListOwner> result,
@NotNull HierarchicalMethodSignature signature,
@NotNull PsiElement place,
@NotNull PsiResolveHelper resolveHelper) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -41,7 +41,8 @@ import com.intellij.psi.search.PsiSearchScopeUtil;
import com.intellij.psi.util.*;
import com.intellij.reference.SoftReference;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -84,10 +85,10 @@ public class PsiPackageImpl extends PsiPackageBase implements PsiPackage, Querya
return CachedValuesManager.getManager(myManager.getProject()).createCachedValue(new CachedValueProvider<Collection<PsiDirectory>>() {
@Override
public Result<Collection<PsiDirectory>> compute() {
final CommonProcessors.CollectProcessor<PsiDirectory> processor = new CommonProcessors.CollectProcessor<PsiDirectory>();
Collection<PsiDirectory> result = new ArrayList<PsiDirectory>();
Processor<PsiDirectory> processor = Processors.cancelableCollectProcessor(result);
getFacade().processPackageDirectories(PsiPackageImpl.this, allScope(), processor, includeLibrarySources);
return Result.create(processor.getResults(), PsiPackageImplementationHelper.getInstance().getDirectoryCachedValueDependencies(
PsiPackageImpl.this));
return Result.create(result, PsiPackageImplementationHelper.getInstance().getDirectoryCachedValueDependencies(PsiPackageImpl.this));
}
}, false);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -24,6 +24,7 @@ import com.intellij.psi.*;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Function;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.xml.ConvertContext;
import com.intellij.util.xml.DomElement;
@@ -115,8 +116,8 @@ public abstract class AbstractMethodResolveConverter<ParentType extends DomEleme
@NotNull
public Collection<? extends PsiMethod> getVariants(final ConvertContext context) {
LinkedHashSet<PsiMethod> methodList = new LinkedHashSet<PsiMethod>();
Processor<PsiMethod> processor = CommonProcessors.notNullProcessor(new CommonProcessors.CollectProcessor<PsiMethod>(methodList));
Set<PsiMethod> methodList = new LinkedHashSet<PsiMethod>();
Processor<PsiMethod> processor = CommonProcessors.notNullProcessor(Processors.cancelableCollectProcessor(methodList));
processMethods(context, processor, new Function<PsiClass, PsiMethod[]>() {
public PsiMethod[] fun(final PsiClass s) {
final List<PsiMethod> list = ContainerUtil.findAll(getVariants(s), new Condition<PsiMethod>() {
@@ -21,8 +21,10 @@ import com.intellij.openapi.application.ReadActionProcessor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* @author peter
@@ -34,9 +36,10 @@ public abstract class AbstractQuery<Result> implements Query<Result> {
@NotNull
public Collection<Result> findAll() {
assertNotProcessing();
final CommonProcessors.CollectProcessor<Result> processor = new CommonProcessors.CollectProcessor<Result>();
List<Result> result = new ArrayList<Result>();
Processor<Result> processor = Processors.cancelableCollectProcessor(result);
forEach(processor);
return processor.getResults();
return result;
}
@Override
@@ -20,8 +20,10 @@ import com.intellij.concurrency.AsyncFuture;
import com.intellij.openapi.util.Condition;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* @author max
@@ -57,9 +59,10 @@ public class FilteredQuery<T> implements Query<T> {
@Override
@NotNull
public Collection<T> findAll() {
CommonProcessors.CollectProcessor<T> processor = new CommonProcessors.CollectProcessor<T>();
List<T> result = new ArrayList<T>();
Processor<T> processor = Processors.cancelableCollectProcessor(result);
forEach(processor);
return processor.getResults();
return result;
}
@NotNull
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -40,7 +40,8 @@ public class MergeQuery<T> implements Query<T>{
@NotNull
public Collection<T> findAll() {
List<T> results = new ArrayList<T>();
forEach(new CommonProcessors.CollectProcessor<T>(results));
Processor<T> processor = Processors.cancelableCollectProcessor(results);
forEach(processor);
return results;
}
@@ -0,0 +1,34 @@
/*
* Copyright 2000-2016 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 com.intellij.util;
import com.intellij.openapi.progress.ProgressManager;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
public class Processors {
@NotNull
public static <T> Processor<T> cancelableCollectProcessor(@NotNull Collection<T> collection) {
return new CommonProcessors.CollectProcessor<T>(collection){
@Override
public boolean process(T t) {
ProgressManager.checkCanceled();
return super.process(t);
}
};
}
}
@@ -74,9 +74,10 @@ public class UniqueResultsQuery<T, M> implements Query<T> {
@Override
@NotNull
public Collection<T> findAll() {
final CommonProcessors.CollectProcessor<T> processor = new CommonProcessors.CollectProcessor<T>(Collections.synchronizedList(new ArrayList<T>()));
List<T> result = Collections.synchronizedList(new ArrayList<T>());
Processor<T> processor = Processors.cancelableCollectProcessor(result);
forEach(processor);
return processor.getResults();
return result;
}
@NotNull
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -25,9 +25,9 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.CommonProcessors;
import com.intellij.util.ObjectUtils;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.SmartList;
import com.intellij.util.indexing.IdFilter;
import com.intellij.util.indexing.IdIterator;
@@ -141,8 +141,9 @@ public abstract class StubIndex {
@Nullable final GlobalSearchScope scope,
@Nullable IdFilter idFilter,
@NotNull Class<Psi> requiredClass) {
final List<Psi> result = new SmartList<Psi>();
getInstance().processElements(indexKey, key, project, scope, idFilter, requiredClass, new CommonProcessors.CollectProcessor<Psi>(result));
final List<Psi> result = new SmartList<>();
Processor<Psi> processor = Processors.cancelableCollectProcessor(result);
getInstance().processElements(indexKey, key, project, scope, idFilter, requiredClass, processor);
return result;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2012 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -32,8 +32,8 @@ import com.intellij.psi.impl.cache.CacheManager;
import com.intellij.psi.impl.cache.impl.id.IdIndex;
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.indexing.FileBasedIndex;
import org.jetbrains.annotations.NotNull;
@@ -60,9 +60,11 @@ public class IndexCacheManagerImpl implements CacheManager{
if (myProject.isDefault()) {
return PsiFile.EMPTY_ARRAY;
}
CommonProcessors.CollectProcessor<PsiFile> processor = new CommonProcessors.CollectProcessor<PsiFile>();
List<PsiFile> result = new ArrayList<>();
Processor<PsiFile> processor = Processors.cancelableCollectProcessor(result);
processFilesWithWord(processor, word, occurenceMask, scope, caseSensitively);
return processor.getResults().isEmpty() ? PsiFile.EMPTY_ARRAY : processor.toArray(PsiFile.EMPTY_ARRAY);
return result.isEmpty() ? PsiFile.EMPTY_ARRAY : result.toArray(PsiFile.EMPTY_ARRAY);
}
@Override
@@ -72,18 +74,21 @@ public class IndexCacheManagerImpl implements CacheManager{
return VirtualFile.EMPTY_ARRAY;
}
final List<VirtualFile> vFiles = new ArrayList<VirtualFile>(5);
collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor<VirtualFile>(vFiles), word, occurenceMask, scope, caseSensitively);
return vFiles.isEmpty() ? VirtualFile.EMPTY_ARRAY : vFiles.toArray(new VirtualFile[vFiles.size()]);
final List<VirtualFile> result = new ArrayList<VirtualFile>(5);
Processor<VirtualFile> processor = Processors.cancelableCollectProcessor(result);
collectVirtualFilesWithWord(word, occurenceMask, scope, caseSensitively, processor);
return result.isEmpty() ? VirtualFile.EMPTY_ARRAY : result.toArray(new VirtualFile[result.size()]);
}
// IMPORTANT!!!
// Since implementation of virtualFileProcessor.process() may call indices directly or indirectly,
// we cannot call it inside FileBasedIndex.processValues() method except in collecting form
// If we do, deadlocks are possible (IDEADEV-42137). Process the files without not holding indices' read lock.
private boolean collectVirtualFilesWithWord(@NotNull final Processor<VirtualFile> fileProcessor,
@NotNull final String word, final short occurrenceMask,
@NotNull final GlobalSearchScope scope, final boolean caseSensitively) {
private boolean collectVirtualFilesWithWord(@NotNull final String word,
final short occurrenceMask,
@NotNull final GlobalSearchScope scope,
final boolean caseSensitively,
@NotNull final Processor<VirtualFile> fileProcessor) {
if (myProject.isDefault()) {
return true;
}
@@ -114,9 +119,10 @@ public class IndexCacheManagerImpl implements CacheManager{
@Override
public boolean processFilesWithWord(@NotNull final Processor<PsiFile> psiFileProcessor, @NotNull final String word, final short occurrenceMask, @NotNull final GlobalSearchScope scope, final boolean caseSensitively) {
final List<VirtualFile> vFiles = new ArrayList<VirtualFile>(5);
collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor<VirtualFile>(vFiles), word, occurrenceMask, scope, caseSensitively);
if (vFiles.isEmpty()) return true;
final List<VirtualFile> result = new ArrayList<VirtualFile>(5);
Processor<VirtualFile> processor = Processors.cancelableCollectProcessor(result);
collectVirtualFilesWithWord(word, occurrenceMask, scope, caseSensitively, processor);
if (result.isEmpty()) return true;
final Processor<VirtualFile> virtualFileProcessor = new ReadActionProcessor<VirtualFile>() {
@Override
@@ -135,7 +141,7 @@ public class IndexCacheManagerImpl implements CacheManager{
// we cannot call it inside FileBasedIndex.processValues() method
// If we do, deadlocks are possible (IDEADEV-42137). So first we obtain files with the word specified,
// and then process them not holding indices' read lock.
for (VirtualFile vFile : vFiles) {
for (VirtualFile vFile : result) {
ProgressIndicatorProvider.checkCanceled();
if (!virtualFileProcessor.process(vFile)) {
return false;
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -45,9 +45,9 @@ import com.intellij.psi.search.*;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageInfoFactory;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Function;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.SmartList;
import com.intellij.util.codeInsight.CommentUtilCore;
import com.intellij.util.containers.ContainerUtil;
@@ -99,9 +99,10 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
@Override
@NotNull
public PsiElement[] findCommentsContainingIdentifier(@NotNull String identifier, @NotNull SearchScope searchScope) {
final List<PsiElement> results = Collections.synchronizedList(new ArrayList<PsiElement>());
processCommentsContainingIdentifier(identifier, searchScope, new CommonProcessors.CollectProcessor<PsiElement>(results));
return PsiUtilCore.toPsiElementArray(results);
final List<PsiElement> result = Collections.synchronizedList(new ArrayList<>());
Processor<PsiElement> processor = Processors.cancelableCollectProcessor(result);
processCommentsContainingIdentifier(identifier, searchScope, processor);
return PsiUtilCore.toPsiElementArray(result);
}
@Override
@@ -405,13 +406,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
@NotNull Collection<VirtualFile> result) {
myManager.startBatchFilesProcessingMode();
try {
Processor<VirtualFile> processor = new CommonProcessors.CollectProcessor<VirtualFile>(result){
@Override
public boolean process(VirtualFile file) {
progress.checkCanceled();
return super.process(file);
}
};
Processor<VirtualFile> processor = Processors.cancelableCollectProcessor(result);
boolean success = processFilesWithText(scope, searchContext, caseSensitively, text, processor);
// success == false means exception in index
}
@@ -794,10 +789,10 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
final GlobalSearchScope commonScope = uniteScopes(data);
final Set<VirtualFile> intersectionWithContainerNameFiles = intersectionWithContainerNameFiles(commonScope, data, keys);
List<VirtualFile> files = new ArrayList<VirtualFile>();
Processor<VirtualFile> processor = new CommonProcessors.CollectProcessor<VirtualFile>(files);
List<VirtualFile> result = new ArrayList<VirtualFile>();
Processor<VirtualFile> processor = Processors.cancelableCollectProcessor(result);
processFilesContainingAllKeys(myManager.getProject(), commonScope, null, keys, processor);
for (final VirtualFile file : files) {
for (final VirtualFile file : result) {
progress.checkCanceled();
for (final IdIndexEntry entry : keys) {
DumbService.getInstance(myManager.getProject()).runReadActionInSmartMode(new Runnable() {
@@ -863,7 +858,8 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
return (context.intValue() & finalSearchContext) != 0;
}
};
processFilesContainingAllKeys(myManager.getProject(), commonScope, contextMatches, entries, new CommonProcessors.CollectProcessor<VirtualFile>(containerFiles));
Processor<VirtualFile> processor = Processors.cancelableCollectProcessor(containerFiles);
processFilesContainingAllKeys(myManager.getProject(), commonScope, contextMatches, entries, processor);
return containerFiles;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -23,8 +23,8 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileSystemItem;
import com.intellij.psi.PsiManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.SmartList;
import com.intellij.util.indexing.*;
import com.intellij.util.io.EnumeratorStringDescriptor;
@@ -189,7 +189,8 @@ public class FilenameIndex extends ScalarIndexExtension<String> {
@NotNull final GlobalSearchScope scope,
boolean includeDirs) {
SmartList<PsiFileSystemItem> result = new SmartList<PsiFileSystemItem>();
processFilesByName(name, includeDirs, new CommonProcessors.CollectProcessor<PsiFileSystemItem>(result), scope, project, null);
Processor<PsiFileSystemItem> processor = Processors.cancelableCollectProcessor(result);
processFilesByName(name, includeDirs, processor, scope, project, null);
if (includeDirs) {
return ArrayUtil.toObjectArray(result, PsiFileSystemItem.class);
@@ -169,8 +169,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx implements Pers
@TestOnly
public static List<HighlightInfo> getHighlights(@NotNull Document document, HighlightSeverity minSeverity, @NotNull Project project) {
List<HighlightInfo> infos = new ArrayList<>();
processHighlights(document, project, minSeverity, 0, document.getTextLength(),
new CommonProcessors.CollectProcessor<>(infos));
processHighlights(document, project, minSeverity, 0, document.getTextLength(), Processors.cancelableCollectProcessor(infos));
return infos;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -42,8 +42,8 @@ import com.intellij.psi.impl.source.tree.injected.InjectedLanguageManagerImpl;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.impl.source.tree.injected.Place;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -170,7 +170,7 @@ public class InjectedGeneralHighlightingPass extends GeneralHighlightingPass imp
}
}
InjectedLanguageManagerImpl injectedLanguageManager = InjectedLanguageManagerImpl.getInstanceImpl(myProject);
Processor<PsiElement> collectInjectableProcessor = new CommonProcessors.CollectProcessor<PsiElement>(hosts);
Processor<PsiElement> collectInjectableProcessor = Processors.cancelableCollectProcessor(hosts);
injectedLanguageManager.processInjectableElements(elements1, collectInjectableProcessor);
injectedLanguageManager.processInjectableElements(elements2, collectInjectableProcessor);
@@ -50,9 +50,9 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.PairProcessor;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -321,12 +321,13 @@ public class ShowIntentionsPass extends TextEditorHighlightingPass {
final int line = hostDocument.getLineNumber(offset);
MarkupModelEx model = (MarkupModelEx)DocumentMarkupModel.forDocument(hostDocument, project, true);
CommonProcessors.CollectProcessor<RangeHighlighterEx> processor = new CommonProcessors.CollectProcessor<RangeHighlighterEx>();
List<RangeHighlighterEx> result = new ArrayList<>();
Processor<RangeHighlighterEx> processor = Processors.cancelableCollectProcessor(result);
model.processRangeHighlightersOverlappingWith(hostDocument.getLineStartOffset(line),
hostDocument.getLineEndOffset(line),
processor);
for (RangeHighlighterEx highlighter : processor.getResults()) {
for (RangeHighlighterEx highlighter : result) {
GutterIntentionAction.addActions(project, hostEditor, hostFile, highlighter, intentions.guttersToShow);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -58,8 +58,8 @@ import com.intellij.usageView.UsageInfo;
import com.intellij.usages.FindUsagesProcessPresentation;
import com.intellij.usages.UsageLimitUtil;
import com.intellij.usages.impl.UsageViewManagerImpl;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.util.indexing.FileBasedIndexImpl;
@@ -476,7 +476,7 @@ class FindInProjectTask {
ApplicationManager.getApplication().runReadAction(new Runnable() {
@Override
public void run() {
FileBasedIndex.getInstance().getFilesWithKey(TrigramIndex.INDEX_ID, keys, new CommonProcessors.CollectProcessor<VirtualFile>(hits), scope);
FileBasedIndex.getInstance().getFilesWithKey(TrigramIndex.INDEX_ID, keys, Processors.cancelableCollectProcessor(hits), scope);
}
});
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -33,8 +33,8 @@ import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.FindSymbolParameters;
import com.intellij.util.indexing.IdFilter;
@@ -44,9 +44,7 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.*;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
@@ -166,7 +164,8 @@ public abstract class ContributorsBasedGotoByModel implements ChooseByNameModelE
public String[] getNames(final boolean checkBoxState) {
final THashSet<String> allNames = ContainerUtil.newTroveSet();
processNames(new CommonProcessors.CollectProcessor<String>(Collections.synchronizedCollection(allNames)), checkBoxState);
Collection<String> result = Collections.synchronizedCollection(allNames);
processNames(Processors.cancelableCollectProcessor(result), checkBoxState);
if (LOG.isDebugEnabled()) {
LOG.debug("getNames(): (got "+allNames.size()+" elements)");
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -24,14 +24,17 @@ import com.intellij.psi.PsiFileSystemItem;
import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.util.indexing.FindSymbolParameters;
import com.intellij.util.indexing.IdFilter;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class DefaultFileNavigationContributor implements ChooseByNameContributorEx, DumbAware {
@Override
@@ -59,10 +62,11 @@ public class DefaultFileNavigationContributor implements ChooseByNameContributor
@Override
@NotNull
public NavigationItem[] getItemsByName(String name, final String pattern, Project project, boolean includeNonProjectItems) {
CommonProcessors.CollectProcessor<NavigationItem> processor = new CommonProcessors.CollectProcessor<NavigationItem>();
List<NavigationItem> result = new ArrayList<>();
Processor<NavigationItem> processor = Processors.cancelableCollectProcessor(result);
processElementsWithName(name, processor, FindSymbolParameters.wrap(pattern, project, includeNonProjectItems));
return processor.toArray(new NavigationItem[processor.getResults().size()]);
return result.isEmpty() ? NavigationItem.EMPTY_NAVIGATION_ITEM_ARRAY : result.toArray(new NavigationItem[result.size()]);
}
@Override
@@ -44,8 +44,8 @@ import com.intellij.psi.impl.source.PsiFileImpl;
import com.intellij.psi.impl.source.PsiFileWithStubSupport;
import com.intellij.psi.impl.source.tree.FileElement;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.SmartList;
import com.intellij.util.ThrowableRunnable;
import com.intellij.util.containers.ContainerUtil;
@@ -268,8 +268,8 @@ public class StubIndexImpl extends StubIndex implements ApplicationComponent, Pe
@NotNull Project project,
@Nullable GlobalSearchScope scope,
IdFilter filter) {
final List<Psi> result = new SmartList<Psi>();
process(indexKey, key, project, scope, filter, new CommonProcessors.CollectProcessor<Psi>(result));
final List<Psi> result = new SmartList<>();
process(indexKey, key, project, scope, filter, Processors.cancelableCollectProcessor(result));
return result;
}
@@ -364,7 +364,7 @@ public class StubIndexImpl extends StubIndex implements ApplicationComponent, Pe
@NotNull
public <K> Collection<K> getAllKeys(@NotNull StubIndexKey<K, ?> indexKey, @NotNull Project project) {
Set<K> allKeys = ContainerUtil.newTroveSet();
processAllKeys(indexKey, project, new CommonProcessors.CollectProcessor<K>(allKeys));
processAllKeys(indexKey, project, Processors.cancelableCollectProcessor(allKeys));
return allKeys;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -612,7 +612,7 @@ public class FileBasedIndexImpl extends FileBasedIndex {
@NotNull
public <K> Collection<K> getAllKeys(@NotNull final ID<K, ?> indexId, @NotNull Project project) {
Set<K> allKeys = new THashSet<K>();
processAllKeys(indexId, new CommonProcessors.CollectProcessor<K>(allKeys), project);
processAllKeys(indexId, Processors.cancelableCollectProcessor(allKeys), project);
return allKeys;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -24,8 +24,8 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.ProjectAndLibrariesScope;
import com.intellij.psi.search.ProjectScopeImpl;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.SystemProperties;
import com.intellij.util.containers.ConcurrentIntObjectMap;
import com.intellij.util.containers.ContainerUtil;
@@ -393,7 +393,7 @@ public final class MapIndexStorage<Key, Value> implements IndexStorage<Key, Valu
@Override
public Collection<Key> getKeys() throws StorageException {
List<Key> keys = new ArrayList<Key>();
processKeys(new CommonProcessors.CollectProcessor<Key>(keys), null, null);
processKeys(Processors.cancelableCollectProcessor(keys), null, null);
return keys;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -17,8 +17,8 @@
package com.intellij.util.indexing;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -105,7 +105,7 @@ public class MemoryIndexStorage<Key, Value> implements IndexStorage<Key, Value>
@Override
public Collection<Key> getKeys() throws StorageException {
final Set<Key> keys = new HashSet<Key>();
processKeys(new CommonProcessors.CollectProcessor<Key>(keys), null, null);
processKeys(Processors.cancelableCollectProcessor(keys), null, null);
return keys;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -50,8 +50,8 @@ import com.intellij.usageView.UsageViewBundle;
import com.intellij.usages.*;
import com.intellij.util.Alarm;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.ui.RangeBlinker;
import com.intellij.xml.util.XmlStringUtil;
import org.jetbrains.annotations.NonNls;
@@ -269,7 +269,7 @@ class SearchForUsagesRunnable implements Runnable {
RangeBlinker rangeBlinker = new RangeBlinker(editor, attributes, 6);
List<Segment> segments = new ArrayList<Segment>();
CommonProcessors.CollectProcessor<Segment> processor = new CommonProcessors.CollectProcessor<Segment>(segments);
Processor<Segment> processor = Processors.cancelableCollectProcessor(segments);
usageInfo.processRangeMarkers(processor);
rangeBlinker.resetMarkers(segments);
rangeBlinker.startBlinking();
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -61,7 +61,7 @@ public class GroovyShortNamesCache extends PsiShortNamesCache {
@NotNull
public PsiClass[] getClassesByName(@NotNull @NonNls String name, @NotNull GlobalSearchScope scope) {
Collection<PsiClass> allClasses = new SmartList<PsiClass>();
processClassesWithName(name, new CommonProcessors.CollectProcessor<PsiClass>(allClasses), scope, null);
processClassesWithName(name, Processors.cancelableCollectProcessor(allClasses), scope, null);
if (allClasses.isEmpty()) return PsiClass.EMPTY_ARRAY;
return allClasses.toArray(new PsiClass[allClasses.size()]);
}
@@ -34,9 +34,7 @@ import com.intellij.psi.search.PsiElementProcessor;
import com.intellij.psi.search.PsiElementProcessorAdapter;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Function;
import com.intellij.util.NullableFunction;
import com.intellij.util.*;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashSet;
import gnu.trove.THashSet;
@@ -156,7 +154,8 @@ public class GroovyMarkerTypes {
final GrField field = (GrField)parent;
final CommonProcessors.CollectProcessor<PsiMethod> collectProcessor = new CommonProcessors.CollectProcessor<PsiMethod>(new THashSet<PsiMethod>());
Set<PsiMethod> result = new THashSet<>();
Processor<PsiMethod> collectProcessor = Processors.cancelableCollectProcessor(result);
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
@Override
public void run() {
@@ -173,7 +172,7 @@ public class GroovyMarkerTypes {
return;
}
PsiMethod[] overridings = collectProcessor.toArray(PsiMethod.EMPTY_ARRAY);
PsiMethod[] overridings = result.toArray(PsiMethod.EMPTY_ARRAY);
if (overridings.length == 0) return;
String title = DaemonBundle.message("navigation.title.overrider.method", field.getName(), overridings.length);
boolean showMethodNames = !PsiUtil.allMethodsHaveSameSignature(overridings);
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -39,10 +39,7 @@ import com.intellij.refactoring.util.occurrences.BaseOccurrenceManager;
import com.intellij.refactoring.util.occurrences.OccurrenceFilter;
import com.intellij.refactoring.util.occurrences.OccurrenceManager;
import com.intellij.ui.DocumentAdapter;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Function;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.SmartList;
import com.intellij.util.*;
import com.intellij.util.text.StringSearcher;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
@@ -122,7 +119,8 @@ public class DuplicateStringLiteralInspection extends BaseLocalInspectionTool {
}
progress.checkCanceled();
final Set<PsiFile> files = new THashSet<PsiFile>();
searchHelper.processAllFilesWithWordInLiterals(word, scope, new CommonProcessors.CollectProcessor<PsiFile>(files));
Processor<PsiFile> processor = Processors.cancelableCollectProcessor(files);
searchHelper.processAllFilesWithWordInLiterals(word, scope, processor);
if (resultFiles == null) {
resultFiles = files;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -40,8 +40,8 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.search.LowLevelSearchUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiSearchHelper;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.text.CharArrayUtil;
import com.intellij.util.text.StringSearcher;
import gnu.trove.THashSet;
@@ -341,7 +341,7 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool {
});
for (String word : words) {
final Set<PsiFile> files = new THashSet<PsiFile>();
searchHelper.processAllFilesWithWord(word, scope, new CommonProcessors.CollectProcessor<PsiFile>(files), true);
searchHelper.processAllFilesWithWord(word, scope, Processors.cancelableCollectProcessor(files), true);
if (resultFiles.isEmpty()) {
resultFiles.addAll(files);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -15,10 +15,7 @@
*/
package com.intellij.util.xml;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.*;
import org.jetbrains.annotations.Nullable;
import java.lang.annotation.Annotation;
@@ -87,7 +84,7 @@ public class JavaMethodSignature {
public final List<Method> getAllMethods(final Class startFrom) {
final List<Method> result = new ArrayList<Method>();
processMethods(startFrom, new CommonProcessors.CollectProcessor<Method>(result));
processMethods(startFrom, Processors.cancelableCollectProcessor(result));
return result;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -17,6 +17,7 @@ package com.intellij.util.xml;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -98,9 +99,10 @@ public class ModelMergerUtil {
@NotNull
public static <T> List<T> getFilteredImplementations(final T element) {
if (element == null) return Collections.emptyList();
final CommonProcessors.CollectProcessor<T> processor = new CommonProcessors.CollectProcessor<T>(new ArrayList<T>());
List<T> result = new ArrayList<>();
Processor<T> processor = Processors.cancelableCollectProcessor(result);
new ImplementationProcessor<T>(processor, false).process(element);
return (List<T>)processor.getResults();
return result;
}
@NotNull
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -38,7 +38,8 @@ import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.psi.xml.XmlToken;
import com.intellij.psi.xml.XmlTokenType;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.xml.XmlElementDescriptor;
import com.intellij.xml.XmlExtension;
@@ -120,12 +121,12 @@ public class DefaultXmlTagNameProvider implements XmlTagNameProvider {
}
}));
final FileBasedIndex fbi = FileBasedIndex.getInstance();
CommonProcessors.CollectProcessor<String> processor = new CommonProcessors.CollectProcessor<String>();
Collection<String> result = new ArrayList<>();
Processor<String> processor = Processors.cancelableCollectProcessor(result);
fbi.processAllKeys(XmlNamespaceIndex.NAME, processor, tag.getProject());
Collection<String> results = processor.getResults();
final GlobalSearchScope scope = new EverythingGlobalScope();
for (final String ns : results) {
for (final String ns : result) {
if (ns.startsWith("file://")) continue;
fbi.processValues(XmlNamespaceIndex.NAME, ns, null, new FileBasedIndex.ValueProcessor<XsdNamespaceBuilder>() {
@Override