diff options
Diffstat (limited to 'platform/indexing-api/src/com')
5 files changed, 40 insertions, 21 deletions
diff --git a/platform/indexing-api/src/com/intellij/psi/search/IndexPattern.java b/platform/indexing-api/src/com/intellij/psi/search/IndexPattern.java index fc5de78f9407..0066c260f1b3 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/IndexPattern.java +++ b/platform/indexing-api/src/com/intellij/psi/search/IndexPattern.java @@ -16,6 +16,7 @@ package com.intellij.psi.search; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -29,6 +30,7 @@ import java.util.regex.PatternSyntaxException; */ public class IndexPattern { @NotNull private String myPatternString; + private Pattern myOptimizedIndexingPattern; private boolean myCaseSensitive; private Pattern myPattern; @@ -49,10 +51,14 @@ public class IndexPattern { return myPatternString; } - public Pattern getPattern() { + public @Nullable Pattern getPattern() { return myPattern; } + public @Nullable Pattern getOptimizedIndexingPattern() { + return myOptimizedIndexingPattern; + } + public boolean isCaseSensitive() { return myCaseSensitive; } @@ -68,16 +74,21 @@ public class IndexPattern { } private void compilePattern() { - try{ - if (myCaseSensitive){ - myPattern = Pattern.compile(myPatternString); + try { + int flags = 0; + if (!myCaseSensitive) { + flags = Pattern.CASE_INSENSITIVE; } - else{ - myPattern = Pattern.compile(myPatternString, Pattern.CASE_INSENSITIVE); + myPattern = Pattern.compile(myPatternString, flags); + String optimizedPattern = myPatternString; + if (optimizedPattern.startsWith(".*")) { + optimizedPattern = optimizedPattern.substring(".*".length()); } + myOptimizedIndexingPattern = Pattern.compile(optimizedPattern, flags); } catch(PatternSyntaxException e){ myPattern = null; + myOptimizedIndexingPattern = null; } } diff --git a/platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java b/platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java index 741b31cd8681..cc283d0bb2b7 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java +++ b/platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java @@ -23,6 +23,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.util.Processor; +import org.intellij.lang.annotations.MagicConstant; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -166,13 +167,13 @@ public interface PsiSearchHelper { boolean processElementsWithWord(@NotNull TextOccurenceProcessor processor, @NotNull SearchScope searchScope, @NotNull String text, - short searchContext, + @MagicConstant(flagsFromClass = UsageSearchContext.class) short searchContext, boolean caseSensitive); boolean processElementsWithWord(@NotNull TextOccurenceProcessor processor, @NotNull SearchScope searchScope, @NotNull String text, - short searchContext, + @MagicConstant(flagsFromClass = UsageSearchContext.class) short searchContext, boolean caseSensitive, boolean processInjectedPsi); diff --git a/platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java b/platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java index dfc421799f7e..2cfa12ecf1dd 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java +++ b/platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java @@ -39,6 +39,10 @@ public final class SingleTargetRequestResultProcessor extends RequestResultProce @Override public boolean processTextOccurrence(@NotNull PsiElement element, int offsetInElement, @NotNull final Processor<PsiReference> consumer) { + if (!myTarget.isValid()) { + return false; + } + final List<PsiReference> references = ourReferenceService.getReferences(element, new PsiReferenceService.Hints(myTarget, offsetInElement)); for (PsiReference ref : references) { diff --git a/platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java b/platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java index 6e6ce92a2108..118592a336f5 100644 --- a/platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java +++ b/platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java @@ -19,6 +19,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Processor; +import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -34,7 +35,7 @@ public abstract class AbstractStubIndex<Key, Psi extends PsiElement> implements return StubIndex.getInstance().processAllKeys(getKey(), project, processor); } - public Collection<Psi> get(Key key, final Project project, final GlobalSearchScope scope) { + public Collection<Psi> get(@NotNull Key key, @NotNull final Project project, @NotNull final GlobalSearchScope scope) { return StubIndex.getInstance().get(getKey(), key, project, scope); } 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 ce12c57e10d9..11074f83781f 100644 --- a/platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java +++ b/platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java @@ -26,6 +26,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtilCore; +import com.intellij.util.ObjectUtils; import com.intellij.util.Processor; import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.indexing.IdFilter; @@ -51,7 +52,7 @@ public abstract class StubIndex { public abstract <Key, Psi extends PsiElement> Collection<Psi> get(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull Project project, - final GlobalSearchScope scope); + @Nullable final GlobalSearchScope scope); /** * @deprecated use {@link #getElements(StubIndexKey, Object, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope, Class)} @@ -59,7 +60,7 @@ public abstract class StubIndex { public <Key, Psi extends PsiElement> Collection<Psi> get(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull Project project, - final GlobalSearchScope scope, + @Nullable final GlobalSearchScope scope, IdFilter filter) { return get(indexKey, key, project, scope); } @@ -70,7 +71,7 @@ public abstract class StubIndex { public <Key, Psi extends PsiElement> boolean process(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull Project project, - GlobalSearchScope scope, + @Nullable GlobalSearchScope scope, @NotNull Processor<? super Psi> processor) { return processElements(indexKey, key, project, scope, (Class<Psi>)PsiElement.class, processor); } @@ -78,7 +79,7 @@ public abstract class StubIndex { public abstract <Key, Psi extends PsiElement> boolean processElements(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull Project project, - GlobalSearchScope scope, + @Nullable GlobalSearchScope scope, Class<Psi> requiredClass, @NotNull Processor<? super Psi> processor); @@ -88,8 +89,8 @@ public abstract class StubIndex { public <Key, Psi extends PsiElement> boolean process(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull Project project, - GlobalSearchScope scope, - IdFilter idFilter, + @Nullable GlobalSearchScope scope, + @SuppressWarnings("UnusedParameters") IdFilter idFilter, @NotNull Processor<? super Psi> processor) { return process(indexKey, key, project, scope, processor); } @@ -97,9 +98,9 @@ public abstract class StubIndex { public <Key, Psi extends PsiElement> boolean processElements(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull Project project, - GlobalSearchScope scope, + @Nullable GlobalSearchScope scope, IdFilter idFilter, - Class<Psi> requiredClass, + @NotNull Class<Psi> requiredClass, @NotNull Processor<? super Psi> processor) { return process(indexKey, key, project, scope, processor); } @@ -109,8 +110,9 @@ public abstract class StubIndex { public abstract <K> boolean processAllKeys(@NotNull StubIndexKey<K, ?> indexKey, @NotNull Project project, Processor<K> processor); - public <K> boolean processAllKeys(@NotNull StubIndexKey<K, ?> indexKey, Processor<K> processor, GlobalSearchScope scope, @Nullable IdFilter idFilter) { - return processAllKeys(indexKey, scope.getProject(), processor); + public <K> boolean processAllKeys(@NotNull StubIndexKey<K, ?> indexKey, @NotNull Processor<K> processor, + @NotNull GlobalSearchScope scope, @Nullable IdFilter idFilter) { + return processAllKeys(indexKey, ObjectUtils.assertNotNull(scope.getProject()), processor); } /** @@ -127,7 +129,7 @@ public abstract class StubIndex { public static <Key, Psi extends PsiElement> Collection<Psi> getElements(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull final Project project, - final GlobalSearchScope scope, + @Nullable final GlobalSearchScope scope, @NotNull Class<Psi> requiredClass) { return getElements(indexKey, key, project, scope, null, requiredClass); } @@ -135,7 +137,7 @@ public abstract class StubIndex { public static <Key, Psi extends PsiElement> Collection<Psi> getElements(@NotNull StubIndexKey<Key, Psi> indexKey, @NotNull Key key, @NotNull final Project project, - final GlobalSearchScope scope, + @Nullable final GlobalSearchScope scope, @Nullable IdFilter idFilter, @NotNull Class<Psi> requiredClass) { //noinspection deprecation |