From 4e02ae82fe9c4913b9f317b270c5f0bc2331379e Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 13 Sep 2016 15:10:11 +0200 Subject: [PATCH] Seach and replace inconsistency started from Seach (IDEA-160192) --- .../src/com/intellij/find/FindUtil.java | 16 ++++++++++++---- .../find/findInProject/FindInProjectManager.java | 12 +++--------- .../intellij/find/impl/FindInProjectUtil.java | 8 ++++++++ .../ReplaceInProjectManager.java | 7 +------ 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/find/FindUtil.java b/platform/lang-impl/src/com/intellij/find/FindUtil.java index a94b4f5aaf18..58f026d50963 100644 --- a/platform/lang-impl/src/com/intellij/find/FindUtil.java +++ b/platform/lang-impl/src/com/intellij/find/FindUtil.java @@ -22,10 +22,7 @@ import com.intellij.codeInsight.hint.HintUtil; import com.intellij.find.findUsages.PsiElement2UsageTargetAdapter; import com.intellij.find.impl.FindInProjectUtil; import com.intellij.find.replaceInProject.ReplaceInProjectManager; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.IdeActions; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.editor.*; @@ -157,6 +154,17 @@ public class FindUtil { } } + public static void useFindStringFromFindInFileModel(FindModel findModel, Editor editor) { + if (editor != null) { + EditorSearchSession editorSearchSession = EditorSearchSession.get(editor); + if (editorSearchSession != null) { + FindModel currentFindModel = editorSearchSession.getFindModel(); + findModel.setStringToFind(currentFindModel.getStringToFind()); + if (findModel.isReplaceState()) findModel.setStringToReplace(currentFindModel.getStringToReplace()); + } + } + } + private enum Direction { UP, DOWN } diff --git a/platform/lang-impl/src/com/intellij/find/findInProject/FindInProjectManager.java b/platform/lang-impl/src/com/intellij/find/findInProject/FindInProjectManager.java index 7e7f3a47300e..1c984b6ef6cf 100644 --- a/platform/lang-impl/src/com/intellij/find/findInProject/FindInProjectManager.java +++ b/platform/lang-impl/src/com/intellij/find/findInProject/FindInProjectManager.java @@ -16,20 +16,14 @@ package com.intellij.find.findInProject; -import com.intellij.find.FindManager; -import com.intellij.find.FindModel; -import com.intellij.find.FindSettings; -import com.intellij.find.FindUtil; +import com.intellij.find.*; import com.intellij.find.impl.FindInProjectUtil; import com.intellij.find.impl.FindManagerImpl; import com.intellij.find.replaceInProject.ReplaceInProjectManager; -import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Factory; import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.content.Content; import com.intellij.usageView.UsageInfo; @@ -76,9 +70,9 @@ public class FindInProjectManager { FindModel.initStringToFindNoMultiline(findModel, text); } else { - Editor editor = CommonDataKeys.EDITOR.getData(dataContext); - FindUtil.initStringToFindWithSelection(findModel, editor); + FindInProjectUtil.initStringToFindFromDataContext(findModel, dataContext); } + if (Registry.is("ide.find.as.popup")) { findManager.showFindPopup(findModel, dataContext); return; diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java index 0927cd241e62..29ee3a208642 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java @@ -425,6 +425,14 @@ public class FindInProjectUtil { }); } + public static void initStringToFindFromDataContext(FindModel findModel, @NotNull DataContext dataContext) { + Editor editor = CommonDataKeys.EDITOR.getData(dataContext); + FindUtil.initStringToFindWithSelection(findModel, editor); + if (editor == null) { + FindUtil.useFindStringFromFindInFileModel(findModel, CommonDataKeys.EDITOR_EVEN_IF_INACTIVE.getData(dataContext)); + } + } + public static class StringUsageTarget implements ConfigurableUsageTarget, ItemPresentation, TypeSafeDataProvider { @NotNull protected final Project myProject; @NotNull protected final FindModel myFindModel; diff --git a/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java b/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java index d1046d8a2466..ac72feb4b95d 100644 --- a/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java +++ b/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java @@ -24,7 +24,6 @@ import com.intellij.find.impl.FindManagerImpl; import com.intellij.ide.DataManager; import com.intellij.notification.NotificationGroup; import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.KeyboardShortcut; import com.intellij.openapi.application.ApplicationManager; @@ -32,14 +31,12 @@ import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Factory; import com.intellij.openapi.util.Ref; -import com.intellij.openapi.util.Segment; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.ReadonlyStatusHandler; import com.intellij.openapi.vfs.VfsUtilCore; @@ -134,9 +131,7 @@ public class ReplaceInProjectManager { findModel.setOpenInNewTabEnabled(isOpenInNewTabEnabled); findModel.setOpenInNewTab(toOpenInNewTab); FindInProjectUtil.setDirectoryName(findModel, dataContext); - - Editor editor = CommonDataKeys.EDITOR.getData(dataContext); - FindUtil.initStringToFindWithSelection(findModel, editor); + FindInProjectUtil.initStringToFindFromDataContext(findModel, dataContext); findManager.showFindDialog(findModel, () -> { if (!findModel.isProjectScope() &&