index less files for stub hierarchy: no test data, no kotlin classes

This commit is contained in:
peter
2016-06-23 12:47:14 +02:00
parent aa6cb26c0b
commit 625d22c123
3 changed files with 33 additions and 6 deletions
@@ -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
@@ -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());
}
}