summaryrefslogtreecommitdiff
path: root/platform/indexing-api/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'platform/indexing-api/src/com')
-rw-r--r--platform/indexing-api/src/com/intellij/psi/search/IndexPattern.java23
-rw-r--r--platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java5
-rw-r--r--platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java4
-rw-r--r--platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java3
-rw-r--r--platform/indexing-api/src/com/intellij/psi/stubs/StubIndex.java26
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