diff options
Diffstat (limited to 'java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImplementationHelperImpl.java')
-rw-r--r-- | java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImplementationHelperImpl.java | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImplementationHelperImpl.java index 658ee6561e68..0c49938053f0 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImplementationHelperImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImplementationHelperImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,11 +24,11 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.roots.impl.ModifiableModelCommitter; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.roots.impl.ModifiableModelCommitter; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; @@ -37,6 +37,9 @@ import com.intellij.psi.*; import com.intellij.psi.impl.PackagePrefixElementFinder; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiModificationTracker; +import com.intellij.psi.util.PsiUtil; +import com.intellij.psi.util.PsiUtilCore; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import java.util.ArrayList; @@ -46,22 +49,25 @@ import java.util.List; * @author yole */ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementationHelper { + @NotNull @Override - public GlobalSearchScope adjustAllScope(PsiPackage psiPackage, GlobalSearchScope globalSearchScope) { + public GlobalSearchScope adjustAllScope(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope globalSearchScope) { return NonClasspathClassFinder.addNonClasspathScope(psiPackage.getProject(), globalSearchScope); } + @NotNull @Override - public VirtualFile[] occursInPackagePrefixes(PsiPackage psiPackage) { + public VirtualFile[] occursInPackagePrefixes(@NotNull PsiPackage psiPackage) { List<VirtualFile> result = new ArrayList<VirtualFile>(); final Module[] modules = ModuleManager.getInstance(psiPackage.getProject()).getModules(); + String qualifiedName = psiPackage.getQualifiedName(); for (final Module module : modules) { for (final ContentEntry contentEntry : ModuleRootManager.getInstance(module).getContentEntries()) { final List<SourceFolder> sourceFolders = contentEntry.getSourceFolders(JavaModuleSourceRootTypes.SOURCES); for (final SourceFolder sourceFolder : sourceFolders) { final String packagePrefix = sourceFolder.getPackagePrefix(); - if (packagePrefix.startsWith(psiPackage.getQualifiedName())) { + if (packagePrefix.startsWith(qualifiedName)) { final VirtualFile file = sourceFolder.getFile(); if (file != null) { result.add(file); @@ -71,11 +77,11 @@ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementation } } - return VfsUtil.toVirtualFileArray(result); + return VfsUtilCore.toVirtualFileArray(result); } @Override - public void handleQualifiedNameChange(final PsiPackage psiPackage, final String newQualifiedName) { + public void handleQualifiedNameChange(@NotNull final PsiPackage psiPackage, @NotNull final String newQualifiedName) { ApplicationManager.getApplication().assertWriteAccessAllowed(); final String oldQualifedName = psiPackage.getQualifiedName(); final boolean anyChanged = changePackagePrefixes(psiPackage, oldQualifedName, newQualifiedName); @@ -94,7 +100,7 @@ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementation } } - private static boolean changePackagePrefixes(PsiPackage psiPackage, final String oldQualifiedName, final String newQualifiedName) { + private static boolean changePackagePrefixes(@NotNull PsiPackage psiPackage, @NotNull String oldQualifiedName, @NotNull String newQualifiedName) { final Module[] modules = ModuleManager.getInstance(psiPackage.getProject()).getModules(); List<ModifiableRootModel> modelsToCommit = new ArrayList<ModifiableRootModel>(); for (final Module module : modules) { @@ -128,7 +134,7 @@ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementation } @Override - public void navigate(final PsiPackage psiPackage, final boolean requestFocus) { + public void navigate(@NotNull final PsiPackage psiPackage, final boolean requestFocus) { final Project project = psiPackage.getProject(); ToolWindow window = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.PROJECT_VIEW); window.activate(null); @@ -143,7 +149,8 @@ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementation }); } - private static PsiDirectory[] suggestMostAppropriateDirectories(PsiPackage psiPackage) { + @NotNull + private static PsiDirectory[] suggestMostAppropriateDirectories(@NotNull PsiPackage psiPackage) { final Project project = psiPackage.getProject(); PsiDirectory[] directories = null; final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor(); @@ -151,10 +158,20 @@ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementation final Document document = editor.getDocument(); final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document); if (psiFile != null) { - final Module module = ModuleUtil.findModuleForPsiElement(psiFile); + final Module module = ModuleUtilCore.findModuleForPsiElement(psiFile); if (module != null) { - directories = psiPackage.getDirectories(GlobalSearchScope.moduleWithDependenciesScope(module)); - } else { + final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(psiFile); + final boolean isInTests = + virtualFile != null && ModuleRootManager.getInstance(module).getFileIndex().isInTestSourceContent(virtualFile); + if (isInTests) { + directories = psiPackage.getDirectories(GlobalSearchScope.moduleTestsWithDependentsScope(module)); + } + + if (directories == null || directories.length == 0) { + directories = psiPackage.getDirectories(GlobalSearchScope.moduleWithDependenciesScope(module)); + } + } + else { directories = psiPackage.getDirectories(GlobalSearchScope.notScope(GlobalSearchScope.projectScope(project))); } } @@ -167,12 +184,13 @@ public class PsiPackageImplementationHelperImpl extends PsiPackageImplementation } @Override - public boolean packagePrefixExists(PsiPackage psiPackage) { + public boolean packagePrefixExists(@NotNull PsiPackage psiPackage) { return PackagePrefixElementFinder.getInstance(psiPackage.getProject()).packagePrefixExists(psiPackage.getQualifiedName()); } + @NotNull @Override - public Object[] getDirectoryCachedValueDependencies(PsiPackage psiPackage) { + public Object[] getDirectoryCachedValueDependencies(@NotNull PsiPackage psiPackage) { return new Object[] { PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, ProjectRootManager.getInstance(psiPackage.getProject()) }; } } |