summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java')
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java25
1 files changed, 15 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..ab6289584719 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,22 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper
final VirtualFile vFile = clsFile.getContainingFile().getVirtualFile();
ProjectFileIndex projectFileIndex = ProjectFileIndex.SERVICE.getInstance(clsFile.getProject());
- final List<OrderEntry> 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<VirtualFile> sourceRoots = ContainerUtil.newLinkedHashSet();
+ for (OrderEntry orderEntry : projectFileIndex.getOrderEntriesForFile(vFile)) {
+ if (orderEntry instanceof LibraryOrSdkOrderEntry) {
+ 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;
}