mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-166142: find archived file in project view if archive is located under a module group
This commit is contained in:
Binary file not shown.
@@ -9,17 +9,23 @@ import com.intellij.ide.projectView.impl.ProjectViewPane;
|
||||
import com.intellij.ide.projectView.impl.ProjectViewToolWindowFactory;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowId;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.IOException;
|
||||
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public class NavigateFromSourceTest extends BaseProjectViewTestCase {
|
||||
@@ -121,4 +127,36 @@ public class NavigateFromSourceTest extends BaseProjectViewTestCase {
|
||||
PlatformTestUtil.waitWhileBusy(tree);
|
||||
PlatformTestUtil.assertTreeEqual(tree, expected, true);
|
||||
}
|
||||
|
||||
public void testSelectFileInArchiveUnderModuleGroup() throws IOException {
|
||||
Project project = getProject();
|
||||
VirtualFile root = getContentRoot();
|
||||
|
||||
// create grouped module on top level to create ModuleGroupNode
|
||||
VirtualFile moduleRoot = WriteAction.computeAndWait(() -> root.getParent().createChildDirectory(project, "module"));
|
||||
Module module = createModule("group.module");
|
||||
PsiTestUtil.addContentRoot(module, moduleRoot);
|
||||
|
||||
// move archive from default module to the created one
|
||||
VirtualFile archive = root.findChild("test.jar");
|
||||
WriteAction.runAndWait(() -> archive.move(project, moduleRoot));
|
||||
PsiTestUtil.addLibrary(module, archive.getPath()); // only libraries are expanded now
|
||||
|
||||
AbstractProjectViewPSIPane pane = myStructure.createPane();
|
||||
// select archived file in the Project View
|
||||
VirtualFile file = JarFileSystem.getInstance().getJarRootForLocalFile(archive).findChild("Main.class");
|
||||
pane.select(PsiManager.getInstance(project).findFile(file), file, false);
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Project\n" +
|
||||
" -Group: group\n" +
|
||||
" -PsiDirectory: module\n" +
|
||||
" -test.jar\n" +
|
||||
" PsiDirectory: META-INF\n" +
|
||||
" [Main]\n" +
|
||||
" PsiDirectory: selectFileInArchiveUnderModuleGroup\n" +
|
||||
" group.module.iml\n" +
|
||||
getRootFiles() +
|
||||
" +External Libraries\n"
|
||||
, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.intellij.openapi.module.ModuleGrouper;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.newvfs.ArchiveFileSystem;
|
||||
import com.intellij.psi.PsiFileSystemItem;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -79,6 +80,10 @@ public abstract class ModuleGroupNode extends ProjectViewNode<ModuleGroup> imple
|
||||
@Override
|
||||
public boolean contains(@NotNull VirtualFile file) {
|
||||
List<Module> modules = getModulesByFile(file);
|
||||
if (modules.isEmpty() && file.getFileSystem() instanceof ArchiveFileSystem) {
|
||||
VirtualFile archiveFile = ((ArchiveFileSystem)file.getFileSystem()).getLocalByEntry(file);
|
||||
if (archiveFile != null) modules = getModulesByFile(archiveFile);
|
||||
}
|
||||
List<String> thisGroupPath = getValue().getGroupPathList();
|
||||
ModuleGrouper grouper = ModuleGrouper.instanceFor(getProject());
|
||||
for (Module module : modules) {
|
||||
|
||||
Reference in New Issue
Block a user