From 625d22c12305fbf85de0d40064ab33bc1409b1b7 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 23 Jun 2016 09:29:19 +0200 Subject: [PATCH] index less files for stub hierarchy: no test data, no kotlin classes --- .../stubsHierarchy/impl/JavaStubIndexer.java | 8 +++++++- .../impl/StubHierarchyIndex.java | 20 +++++++++++++++++-- .../impl/test/BuildStubsHierarchyAction.java | 11 +++++++--- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/JavaStubIndexer.java b/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/JavaStubIndexer.java index b685d2863800..550c33b9c74e 100644 --- a/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/JavaStubIndexer.java +++ b/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/JavaStubIndexer.java @@ -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 diff --git a/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/StubHierarchyIndex.java b/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/StubHierarchyIndex.java index f09aea027c2a..2550e2fb528a 100644 --- a/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/StubHierarchyIndex.java +++ b/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/StubHierarchyIndex.java @@ -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 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 diff --git a/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/test/BuildStubsHierarchyAction.java b/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/test/BuildStubsHierarchyAction.java index 231c1d974e90..8bfa6ef70116 100644 --- a/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/test/BuildStubsHierarchyAction.java +++ b/java/java-impl/src/com/intellij/psi/stubsHierarchy/impl/test/BuildStubsHierarchyAction.java @@ -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 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()); } }