alt-f1 fixes, take1: extracted method for selection; getActivation() is used instead...
authorKirill Kalishev <Kirill.Kalishev@jetbrains.com>
Fri, 28 Aug 2009 12:22:55 +0000 (16:22 +0400)
committerKirill Kalishev <Kirill.Kalishev@jetbrains.com>
Fri, 28 Aug 2009 12:22:55 +0000 (16:22 +0400)
lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java
lang-impl/src/com/intellij/ide/projectView/BaseProjectTreeBuilder.java
platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java
platform-impl/src/com/intellij/openapi/wm/ex/ToolWindowEx.java
platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowImpl.java
source/com/intellij/psi/impl/file/PsiJavaDirectoryImpl.java

index 4b0dd6f664f3ba03d25ba0a07719f5acc5602f31..8e826fe600b1366b77869eddd42de8b82656a171 100644 (file)
@@ -9,6 +9,7 @@ import com.intellij.ide.projectView.TreeStructureProvider;
 import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
 import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.ActionCallback;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.openapi.wm.ToolWindowId;
@@ -20,6 +21,7 @@ import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiFileSystemItem;
 import com.intellij.psi.util.PsiUtilBase;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -33,26 +35,37 @@ public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper
   }
 
   protected final void select(final Object selector, final VirtualFile virtualFile, final boolean requestFocus) {
-    final ProjectView projectView = ProjectView.getInstance(myProject);
-    ToolWindowManager windowManager=ToolWindowManager.getInstance(myProject);
+    select(myProject, selector, getMinorViewId(), mySubId, virtualFile, requestFocus);
+  }
+
+  public static ActionCallback select(@NotNull Project project,
+                            final Object toSelect,
+                            @Nullable final String viewId,
+                            @Nullable final String subviewId,
+                            final VirtualFile virtualFile,
+                            final boolean requestFocus) {
+    final ActionCallback result = new ActionCallback();
+
+
+    final ProjectView projectView = ProjectView.getInstance(project);
+    ToolWindowManager windowManager=ToolWindowManager.getInstance(project);
     final ToolWindowEx projectViewToolWindow = (ToolWindowEx) windowManager.getToolWindow(ToolWindowId.PROJECT_VIEW);
-    projectViewToolWindow.ensureContentInitialized();
     final Runnable runnable = new Runnable() {
       public void run() {
         if (requestFocus) {
-          projectView.changeView(getMinorViewId(), mySubId);
+          projectView.changeView(viewId, subviewId);
         }
-        projectView.select(selector, virtualFile, requestFocus);
+
+        projectView.selectCB(toSelect, virtualFile, requestFocus).notify(result);
       }
     };
-    if (requestFocus) {
-      projectViewToolWindow.activate(runnable, false);
-    }
-    else {
-      runnable.run();
-    }
+
+    projectViewToolWindow.activate(runnable, false);
+
+    return result;
   }
 
+
   @NotNull
   public Collection<SelectInTarget> getSubTargets(SelectInContext context) {
     List<SelectInTarget> result = new ArrayList<SelectInTarget>();
index 37acd7f2a414845e90d3c193036e950660120a8a..54dd5c6b5fcc3aa3af45dda8eb1585c78d4d32c0 100644 (file)
@@ -174,7 +174,7 @@ public abstract class BaseProjectTreeBuilder extends AbstractTreeBuilder {
                                                      final AbstractTreeNode root,
                                                      final Object element,
                                                      final Condition<AbstractTreeNode> nonStopCondition) {
-    final AsyncResult<AbstractTreeNode> async = new AsyncResult<AbstractTreeNode>();
+    final AsyncResult<AbstractTreeNode> async = new AsyncResult<AbstractTreeNode>(); 
 
     if (root.canRepresent(element)) {
       expand(root, new Runnable() {
index 0d14a3a0c70a3eb363ddf53acce5b1357e29b5bd..61195dc81464b52c0b665126ec7412c12e3c6b29 100644 (file)
@@ -1872,6 +1872,10 @@ class AbstractTreeUi {
     return myRootNodeWasInitialized;
   }
 
+  private boolean isRootNodeBuilt() {
+    return myRootNodeWasInitialized && isNodeBeingBuilt(myRootNode);
+  }
+
   public void select(final Object[] elements, @Nullable final Runnable onDone) {
     select(elements, onDone, false);
   }
@@ -1969,17 +1973,21 @@ class AbstractTreeUi {
           addNext(elementsToSelect, 0, onDone, originalRows, deferred);
         }
         else {
-          myDeferredSelections.clear();
-          myDeferredSelections.add(new Runnable() {
-            public void run() {
-              select(elementsToSelect, onDone, false, true);
-            }
-          });
+          addToDeferred(elementsToSelect, onDone);
         }
       }
     });
   }
 
+  private void addToDeferred(final Object[] elementsToSelect, final Runnable onDone) {
+    myDeferredSelections.clear();
+    myDeferredSelections.add(new Runnable() {
+      public void run() {
+        select(elementsToSelect, onDone, false, true);
+      }
+    });
+  }
+
   private boolean checkDeferred(boolean isDeferred, @Nullable Runnable onDone) {
     if (!isDeferred || myCanProcessDeferredSelections || !wasRootNodeInitialized()) {
       return true;
@@ -2198,14 +2206,18 @@ class AbstractTreeUi {
       }
     }
     else {
-      myDeferredExpansions.add(new Runnable() {
-        public void run() {
-          _expand(element, onDone, parentsOnly, false);
-        }
-      });
+      deferExpansion(element, onDone, parentsOnly);
     }
   }
 
+  private void deferExpansion(final Object element, final Runnable onDone, final boolean parentsOnly) {
+    myDeferredExpansions.add(new Runnable() {
+      public void run() {
+        _expand(element, onDone, parentsOnly, false);
+      }
+    });
+  }
+
   private void processExpand(final DefaultMutableTreeNode toExpand,
                              final List kidsToExpand,
                              final int expandIndex,
index 3ecb9d5e847cdcb37a38d4be9ceedd481d649475..ae02cb12bfa7db79df1f7173ab1d2bda185db837 100644 (file)
@@ -25,5 +25,4 @@ public interface ToolWindowEx extends ToolWindow {
    */
   ToolWindowType getInternalType();
 
-  void ensureContentInitialized();
 }
index c14c2c9d043ae41c6d36402480af2a449df26ddf..c3bae490a1bf535e9a9281938a62dfca0bf13bd7 100644 (file)
@@ -81,12 +81,15 @@ public final class ToolWindowImpl implements ToolWindowEx {
     activate(runnable, autoFocusContents, true);
   }
 
-  public void activate(@Nullable Runnable runnable, boolean autoFocusContents, boolean forced) {
+  public void activate(@Nullable final Runnable runnable, boolean autoFocusContents, boolean forced) {
     ApplicationManager.getApplication().assertIsDispatchThread();
     myToolWindowManager.activateToolWindow(myId, forced, autoFocusContents);
-    if (runnable != null) {
-      myToolWindowManager.invokeLater(runnable);
-    }
+
+    getActivation().doWhenDone(new Runnable() {
+      public void run() {
+        myToolWindowManager.invokeLater(runnable);
+      }
+    });
   }
 
   public final boolean isActive() {
@@ -97,9 +100,11 @@ public final class ToolWindowImpl implements ToolWindowEx {
   public final void show(final Runnable runnable) {
     ApplicationManager.getApplication().assertIsDispatchThread();
     myToolWindowManager.showToolWindow(myId);
-    if (runnable != null) {
-      myToolWindowManager.invokeLater(runnable);
-    }
+    getActivation().doWhenDone(new Runnable() {
+      public void run() {
+        myToolWindowManager.invokeLater(runnable);
+      }
+    });
   }
 
   public final void hide(final Runnable runnable) {
index 546c2570e21056c2c480793aa58d922527cbad20..5b52c95c831df49e1db81caed696b3b8f5575f1f 100644 (file)
@@ -1,15 +1,12 @@
 package com.intellij.psi.impl.file;
 
-import com.intellij.ide.projectView.ProjectView;
+import com.intellij.ide.impl.ProjectViewSelectInTarget;
 import com.intellij.ide.projectView.impl.ProjectViewPane;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.fileTypes.FileType;
 import com.intellij.openapi.fileTypes.FileTypeManager;
 import com.intellij.openapi.fileTypes.StdFileTypes;
 import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.ToolWindowId;
-import com.intellij.openapi.wm.ToolWindowManager;
-import com.intellij.openapi.wm.ex.ToolWindowEx;
 import com.intellij.psi.JavaDirectoryService;
 import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiElement;
@@ -67,11 +64,6 @@ public class PsiJavaDirectoryImpl extends PsiDirectoryImpl {
   }
 
   public void navigate(final boolean requestFocus) {
-    final ToolWindowEx window = (ToolWindowEx)ToolWindowManager.getInstance(getProject()).getToolWindow(ToolWindowId.PROJECT_VIEW);
-    window.ensureContentInitialized();
-    final ProjectView projectView = ProjectView.getInstance(getProject());
-    projectView.changeView(ProjectViewPane.ID);
-    projectView.getProjectViewPaneById(ProjectViewPane.ID).select(this, getVirtualFile(), requestFocus);
-    window.activate(null);
+    ProjectViewSelectInTarget.select(getProject(), this, ProjectViewPane.ID, null, getVirtualFile(), requestFocus);
   }
 }