From 345b88eaf80778af92c8a30663abc91ad13beb11 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Tue, 27 Jul 2010 16:13:04 +0400 Subject: [PATCH] project view builder attempts to select virtual file on unsuccessful select of an element - due to many clients trying to select elements that are not in the tree structure --- .../projectView/BaseProjectTreeBuilder.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/BaseProjectTreeBuilder.java b/platform/lang-impl/src/com/intellij/ide/projectView/BaseProjectTreeBuilder.java index f5c15a694989..417d402b37fe 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/BaseProjectTreeBuilder.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/BaseProjectTreeBuilder.java @@ -81,7 +81,7 @@ public abstract class BaseProjectTreeBuilder extends AbstractTreeBuilder { batch(new Progressive() { public void run(@NotNull ProgressIndicator indicator) { final Ref target = new Ref(); - _select(value, finalVFile, false, Conditions.alwaysTrue(), cb, indicator, target, focusRequestor); + _select(value, finalVFile, false, Conditions.alwaysTrue(), cb, indicator, target, focusRequestor, false); cb.doWhenDone(new Runnable() { public void run() { result.setDone(target.get()); @@ -178,7 +178,7 @@ public abstract class BaseProjectTreeBuilder extends AbstractTreeBuilder { public void run() { batch(new Progressive() { public void run(@NotNull ProgressIndicator indicator) { - _select(element, file, requestFocus, nonStopCondition, result, indicator, null, requestor); + _select(element, file, requestFocus, nonStopCondition, result, indicator, null, requestor, false); } }); } @@ -190,13 +190,14 @@ public abstract class BaseProjectTreeBuilder extends AbstractTreeBuilder { } private void _select(Object element, - VirtualFile file, + final VirtualFile file, final boolean requestFocus, final Condition nonStopCondition, final ActionCallback result, - ProgressIndicator indicator, + final ProgressIndicator indicator, @Nullable final Ref virtualSelectTarget, - final FocusRequestor focusRequestor) { + final FocusRequestor focusRequestor, + final boolean isSecondAttempt) { AbstractTreeNode alreadySelected = alreadySelectedNode(element); final Runnable onDone = new Runnable() { @@ -226,7 +227,16 @@ public abstract class BaseProjectTreeBuilder extends AbstractTreeBuilder { onDone.run(); } } - }).notifyWhenRejected(result); + }).doWhenRejected(new Runnable() { + @Override + public void run() { + if (isSecondAttempt) { + result.setRejected(); + } else { + _select(file, file, requestFocus, nonStopCondition, result, indicator, virtualSelectTarget, focusRequestor, true); + } + } + }); } else { if (virtualSelectTarget == null) {