From 10976b3dd4f41172f3af10e972e69854216530ea Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 7 Nov 2013 21:16:35 +0100 Subject: [PATCH] walk library src roots once when searching for class sources (IDEA-116085) --- .../impl/JavaPsiImplementationHelperImpl.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java index d720a01eb987..28c5c702c42b 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java @@ -40,10 +40,12 @@ import com.intellij.psi.impl.source.codeStyle.ImportHelper; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.Set; @@ -115,19 +117,20 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper final VirtualFile vFile = clsFile.getContainingFile().getVirtualFile(); ProjectFileIndex projectFileIndex = ProjectFileIndex.SERVICE.getInstance(clsFile.getProject()); - final List orderEntries = projectFileIndex.getOrderEntriesForFile(vFile); - for (OrderEntry orderEntry : orderEntries) { - VirtualFile[] files = orderEntry.getFiles(OrderRootType.SOURCES); - for (VirtualFile file : files) { - VirtualFile source = file.findFileByRelativePath(relativeFilePath); - if (source != null) { - PsiFile psiSource = clsFile.getManager().findFile(source); - if (psiSource instanceof PsiClassOwner) { - return psiSource; - } + final Set sourceRoots = ContainerUtil.newLinkedHashSet(); + for (OrderEntry orderEntry : projectFileIndex.getOrderEntriesForFile(vFile)) { + Collections.addAll(sourceRoots, orderEntry.getFiles(OrderRootType.SOURCES)); + } + for (VirtualFile root : sourceRoots) { + VirtualFile source = root.findFileByRelativePath(relativeFilePath); + if (source != null) { + PsiFile psiSource = clsFile.getManager().findFile(source); + if (psiSource instanceof PsiClassOwner) { + return psiSource; } } } + return clsFile; }