From 472ec168d505561fe888e1d3de6461f2dc6a9c6c Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 14 Aug 2012 20:38:20 +0200 Subject: [PATCH] don't parse non-stubbed java files in library classes --- .../core/CoreJavaDirectoryService.java | 7 ++++++ .../classesAndSources/classesAndSources.jar | Bin 0 -> 634 bytes .../psi/resolve/ResolveInLibrariesTest.groovy | 20 ++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 java/java-tests/testData/libResolve/classesAndSources/classesAndSources.jar diff --git a/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java b/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java index 23ce0c9ce054..b07f20df3b5a 100644 --- a/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java +++ b/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java @@ -17,8 +17,10 @@ package com.intellij.core; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; +import com.intellij.psi.impl.compiled.ClsFileImpl; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -42,8 +44,13 @@ public class CoreJavaDirectoryService extends JavaDirectoryService { public PsiClass[] getClasses(@NotNull PsiDirectory dir) { LOG.assertTrue(dir.isValid()); + boolean onlyCompiled = FileIndexFacade.getInstance(dir.getProject()).isInLibraryClasses(dir.getVirtualFile()); + List classes = null; for (PsiFile file : dir.getFiles()) { + if (onlyCompiled && !(file instanceof ClsFileImpl)) { + continue; + } if (file instanceof PsiClassOwner && file.getViewProvider().getLanguages().size() == 1) { PsiClass[] psiClasses = ((PsiClassOwner)file).getClasses(); if (psiClasses.length == 0) continue; diff --git a/java/java-tests/testData/libResolve/classesAndSources/classesAndSources.jar b/java/java-tests/testData/libResolve/classesAndSources/classesAndSources.jar new file mode 100644 index 0000000000000000000000000000000000000000..b4cf119b3d68e2ac2fa323eac56da83f123eb4d0 GIT binary patch literal 634 zcmWIWW@Zs#-~ht+(R_{!NI-~zg~2B?sVK3i(m5xwxL7Y4ME*O)z~Jk5n(ttMfbHU| zL0|tcTkDi0dgiEv@p32CN1NYScI(MD6}!`3Ne`K8rp%buI`c`&IqjL(e}7~#a6I1F zxU6?tui3#_D_x!zHyKL2<9McY*W2lKcxTL9|HdoPf=AYT`C}sT(Jv$P!~BeA?o$P$ z_N`~q{ZcB}tutF_j&Ieqg)ys?uKYDWK5++!xY{a~@Anl-xK4Mw7JazpsB&1QHsr_E zq>kyz$YqAr0ibVL85tM? z;9>9tEer&KDp0~8E3qt5x9=cVlY@xs_qwC8yFGfup89P$puw?;Ut)RtJ_+}kl|q4k ztNXT8f4_71scNB&qT53c&buE|UIs)eCjaPIb?5o&fcrK(d6YSK3Y@-qc7yLF-%0D3 zSL~ecI4kY7?5AP{adR6F?i1T`G7H&W_}!eQAY0Axb@9w{gUUmVybqhTJ2&M1t fooInheritors(PsiClass c) { OverridingMethodsSearch.search(fooMethod(c)).findAll() as Set } + public void "test do not parse not stubbed sources in class jars"() { + def lib = LocalFileSystem.getInstance().refreshAndFindFileByPath(PathManagerEx.getTestDataPath() + "/libResolve/classesAndSources") + PsiTestUtil.addLibrary(myModule, 'cas', lib.path, ["/classesAndSources.jar!/"] as String[], ["/classesAndSources.jar!/"] as String[]) + + def facade = JavaPsiFacade.getInstance(project) + def scope = GlobalSearchScope.allScope(project) + + assert facade.findClasses('LibraryClass', scope).size() == 1 + + def pkg = facade.findPackage("") + assert pkg.classes.size() == 1 + + Collection pkgDirs = pkg.directories.collect { it.virtualFile } + Collection pkgChildren = pkgDirs.collect { it.children as List }.flatten() + PsiFile javaSrc = psiManager.findFile(pkgChildren.find { it.name == 'LibraryClass.java' }) + assert !javaSrc.node.parsed + } + }