mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
index less files for stub hierarchy: no test data, no kotlin classes
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.PsiNameHelper;
|
||||
import com.intellij.psi.PsiReferenceList;
|
||||
import com.intellij.psi.compiled.ClassFileDecompilers;
|
||||
import com.intellij.psi.impl.cache.ModifierFlags;
|
||||
import com.intellij.psi.impl.java.stubs.*;
|
||||
import com.intellij.psi.impl.java.stubs.hierarchy.IndexTree;
|
||||
@@ -50,7 +51,12 @@ public class JavaStubIndexer extends StubHierarchyIndexer {
|
||||
@Override
|
||||
public boolean handlesFile(@NotNull VirtualFile file) {
|
||||
FileType fileType = file.getFileType();
|
||||
return fileType == JavaFileType.INSTANCE || fileType == JavaClassFileType.INSTANCE;
|
||||
return fileType == JavaFileType.INSTANCE ||
|
||||
fileType == JavaClassFileType.INSTANCE && hasDefaultStubBuilder(file);
|
||||
}
|
||||
|
||||
private static boolean hasDefaultStubBuilder(@NotNull VirtualFile file) {
|
||||
return !(ClassFileDecompilers.find(file) instanceof ClassFileDecompilers.Full);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -15,8 +15,12 @@
|
||||
*/
|
||||
package com.intellij.psi.stubsHierarchy.impl;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.impl.java.stubs.hierarchy.IndexTree;
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaUnitDescriptor;
|
||||
import com.intellij.psi.stubsHierarchy.StubHierarchyIndexer;
|
||||
@@ -75,13 +79,25 @@ public class StubHierarchyIndex extends FileBasedIndexExtension<String, IndexTre
|
||||
|
||||
@Override
|
||||
public int getVersion() {
|
||||
return IndexTree.STUB_HIERARCHY_ENABLED ? 1 + Arrays.stream(ourIndexers).mapToInt(StubHierarchyIndexer::getVersion).sum() : 0;
|
||||
return IndexTree.STUB_HIERARCHY_ENABLED ? 2 + Arrays.stream(ourIndexers).mapToInt(StubHierarchyIndexer::getVersion).sum() : 0;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return file -> IndexTree.STUB_HIERARCHY_ENABLED && Arrays.stream(ourIndexers).anyMatch(indexer -> indexer.handlesFile(file));
|
||||
return file -> IndexTree.STUB_HIERARCHY_ENABLED &&
|
||||
Arrays.stream(ourIndexers).anyMatch(indexer -> indexer.handlesFile(file)) &&
|
||||
isSourceOrLibrary(file);
|
||||
}
|
||||
|
||||
private static boolean isSourceOrLibrary(VirtualFile file) {
|
||||
for (Project project : ProjectManager.getInstance().getOpenProjects()) {
|
||||
ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(project);
|
||||
if (index.isInLibraryClasses(file) || index.isInSourceContent(file)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+8
-3
@@ -21,6 +21,8 @@ import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.ThrowableComputable;
|
||||
import com.intellij.psi.stubsHierarchy.ClassHierarchy;
|
||||
import com.intellij.psi.stubsHierarchy.HierarchyService;
|
||||
|
||||
public class BuildStubsHierarchyAction extends InheritanceAction {
|
||||
@@ -34,8 +36,11 @@ public class BuildStubsHierarchyAction extends InheritanceAction {
|
||||
service.clearHierarchy();
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> ReadAction.run(service::getHierarchy),
|
||||
"Building Hierarchy", false, project);
|
||||
LOG.info("Building stub hierarchy took " + (System.currentTimeMillis() - start) + " ms");
|
||||
ThrowableComputable<ClassHierarchy, RuntimeException> computable = () -> ReadAction.compute(service::getHierarchy);
|
||||
ClassHierarchy hierarchy = ProgressManager.getInstance().runProcessWithProgressSynchronously(computable, "Building Hierarchy", false, project);
|
||||
long elapsed = System.currentTimeMillis() - start;
|
||||
LOG.info("Building stub hierarchy took " + elapsed + " ms" +
|
||||
"; classes=" + hierarchy.getAllClasses().size() +
|
||||
"; covered=" + hierarchy.getCoveredClasses().size());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user