mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Maven: lazy tool windows
This commit is contained in:
@@ -93,6 +93,8 @@
|
||||
</orderEntry>
|
||||
<orderEntry type="module" module-name="idea-ui" exported="" />
|
||||
<orderEntry type="module" module-name="openapi" exported="" />
|
||||
<orderEntry type="module" module-name="platform-impl" />
|
||||
<orderEntry type="module" module-name="java-impl" />
|
||||
<orderEntry type="module" module-name="xml" exported="" />
|
||||
<orderEntry type="module" module-name="dom-openapi" exported="" />
|
||||
<orderEntry type="module" module-name="dom-impl" exported="" />
|
||||
@@ -105,7 +107,6 @@
|
||||
<orderEntry type="library" name="jgoodies-forms" level="project" />
|
||||
<orderEntry type="library" exported="" scope="TEST" name="JUnit4" level="project" />
|
||||
<orderEntry type="module" module-name="testFramework-java" exported="" scope="TEST" />
|
||||
<orderEntry type="module" module-name="java-impl" />
|
||||
<orderEntry type="module" module-name="jetgroovy" scope="TEST" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
|
||||
+104
-92
@@ -20,15 +20,15 @@ import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.project.DumbAwareRunnable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
|
||||
import com.intellij.ui.treeStructure.SimpleTree;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
import org.jetbrains.idea.maven.project.*;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
import org.jetbrains.idea.maven.tasks.MavenShortcutsManager;
|
||||
import org.jetbrains.idea.maven.tasks.MavenTasksManager;
|
||||
import org.jetbrains.idea.maven.utils.MavenIcons;
|
||||
@@ -60,6 +60,7 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
|
||||
private SimpleTree myTree;
|
||||
private MavenProjectsStructure myStructure;
|
||||
private ToolWindow myToolWindow;
|
||||
|
||||
public static MavenProjectsNavigator getInstance(Project project) {
|
||||
return project.getComponent(MavenProjectsNavigator.class);
|
||||
@@ -81,7 +82,7 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
|
||||
public void loadState(MavenProjectsNavigatorState state) {
|
||||
myState = state;
|
||||
update(true);
|
||||
scheduleStructureUpdate();
|
||||
}
|
||||
|
||||
public boolean getGroupModules() {
|
||||
@@ -91,7 +92,7 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
public void setGroupModules(boolean value) {
|
||||
if (myState.groupStructurally != value) {
|
||||
myState.groupStructurally = value;
|
||||
update(true);
|
||||
scheduleStructureUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +103,7 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
public void setShowIgnored(boolean value) {
|
||||
if (myState.showIgnored != value) {
|
||||
myState.showIgnored = value;
|
||||
update(true);
|
||||
scheduleStructureUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +114,7 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
public void setShowBasicPhasesOnly(boolean value) {
|
||||
if (myState.showBasicPhasesOnly != value) {
|
||||
myState.showBasicPhasesOnly = value;
|
||||
update(false);
|
||||
scheduleStructureUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,16 +127,13 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
@TestOnly
|
||||
public void initForTests() {
|
||||
doInit();
|
||||
initTree();
|
||||
initStructure();
|
||||
}
|
||||
|
||||
private void doInit() {
|
||||
if (myInitialized.getAndSet(true)) return;
|
||||
|
||||
initTree();
|
||||
listenForActivation();
|
||||
|
||||
listenForProjectsChanges();
|
||||
if (isUnitTestMode()) return;
|
||||
|
||||
MavenUtil.runWhenInitialized(myProject, new DumbAwareRunnable() {
|
||||
public void run() {
|
||||
initToolWindow();
|
||||
@@ -145,11 +143,46 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
|
||||
@Override
|
||||
public void disposeComponent() {
|
||||
myInitialized.set(false);
|
||||
}
|
||||
|
||||
private boolean isInitialized() {
|
||||
return myInitialized.get();
|
||||
private void listenForProjectsChanges() {
|
||||
myProjectsManager.addProjectsTreeListener(new MyProjectsListener());
|
||||
|
||||
myShortcutsManager.addListener(new MavenShortcutsManager.Listener() {
|
||||
public void shortcutsUpdated() {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateGoals();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
myTasksManager.addListener(new MavenTasksManager.Listener() {
|
||||
public void compileTasksChanged() {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateGoals();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initToolWindow() {
|
||||
initTree();
|
||||
JPanel panel = new MavenProjectsNavigatorPanel(myProject, myTree);
|
||||
|
||||
ToolWindowManagerEx manager = ToolWindowManagerEx.getInstanceEx(myProject);
|
||||
myToolWindow = manager.registerToolWindow(TOOL_WINDOW_ID, panel, ToolWindowAnchor.RIGHT, myProject, true);
|
||||
myToolWindow.setIcon(MavenIcons.MAVEN_ICON);
|
||||
|
||||
manager.addToolWindowManagerListener(new ToolWindowManagerAdapter() {
|
||||
@Override
|
||||
public void stateChanged() {
|
||||
scheduleStructureUpdate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initTree() {
|
||||
@@ -182,65 +215,6 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
};
|
||||
|
||||
myTree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
|
||||
myStructure = new MavenProjectsStructure(myProject, myProjectsManager, myTasksManager, myShortcutsManager, this, myTree);
|
||||
}
|
||||
|
||||
private void listenForActivation() {
|
||||
myProjectsManager.addManagerListener(new MavenProjectsManager.Listener() {
|
||||
public void activated() {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.buildTree();
|
||||
}
|
||||
});
|
||||
listenForProjectsChanges();
|
||||
}
|
||||
|
||||
public void scheduledImportsChanged() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void listenForProjectsChanges() {
|
||||
myProjectsManager.addProjectsTreeListener(new MyProjectsListener());
|
||||
|
||||
myShortcutsManager.addListener(new MavenShortcutsManager.Listener() {
|
||||
public void shortcutsUpdated() {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateGoals();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
myTasksManager.addListener(new MavenTasksManager.Listener() {
|
||||
public void compileTasksChanged() {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateGoals();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initToolWindow() {
|
||||
JPanel panel = new MavenProjectsNavigatorPanel(myProject, myTree);
|
||||
|
||||
ToolWindowManager manager = ToolWindowManager.getInstance(myProject);
|
||||
ToolWindow toolWindow = manager.registerToolWindow(TOOL_WINDOW_ID, panel, ToolWindowAnchor.RIGHT, myProject, true);
|
||||
toolWindow.setIcon(MavenIcons.MAVEN_ICON);
|
||||
}
|
||||
|
||||
private void update(boolean restructure) {
|
||||
if (!isInitialized()) return;
|
||||
myStructure.update(restructure);
|
||||
}
|
||||
|
||||
public void selectInTree(MavenProject project) {
|
||||
if (!isInitialized()) return;
|
||||
myStructure.select(project);
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
@@ -248,14 +222,56 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
return myStructure;
|
||||
}
|
||||
|
||||
private void scheduleStructureUpdate(Runnable r) {
|
||||
MavenUtil.invokeLater(myProject, r);
|
||||
public void selectInTree(final MavenProject project) {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.select(project);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class MyProjectsListener extends MavenProjectsTree.ListenerAdapter {
|
||||
private void scheduleStructureRequest(final Runnable r) {
|
||||
if (isUnitTestMode()) {
|
||||
r.run();
|
||||
return;
|
||||
}
|
||||
|
||||
if (myToolWindow == null) return;
|
||||
MavenUtil.invokeLater(myProject, new Runnable() {
|
||||
public void run() {
|
||||
if (!myToolWindow.isVisible()) return;
|
||||
if (myStructure == null) {
|
||||
initStructure();
|
||||
}
|
||||
r.run();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initStructure() {
|
||||
myStructure = new MavenProjectsStructure(myProject, myProjectsManager, myTasksManager,
|
||||
myShortcutsManager, this, myTree);
|
||||
}
|
||||
|
||||
private void scheduleStructureUpdate() {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.update();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class MyProjectsListener extends MavenProjectsTree.ListenerAdapter implements MavenProjectsManager.Listener {
|
||||
public void activated() {
|
||||
scheduleStructureUpdate();
|
||||
}
|
||||
|
||||
public void scheduledImportsChanged() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectsIgnoredStateChanged(final List<MavenProject> ignored, final List<MavenProject> unignored, Object message) {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateIgnored(ContainerUtil.concat(ignored, unignored));
|
||||
}
|
||||
@@ -264,7 +280,7 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
|
||||
@Override
|
||||
public void profilesChanged(final List<String> profiles) {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.setActiveProfiles(profiles);
|
||||
}
|
||||
@@ -272,30 +288,26 @@ public class MavenProjectsNavigator extends SimpleProjectComponent implements Pe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectsUpdated(final List<Pair<MavenProject, MavenProjectChanges>> updated,
|
||||
final List<MavenProject> deleted,
|
||||
public void projectsUpdated(List<Pair<MavenProject, MavenProjectChanges>> updated,
|
||||
List<MavenProject> deleted,
|
||||
Object message) {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateProjects(MavenUtil.collectFirsts(updated), deleted);
|
||||
}
|
||||
});
|
||||
scheduleUpdateProjects(MavenUtil.collectFirsts(updated), deleted);
|
||||
}
|
||||
|
||||
public void projectResolved(Pair<MavenProject, MavenProjectChanges> projectWithChanges,
|
||||
org.apache.maven.project.MavenProject nativeMavenProject,
|
||||
Object message) {
|
||||
updateProject(projectWithChanges.first);
|
||||
scheduleUpdateProjects(Collections.singletonList(projectWithChanges.first), Collections.EMPTY_LIST);
|
||||
}
|
||||
|
||||
public void pluginsResolved(MavenProject project) {
|
||||
updateProject(project);
|
||||
scheduleUpdateProjects(Collections.singletonList(project), Collections.EMPTY_LIST);
|
||||
}
|
||||
|
||||
private void updateProject(final MavenProject project) {
|
||||
scheduleStructureUpdate(new Runnable() {
|
||||
private void scheduleUpdateProjects(final List<MavenProject> projects, final List<MavenProject> deleted) {
|
||||
scheduleStructureRequest(new Runnable() {
|
||||
public void run() {
|
||||
myStructure.updateProjects(Collections.singletonList(project), Collections.EMPTY_LIST);
|
||||
myStructure.updateProjects(projects, deleted);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+5
-11
@@ -121,17 +121,11 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
|
||||
return myRoot;
|
||||
}
|
||||
|
||||
public void buildTree() {
|
||||
updateProjects(myProjectsManager.getProjects(), Collections.EMPTY_LIST);
|
||||
}
|
||||
|
||||
public void update(boolean restructure) {
|
||||
if (restructure) {
|
||||
buildTree();
|
||||
}
|
||||
else {
|
||||
updateFrom(myRoot);
|
||||
}
|
||||
public void update() {
|
||||
List<MavenProject> projects = myProjectsManager.getProjects();
|
||||
List<MavenProject> deleted = new ArrayList<MavenProject>(myProjectToNodeMapping.keySet());
|
||||
deleted.removeAll(projects);
|
||||
updateProjects(projects, deleted);
|
||||
}
|
||||
|
||||
private void updateFrom(SimpleNode node) {
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ public class SelectFromMavenProjectsDialog extends DialogWrapper {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
treeStructure.buildTree();
|
||||
treeStructure.update();
|
||||
|
||||
final SimpleNode[] selection = new SimpleNode[]{null};
|
||||
treeStructure.accept(new SimpleNodeVisitor() {
|
||||
|
||||
+2
-3
@@ -32,9 +32,9 @@ public class MavenProjectsNavigatorTest extends MavenImportingTestCase {
|
||||
initProjectsManager(false);
|
||||
|
||||
myNavigator = MavenProjectsNavigator.getInstance(myProject);
|
||||
myNavigator.initForTests();
|
||||
myNavigator.setGroupModules(true);
|
||||
|
||||
myNavigator.initForTests();
|
||||
myStructure = myNavigator.getStructureForTests();
|
||||
}
|
||||
|
||||
@@ -52,7 +52,6 @@ public class MavenProjectsNavigatorTest extends MavenImportingTestCase {
|
||||
"<version>1</version>");
|
||||
myProjectsManager.resetManagedFilesAndProfilesInTests(Collections.singletonList(myProjectPom), Collections.EMPTY_LIST);
|
||||
waitForReadingCompletion();
|
||||
assertTrue(getRootNodes().isEmpty());
|
||||
|
||||
myProjectsManager.fireActivatedInTests();
|
||||
assertEquals(1, getRootNodes().size());
|
||||
@@ -112,7 +111,7 @@ public class MavenProjectsNavigatorTest extends MavenImportingTestCase {
|
||||
assertEquals(m, getRootNodes().get(0).getModulesNode().getProjectNodes().get(0).getFile());
|
||||
}
|
||||
|
||||
public void testReconnectingModulesWhenProjectBacomesParent() throws Exception {
|
||||
public void testReconnectingModulesWhenProjectBecomesParent() throws Exception {
|
||||
myProjectsManager.fireActivatedInTests();
|
||||
|
||||
createProjectPom("<groupId>test</groupId>" +
|
||||
|
||||
Reference in New Issue
Block a user