mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
use new api for better candidates (belonging to navigatable scope)
This commit is contained in:
+29
-7
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.ide.util.gotoByName;
|
||||
|
||||
import com.intellij.navigation.EfficientChooseByNameContributor;
|
||||
import com.intellij.navigation.GotoClassContributor;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -22,14 +23,27 @@ import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.presentation.java.SymbolPresentationUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.indexing.IdFilter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class DefaultClassNavigationContributor implements GotoClassContributor {
|
||||
public class DefaultClassNavigationContributor implements EfficientChooseByNameContributor, GotoClassContributor {
|
||||
@Override
|
||||
@NotNull
|
||||
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>();
|
||||
processNames(processor, scope, DefaultFileNavigationContributor.getFilter(project, includeNonProjectItems));
|
||||
|
||||
return ArrayUtil.toStringArray(processor.getResults());
|
||||
}
|
||||
|
||||
return PsiShortNamesCache.getInstance(project).getAllClassNames();
|
||||
}
|
||||
|
||||
@@ -54,18 +68,26 @@ public class DefaultClassNavigationContributor implements GotoClassContributor {
|
||||
@Override
|
||||
public String getQualifiedName(final NavigationItem item) {
|
||||
if (item instanceof PsiClass) {
|
||||
final PsiClass psiClass = (PsiClass)item;
|
||||
final String qName = psiClass.getQualifiedName();
|
||||
if (qName != null) return qName;
|
||||
|
||||
final String containerText = SymbolPresentationUtil.getSymbolContainerText(psiClass);
|
||||
return containerText + "." + psiClass.getName();
|
||||
return getQualifiedNameForClass((PsiClass)item);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getQualifiedNameForClass(PsiClass psiClass) {
|
||||
final String qName = psiClass.getQualifiedName();
|
||||
if (qName != null) return qName;
|
||||
|
||||
final String containerText = SymbolPresentationUtil.getSymbolContainerText(psiClass);
|
||||
return containerText + "." + psiClass.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQualifiedNameSeparator() {
|
||||
return ".";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processNames(Processor<String> processor, GlobalSearchScope scope, IdFilter filter) {
|
||||
PsiShortNamesCache.getInstance(scope.getProject()).processAllClassNames(processor, scope, filter);
|
||||
}
|
||||
}
|
||||
@@ -20,9 +20,11 @@ import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.indexing.IdFilter;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -89,6 +91,10 @@ public abstract class PsiShortNamesCache {
|
||||
return ContainerUtil.process(getAllClassNames(), processor);
|
||||
}
|
||||
|
||||
public boolean processAllClassNames(Processor<String> processor, GlobalSearchScope scope, IdFilter filter) {
|
||||
return ContainerUtil.process(getAllClassNames(), processor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the names of all classes in the project and (optionally) libraries
|
||||
* to the specified set.
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.indexing.IdFilter;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -105,6 +106,16 @@ public class CompositeShortNamesCache extends PsiShortNamesCache {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processAllClassNames(Processor<String> processor, GlobalSearchScope scope, IdFilter filter) {
|
||||
for (PsiShortNamesCache cache : myCaches) {
|
||||
if (!cache.processAllClassNames(processor, scope, filter)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getAllClassNames(@NotNull HashSet<String> dest) {
|
||||
for (PsiShortNamesCache cache : myCaches) {
|
||||
|
||||
@@ -32,6 +32,8 @@ import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.indexing.IdFilter;
|
||||
import gnu.trove.THashSet;
|
||||
import gnu.trove.TObjectHashingStrategy;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -114,6 +116,11 @@ public class PsiShortNamesCacheImpl extends PsiShortNamesCache {
|
||||
return JavaShortClassNameIndex.getInstance().processAllKeys(myManager.getProject(), processor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processAllClassNames(Processor<String> processor, GlobalSearchScope scope, IdFilter filter) {
|
||||
return StubIndex.getInstance().processAllKeys(JavaStubIndexKeys.CLASS_SHORT_NAMES, processor, scope, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiMethod[] getMethodsByName(@NotNull String name, @NotNull final GlobalSearchScope scope) {
|
||||
|
||||
+12
@@ -26,6 +26,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.stubs.StringStubIndexExtension;
|
||||
import com.intellij.psi.stubs.StubIndex;
|
||||
import com.intellij.psi.stubs.StubIndexKey;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -33,10 +34,16 @@ import java.util.Collection;
|
||||
public class JavaShortClassNameIndex extends StringStubIndexExtension<PsiClass> {
|
||||
|
||||
private static final JavaShortClassNameIndex ourInstance = new JavaShortClassNameIndex();
|
||||
|
||||
public static JavaShortClassNameIndex getInstance() {
|
||||
return ourInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVersion() {
|
||||
return super.getVersion() + (FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping ? 1 : 0);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public StubIndexKey<String, PsiClass> getKey() {
|
||||
@@ -47,4 +54,9 @@ public class JavaShortClassNameIndex extends StringStubIndexExtension<PsiClass>
|
||||
public Collection<PsiClass> get(final String s, final Project project, @NotNull final GlobalSearchScope scope) {
|
||||
return StubIndex.getInstance().safeGet(getKey(), s, project, new JavaSourceFilterScope(scope), PsiClass.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean traceKeyHashToVirtualFileMapping() {
|
||||
return FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping;
|
||||
}
|
||||
}
|
||||
@@ -71,7 +71,7 @@ public class FilenameIndex extends ScalarIndexExtension<String> {
|
||||
|
||||
@Override
|
||||
public int getVersion() {
|
||||
return 1;
|
||||
return 1 + (FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping ? 1 : 0);
|
||||
}
|
||||
|
||||
public static String[] getAllFilenames(Project project) {
|
||||
@@ -160,4 +160,9 @@ public class FilenameIndex extends ScalarIndexExtension<String> {
|
||||
}
|
||||
return files;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean traceKeyHashToVirtualFileMapping() {
|
||||
return FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping;
|
||||
}
|
||||
}
|
||||
|
||||
+76
-2
@@ -16,21 +16,83 @@
|
||||
package com.intellij.ide.util.gotoByName;
|
||||
|
||||
import com.intellij.navigation.ChooseByNameContributor;
|
||||
import com.intellij.navigation.EfficientChooseByNameContributor;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ContentIterator;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileWithId;
|
||||
import com.intellij.psi.PsiFileSystemItem;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.ProjectScope;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.indexing.FileBasedIndexImpl;
|
||||
import com.intellij.util.indexing.IdFilter;
|
||||
import gnu.trove.THashSet;
|
||||
import gnu.trove.TIntArrayList;
|
||||
import gnu.trove.TIntHashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class DefaultFileNavigationContributor implements ChooseByNameContributor, DumbAware {
|
||||
import java.util.BitSet;
|
||||
|
||||
public class DefaultFileNavigationContributor implements EfficientChooseByNameContributor, DumbAware {
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String[] getNames(Project project, boolean includeNonProjectItems) {
|
||||
return FilenameIndex.getAllFilenames(project);
|
||||
if (FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping) {
|
||||
final THashSet<String> names = new THashSet<String>(1000);
|
||||
IdFilter filter = getFilter(project, includeNonProjectItems);
|
||||
processNames(new Processor<String>() {
|
||||
@Override
|
||||
public boolean process(String s) {
|
||||
names.add(s);
|
||||
return true;
|
||||
}
|
||||
}, getScope(project, includeNonProjectItems), filter);
|
||||
System.out.println("All names retrieved2:" + names.size());
|
||||
return ArrayUtil.toStringArray(names);
|
||||
} else {
|
||||
return FilenameIndex.getAllFilenames(project);
|
||||
}
|
||||
}
|
||||
|
||||
public static GlobalSearchScope getScope(Project project, boolean includeNonProjectItems) {
|
||||
return includeNonProjectItems ? GlobalSearchScope.projectScope(project) : GlobalSearchScope.allScope(project);
|
||||
}
|
||||
|
||||
public static IdFilter getFilter(Project project, boolean includeNonProjectItems) {
|
||||
long started = System.currentTimeMillis();
|
||||
final BitSet idSet = new BitSet();
|
||||
|
||||
ContentIterator iterator = new ContentIterator() {
|
||||
@Override
|
||||
public boolean processFile(VirtualFile fileOrDir) {
|
||||
idSet.set(
|
||||
((VirtualFileWithId)fileOrDir).getId()
|
||||
);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
if (!includeNonProjectItems) {
|
||||
ProjectRootManager.getInstance(project).getFileIndex().iterateContent(iterator);
|
||||
} else {
|
||||
FileBasedIndex.getInstance().iterateIndexableFiles(iterator, project, null);
|
||||
}
|
||||
|
||||
System.out.println("Done filter " + (System.currentTimeMillis() -started) + ":" + idSet.size());
|
||||
return new IdFilter() {
|
||||
@Override
|
||||
public boolean contains(int id) {
|
||||
return idSet.get(id);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -48,4 +110,16 @@ public class DefaultFileNavigationContributor implements ChooseByNameContributor
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processNames(final Processor<String> processor, GlobalSearchScope scope, IdFilter filter) {
|
||||
long started = System.currentTimeMillis();
|
||||
FileBasedIndex.getInstance().processAllKeys(FilenameIndex.NAME, new Processor<String>() {
|
||||
@Override
|
||||
public boolean process(String s) {
|
||||
return processor.process(s);
|
||||
}
|
||||
}, scope, filter);
|
||||
System.out.println("All names retrieved:" + (System.currentTimeMillis() - started));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,9 +22,11 @@ import com.intellij.navigation.ChooseByNameContributor;
|
||||
import com.intellij.navigation.ChooseByNameRegistry;
|
||||
import com.intellij.navigation.GotoClassContributor;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -146,4 +148,9 @@ public class GotoClassModel2 extends FilteringGotoByModel<Language> {
|
||||
public boolean willOpenEditor() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sameNamesForProjectAndLibraries() {
|
||||
return !FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ex.WindowManagerEx;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileSystemItem;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -114,6 +115,11 @@ public class GotoFileModel extends FilteringGotoByModel<FileType> {
|
||||
return new GotoFileCellRenderer(myMaxSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sameNamesForProjectAndLibraries() {
|
||||
return !FileBasedIndex.ourEnableTracingOfKeyHashToVirtualFileMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getFullName(final Object element) {
|
||||
|
||||
Reference in New Issue
Block a user