diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java index 2f5418631dae..aa386e3f2aac 100644 --- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java +++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java @@ -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 processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList<>(); + Processor 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 processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList<>(); + Processor 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 diff --git a/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java b/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java index 3c7798a4856b..d5d14a33f2aa 100644 --- a/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java +++ b/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java @@ -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> classesWithProximities = new ArrayList>(); - final CommonProcessors.CollectProcessor> processor = - new CommonProcessors.CollectProcessor>(classesWithProximities); + Processor> processor = + Processors.cancelableCollectProcessor(classesWithProximities); collectTests(klass, processor); return TestFinderHelper.getSortedElements(classesWithProximities, true); diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/PsiShortNamesCacheImpl.java b/java/java-indexing-impl/src/com/intellij/psi/impl/PsiShortNamesCacheImpl.java index 5db4819a8d02..90ebc0afcbf0 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/PsiShortNamesCacheImpl.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/PsiShortNamesCacheImpl.java @@ -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 set) { - processAllClassNames(new CommonProcessors.CollectProcessor(set)); + Processor processor = Processors.cancelableCollectProcessor(set); + processAllClassNames(processor); } @Override @@ -187,7 +185,7 @@ public class PsiShortNamesCacheImpl extends PsiShortNamesCache { @Override public void getAllMethodNames(@NotNull HashSet set) { - JavaMethodNameIndex.getInstance().processAllKeys(myManager.getProject(), new CommonProcessors.CollectProcessor(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 set) { - JavaFieldNameIndex.getInstance().processAllKeys(myManager.getProject(), new CommonProcessors.CollectProcessor(set)); + Processor processor = Processors.cancelableCollectProcessor(set); + JavaFieldNameIndex.getInstance().processAllKeys(myManager.getProject(), processor); } @Override diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaFunctionalExpressionSearcher.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaFunctionalExpressionSearcher.java index d2482955e8a1..edf61fe9f9a5 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaFunctionalExpressionSearcher.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaFunctionalExpressionSearcher.java @@ -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 usedMethodNames = newHashSet(); FileBasedIndex.getInstance().processAllKeys(JavaFunctionalExpressionIndex.JAVA_FUNCTIONAL_EXPRESSION_INDEX_ID, - new CommonProcessors.CollectProcessor(usedMethodNames), candidateScope, null); + Processors.cancelableCollectProcessor(usedMethodNames), candidateScope, null); final LinkedHashSet methods = newLinkedHashSet(); Processor methodProcessor = new Processor() { @@ -200,12 +200,9 @@ public class JavaFunctionalExpressionSearcher extends QueryExecutorBase candidateFiles) { final PsiManager psiManager = PsiManager.getInstance(project); - LinkedHashSet resolveScopes = newLinkedHashSet(mapNotNull(candidateFiles, new Function() { - @Override - public GlobalSearchScope fun(VirtualFile file) { - PsiFile psiFile = file.isValid() ? psiManager.findFile(file) : null; - return psiFile == null ? null : psiFile.getResolveScope(); - } + Set 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 getFilesWithFunctionalExpressionsScope(Project project, GlobalSearchScope useScope) { final Set files = newLinkedHashSet(); final PsiSearchHelperImpl helper = (PsiSearchHelperImpl)PsiSearchHelper.SERVICE.getInstance(project); - final CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(files); + Processor processor = Processors.cancelableCollectProcessor(files); helper.processFilesWithText(useScope, UsageSearchContext.IN_CODE, true, "::", processor); helper.processFilesWithText(useScope, UsageSearchContext.IN_CODE, true, "->", processor); return files; diff --git a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java index f63fcb976dd2..7dc93558ed09 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java @@ -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> compute() { - LinkedHashSet result = ContainerUtil.newLinkedHashSet(); + Set 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((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 result, @NotNull PsiParameter parameter) { + private static void collectSuperParameters(@NotNull Set 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 result, + private static void collectSuperMethods(@NotNull Set result, @NotNull HierarchicalMethodSignature signature, @NotNull PsiElement place, @NotNull PsiResolveHelper resolveHelper) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java index eb34fe1484d6..9f346a14b0d9 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java @@ -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>() { @Override public Result> compute() { - final CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(); + Collection result = new ArrayList(); + Processor 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); } diff --git a/java/openapi/src/com/intellij/util/xml/converters/AbstractMethodResolveConverter.java b/java/openapi/src/com/intellij/util/xml/converters/AbstractMethodResolveConverter.java index 9e849862e25d..b302858af972 100644 --- a/java/openapi/src/com/intellij/util/xml/converters/AbstractMethodResolveConverter.java +++ b/java/openapi/src/com/intellij/util/xml/converters/AbstractMethodResolveConverter.java @@ -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 getVariants(final ConvertContext context) { - LinkedHashSet methodList = new LinkedHashSet(); - Processor processor = CommonProcessors.notNullProcessor(new CommonProcessors.CollectProcessor(methodList)); + Set methodList = new LinkedHashSet(); + Processor processor = CommonProcessors.notNullProcessor(Processors.cancelableCollectProcessor(methodList)); processMethods(context, processor, new Function() { public PsiMethod[] fun(final PsiClass s) { final List list = ContainerUtil.findAll(getVariants(s), new Condition() { diff --git a/platform/core-api/src/com/intellij/util/AbstractQuery.java b/platform/core-api/src/com/intellij/util/AbstractQuery.java index 75dad0c8e351..f113b9310637 100644 --- a/platform/core-api/src/com/intellij/util/AbstractQuery.java +++ b/platform/core-api/src/com/intellij/util/AbstractQuery.java @@ -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 implements Query { @NotNull public Collection findAll() { assertNotProcessing(); - final CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList(); + Processor processor = Processors.cancelableCollectProcessor(result); forEach(processor); - return processor.getResults(); + return result; } @Override diff --git a/platform/core-api/src/com/intellij/util/FilteredQuery.java b/platform/core-api/src/com/intellij/util/FilteredQuery.java index 6c01bbc7fbd5..082831b9cf9c 100644 --- a/platform/core-api/src/com/intellij/util/FilteredQuery.java +++ b/platform/core-api/src/com/intellij/util/FilteredQuery.java @@ -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 implements Query { @Override @NotNull public Collection findAll() { - CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList(); + Processor processor = Processors.cancelableCollectProcessor(result); forEach(processor); - return processor.getResults(); + return result; } @NotNull diff --git a/platform/core-api/src/com/intellij/util/MergeQuery.java b/platform/core-api/src/com/intellij/util/MergeQuery.java index 35d122639cd3..cba56f0c9ea2 100644 --- a/platform/core-api/src/com/intellij/util/MergeQuery.java +++ b/platform/core-api/src/com/intellij/util/MergeQuery.java @@ -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 implements Query{ @NotNull public Collection findAll() { List results = new ArrayList(); - forEach(new CommonProcessors.CollectProcessor(results)); + Processor processor = Processors.cancelableCollectProcessor(results); + forEach(processor); return results; } diff --git a/platform/core-api/src/com/intellij/util/Processors.java b/platform/core-api/src/com/intellij/util/Processors.java new file mode 100644 index 000000000000..a5188f36391a --- /dev/null +++ b/platform/core-api/src/com/intellij/util/Processors.java @@ -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 Processor cancelableCollectProcessor(@NotNull Collection collection) { + return new CommonProcessors.CollectProcessor(collection){ + @Override + public boolean process(T t) { + ProgressManager.checkCanceled(); + return super.process(t); + } + }; + } +} diff --git a/platform/core-api/src/com/intellij/util/UniqueResultsQuery.java b/platform/core-api/src/com/intellij/util/UniqueResultsQuery.java index edecdca52596..e5e80a038c87 100644 --- a/platform/core-api/src/com/intellij/util/UniqueResultsQuery.java +++ b/platform/core-api/src/com/intellij/util/UniqueResultsQuery.java @@ -74,9 +74,10 @@ public class UniqueResultsQuery implements Query { @Override @NotNull public Collection findAll() { - final CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(Collections.synchronizedList(new ArrayList())); + List result = Collections.synchronizedList(new ArrayList()); + Processor processor = Processors.cancelableCollectProcessor(result); forEach(processor); - return processor.getResults(); + return result; } @NotNull diff --git a/platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java b/platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java index 4170423e0404..3f310d655fcd 100644 --- a/platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java +++ b/platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java @@ -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 requiredClass) { - final List result = new SmartList(); - getInstance().processElements(indexKey, key, project, scope, idFilter, requiredClass, new CommonProcessors.CollectProcessor(result)); + final List result = new SmartList<>(); + Processor processor = Processors.cancelableCollectProcessor(result); + getInstance().processElements(indexKey, key, project, scope, idFilter, requiredClass, processor); return result; } diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java index d2027575121a..56cd69539c68 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java @@ -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 processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList<>(); + Processor 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 vFiles = new ArrayList(5); - collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor(vFiles), word, occurenceMask, scope, caseSensitively); - return vFiles.isEmpty() ? VirtualFile.EMPTY_ARRAY : vFiles.toArray(new VirtualFile[vFiles.size()]); + final List result = new ArrayList(5); + Processor 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 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 fileProcessor) { if (myProject.isDefault()) { return true; } @@ -114,9 +119,10 @@ public class IndexCacheManagerImpl implements CacheManager{ @Override public boolean processFilesWithWord(@NotNull final Processor psiFileProcessor, @NotNull final String word, final short occurrenceMask, @NotNull final GlobalSearchScope scope, final boolean caseSensitively) { - final List vFiles = new ArrayList(5); - collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor(vFiles), word, occurrenceMask, scope, caseSensitively); - if (vFiles.isEmpty()) return true; + final List result = new ArrayList(5); + Processor processor = Processors.cancelableCollectProcessor(result); + collectVirtualFilesWithWord(word, occurrenceMask, scope, caseSensitively, processor); + if (result.isEmpty()) return true; final Processor virtualFileProcessor = new ReadActionProcessor() { @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; diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java index 4821959dabd8..594af44d87c3 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java @@ -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 results = Collections.synchronizedList(new ArrayList()); - processCommentsContainingIdentifier(identifier, searchScope, new CommonProcessors.CollectProcessor(results)); - return PsiUtilCore.toPsiElementArray(results); + final List result = Collections.synchronizedList(new ArrayList<>()); + Processor processor = Processors.cancelableCollectProcessor(result); + processCommentsContainingIdentifier(identifier, searchScope, processor); + return PsiUtilCore.toPsiElementArray(result); } @Override @@ -405,13 +406,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { @NotNull Collection result) { myManager.startBatchFilesProcessingMode(); try { - Processor processor = new CommonProcessors.CollectProcessor(result){ - @Override - public boolean process(VirtualFile file) { - progress.checkCanceled(); - return super.process(file); - } - }; + Processor 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 intersectionWithContainerNameFiles = intersectionWithContainerNameFiles(commonScope, data, keys); - List files = new ArrayList(); - Processor processor = new CommonProcessors.CollectProcessor(files); + List result = new ArrayList(); + Processor 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(containerFiles)); + Processor processor = Processors.cancelableCollectProcessor(containerFiles); + processFilesContainingAllKeys(myManager.getProject(), commonScope, contextMatches, entries, processor); return containerFiles; } diff --git a/platform/indexing-impl/src/com/intellij/psi/search/FilenameIndex.java b/platform/indexing-impl/src/com/intellij/psi/search/FilenameIndex.java index 88b11c19d0ef..1f1a94fc0cf9 100644 --- a/platform/indexing-impl/src/com/intellij/psi/search/FilenameIndex.java +++ b/platform/indexing-impl/src/com/intellij/psi/search/FilenameIndex.java @@ -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 { @NotNull final GlobalSearchScope scope, boolean includeDirs) { SmartList result = new SmartList(); - processFilesByName(name, includeDirs, new CommonProcessors.CollectProcessor(result), scope, project, null); + Processor processor = Processors.cancelableCollectProcessor(result); + processFilesByName(name, includeDirs, processor, scope, project, null); if (includeDirs) { return ArrayUtil.toObjectArray(result, PsiFileSystemItem.class); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java index 2a6b335e278d..543146b2e118 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java @@ -169,8 +169,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx implements Pers @TestOnly public static List getHighlights(@NotNull Document document, HighlightSeverity minSeverity, @NotNull Project project) { List 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; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java index be7924e32838..988fe04afe80 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java @@ -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 collectInjectableProcessor = new CommonProcessors.CollectProcessor(hosts); + Processor collectInjectableProcessor = Processors.cancelableCollectProcessor(hosts); injectedLanguageManager.processInjectableElements(elements1, collectInjectableProcessor); injectedLanguageManager.processInjectableElements(elements2, collectInjectableProcessor); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java index eac42ae41b2d..b1d452bbfec5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowIntentionsPass.java @@ -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 processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList<>(); + Processor 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); } diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java index 8931ddb97c2f..eb77f2dd92d2 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java @@ -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(hits), scope); + FileBasedIndex.getInstance().getFilesWithKey(TrigramIndex.INDEX_ID, keys, Processors.cancelableCollectProcessor(hits), scope); } }); diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java index fa620826c771..4b0bb2f5bd58 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java @@ -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 allNames = ContainerUtil.newTroveSet(); - processNames(new CommonProcessors.CollectProcessor(Collections.synchronizedCollection(allNames)), checkBoxState); + Collection result = Collections.synchronizedCollection(allNames); + processNames(Processors.cancelableCollectProcessor(result), checkBoxState); if (LOG.isDebugEnabled()) { LOG.debug("getNames(): (got "+allNames.size()+" elements)"); } diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultFileNavigationContributor.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultFileNavigationContributor.java index 7eddeaf597b3..81a52499ede8 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultFileNavigationContributor.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultFileNavigationContributor.java @@ -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 processor = new CommonProcessors.CollectProcessor(); + List result = new ArrayList<>(); + Processor 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 diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java index 650c3fa3af6f..75decb6519b7 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java @@ -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 result = new SmartList(); - process(indexKey, key, project, scope, filter, new CommonProcessors.CollectProcessor(result)); + final List 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 Collection getAllKeys(@NotNull StubIndexKey indexKey, @NotNull Project project) { Set allKeys = ContainerUtil.newTroveSet(); - processAllKeys(indexKey, project, new CommonProcessors.CollectProcessor(allKeys)); + processAllKeys(indexKey, project, Processors.cancelableCollectProcessor(allKeys)); return allKeys; } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index eed7cc24817d..cb08da424c04 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -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 Collection getAllKeys(@NotNull final ID indexId, @NotNull Project project) { Set allKeys = new THashSet(); - processAllKeys(indexId, new CommonProcessors.CollectProcessor(allKeys), project); + processAllKeys(indexId, Processors.cancelableCollectProcessor(allKeys), project); return allKeys; } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/MapIndexStorage.java b/platform/lang-impl/src/com/intellij/util/indexing/MapIndexStorage.java index 053876f1d5a5..92308c9f06e6 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/MapIndexStorage.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/MapIndexStorage.java @@ -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 implements IndexStorage getKeys() throws StorageException { List keys = new ArrayList(); - processKeys(new CommonProcessors.CollectProcessor(keys), null, null); + processKeys(Processors.cancelableCollectProcessor(keys), null, null); return keys; } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java b/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java index 9a410b2f615c..6055feb67a0a 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/MemoryIndexStorage.java @@ -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 implements IndexStorage @Override public Collection getKeys() throws StorageException { final Set keys = new HashSet(); - processKeys(new CommonProcessors.CollectProcessor(keys), null, null); + processKeys(Processors.cancelableCollectProcessor(keys), null, null); return keys; } diff --git a/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java b/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java index 4a83e8560de1..47ff347332d0 100644 --- a/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java +++ b/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java @@ -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 segments = new ArrayList(); - CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(segments); + Processor processor = Processors.cancelableCollectProcessor(segments); usageInfo.processRangeMarkers(processor); rangeBlinker.resetMarkers(segments); rangeBlinker.startBlinking(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyShortNamesCache.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyShortNamesCache.java index a400c486b663..81f62544ae04 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyShortNamesCache.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyShortNamesCache.java @@ -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 allClasses = new SmartList(); - processClassesWithName(name, new CommonProcessors.CollectProcessor(allClasses), scope, null); + processClassesWithName(name, Processors.cancelableCollectProcessor(allClasses), scope, null); if (allClasses.isEmpty()) return PsiClass.EMPTY_ARRAY; return allClasses.toArray(new PsiClass[allClasses.size()]); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java index 30709c054260..2ca7f7eba3c6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java @@ -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 collectProcessor = new CommonProcessors.CollectProcessor(new THashSet()); + Set result = new THashSet<>(); + Processor 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); diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java b/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java index b696de3aa241..81360dd665dc 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java @@ -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 files = new THashSet(); - searchHelper.processAllFilesWithWordInLiterals(word, scope, new CommonProcessors.CollectProcessor(files)); + Processor processor = Processors.cancelableCollectProcessor(files); + searchHelper.processAllFilesWithWordInLiterals(word, scope, processor); if (resultFiles == null) { resultFiles = files; } diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java index ca354ed17f42..56d86b635e0d 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java @@ -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 files = new THashSet(); - searchHelper.processAllFilesWithWord(word, scope, new CommonProcessors.CollectProcessor(files), true); + searchHelper.processAllFilesWithWord(word, scope, Processors.cancelableCollectProcessor(files), true); if (resultFiles.isEmpty()) { resultFiles.addAll(files); } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/JavaMethodSignature.java b/xml/dom-openapi/src/com/intellij/util/xml/JavaMethodSignature.java index 3e82904ad3d7..a4ba51f35e5b 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/JavaMethodSignature.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/JavaMethodSignature.java @@ -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 getAllMethods(final Class startFrom) { final List result = new ArrayList(); - processMethods(startFrom, new CommonProcessors.CollectProcessor(result)); + processMethods(startFrom, Processors.cancelableCollectProcessor(result)); return result; } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ModelMergerUtil.java b/xml/dom-openapi/src/com/intellij/util/xml/ModelMergerUtil.java index 2b38c6a965e5..0277ae91f3c5 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ModelMergerUtil.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ModelMergerUtil.java @@ -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 List getFilteredImplementations(final T element) { if (element == null) return Collections.emptyList(); - final CommonProcessors.CollectProcessor processor = new CommonProcessors.CollectProcessor(new ArrayList()); + List result = new ArrayList<>(); + Processor processor = Processors.cancelableCollectProcessor(result); new ImplementationProcessor(processor, false).process(element); - return (List)processor.getResults(); + return result; } @NotNull diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java index 9431771f12b7..2c3aef84ea9a 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java @@ -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 processor = new CommonProcessors.CollectProcessor(); + Collection result = new ArrayList<>(); + Processor processor = Processors.cancelableCollectProcessor(result); fbi.processAllKeys(XmlNamespaceIndex.NAME, processor, tag.getProject()); - Collection 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() { @Override