diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/OpenInEditorAction.java b/platform/diff-impl/src/com/intellij/diff/actions/impl/OpenInEditorAction.java index ceca314c860d..716199c4811f 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/impl/OpenInEditorAction.java +++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/OpenInEditorAction.java @@ -10,6 +10,8 @@ import com.intellij.ide.actions.EditSourceAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.actionSystem.ex.ActionUtil; +import com.intellij.openapi.fileEditor.FileNavigator; +import com.intellij.openapi.fileEditor.FileNavigatorImpl; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.pom.Navigatable; @@ -76,12 +78,11 @@ public class OpenInEditorAction extends EditSourceAction implements DumbAware { } public void openEditor(@NotNull Project project, Navigatable @NotNull [] navigatables) { + FileNavigatorImpl fileNavigator = (FileNavigatorImpl)FileNavigator.getInstance(); + boolean success = false; for (Navigatable navigatable : navigatables) { - if (navigatable.canNavigate()) { - navigatable.navigate(true); - success = true; - } + success |= fileNavigator.navigateIgnoringContextEditor(navigatable); } if (success) onAfterEditorOpened(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/FileNavigatorImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/FileNavigatorImpl.java index 9c34c9f03a31..056bbd56d8aa 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/FileNavigatorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/FileNavigatorImpl.java @@ -14,6 +14,8 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.pom.Navigatable; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -21,6 +23,8 @@ import java.util.List; import static com.intellij.openapi.fileEditor.OpenFileDescriptor.unfoldCurrentLine; public class FileNavigatorImpl implements FileNavigator { + private final ThreadLocal myIgnoreContextEditor = new ThreadLocal<>(); + @Override public boolean canNavigate(@NotNull OpenFileDescriptor descriptor) { VirtualFile file = descriptor.getFile(); @@ -79,6 +83,7 @@ public class FileNavigatorImpl implements FileNavigator { } private boolean navigateInRequestedEditor(@NotNull OpenFileDescriptor descriptor) { + if (myIgnoreContextEditor.get() == Boolean.TRUE) return false; @SuppressWarnings("deprecation") DataContext ctx = DataManager.getInstance().getDataContext(); Editor e = OpenFileDescriptor.NAVIGATE_IN_EDITOR.getData(ctx); if (e == null) return false; @@ -103,4 +108,17 @@ public class FileNavigatorImpl implements FileNavigator { } return !editors.isEmpty(); } + + @ApiStatus.Experimental + public boolean navigateIgnoringContextEditor(@NotNull Navigatable navigatable) { + if (!navigatable.canNavigate()) return false; + myIgnoreContextEditor.set(Boolean.TRUE); + try { + navigatable.navigate(true); + } + finally { + myIgnoreContextEditor.set(null); + } + return true; + } }