diff --git a/java/java-tests/testSrc/com/intellij/find/FindInEditorTest.java b/java/java-tests/testSrc/com/intellij/find/FindInEditorTest.java
index 043c755f8ca9..07422f965753 100644
--- a/java/java-tests/testSrc/com/intellij/find/FindInEditorTest.java
+++ b/java/java-tests/testSrc/com/intellij/find/FindInEditorTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,10 +19,12 @@ import com.intellij.codeInsight.hint.EditorHintListener;
import com.intellij.find.impl.livePreview.LivePreview;
import com.intellij.find.impl.livePreview.LivePreviewController;
import com.intellij.find.impl.livePreview.SearchResults;
+import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.testFramework.LightCodeInsightTestCase;
-import com.intellij.ui.LightweightHint;
+import com.intellij.testFramework.fixtures.EditorMouseFixture;
+import com.intellij.util.ui.UIUtil;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
@@ -30,7 +32,6 @@ import java.io.PrintStream;
public class FindInEditorTest extends LightCodeInsightTestCase {
private LivePreviewController myLivePreviewController;
- private SearchResults mySearchResults;
private FindModel myFindModel;
private ByteArrayOutputStream myOutputStream;
@@ -43,36 +44,26 @@ public class FindInEditorTest extends LightCodeInsightTestCase {
myOutputStream = new ByteArrayOutputStream();
LivePreview.ourTestOutput = new PrintStream(myOutputStream);
- EditorHintListener listener = new EditorHintListener() {
- @Override
- public void hintShown(Project project, LightweightHint hint, int flags) {
- LivePreview.processNotFound();
- }
- };
+ EditorHintListener listener = (project, hint, flags) -> LivePreview.processNotFound();
ApplicationManager.getApplication().getMessageBus().connect(myTestRootDisposable).subscribe(EditorHintListener.TOPIC, listener);
}
private void initFind() {
- mySearchResults = new SearchResults(getEditor(), getProject());
- myLivePreviewController = new LivePreviewController(mySearchResults, null);
- myFindModel.addObserver(new FindModel.FindModelObserver() {
- @Override
- public void findModelChanged(FindModel findModel) {
- myLivePreviewController.updateInBackground(myFindModel, true);
- }
- });
+ SearchResults searchResults = new SearchResults(getEditor(), getProject());
+ myLivePreviewController = new LivePreviewController(searchResults, null);
+ myFindModel.addObserver(findModel -> myLivePreviewController.updateInBackground(myFindModel, true));
myLivePreviewController.on();
}
public void testBasicFind() throws Exception {
- configureFromFileText("file.txt", "ab");
+ configureFromText("ab");
initFind();
myFindModel.setStringToFind("a");
checkResults();
}
public void testEmacsLikeFallback() throws Exception {
- configureFromFileText("file.txt", "a\nab");
+ configureFromText("a\nab");
initFind();
myFindModel.setStringToFind("a");
myFindModel.setStringToFind("ab");
@@ -81,7 +72,7 @@ public class FindInEditorTest extends LightCodeInsightTestCase {
}
public void testReplacementWithEmptyString() throws Exception {
- configureFromFileText("file.txt", "a");
+ configureFromText("a");
initFind();
myFindModel.setRegularExpressions(true);
@@ -92,6 +83,23 @@ public class FindInEditorTest extends LightCodeInsightTestCase {
myLivePreviewController.performReplace();
checkResults();
}
+
+ public void testSecondFind() throws Exception {
+ configureFromText("a b b a");
+ invokeFind();
+ new EditorMouseFixture((EditorImpl)myEditor).doubleClickAt(0, 3);
+ invokeFind();
+ checkResultByText("a b b a");
+ }
+
+ private static void invokeFind() {
+ executeAction(IdeActions.ACTION_FIND);
+ UIUtil.dispatchAllInvocationEvents();
+ }
+
+ private static void configureFromText(String text) {
+ configureFromFileText("file.txt", text);
+ }
private void checkResults() {
String name = getTestName(false);
diff --git a/platform/lang-impl/src/com/intellij/find/EditorSearchSession.java b/platform/lang-impl/src/com/intellij/find/EditorSearchSession.java
index eda1e31ac6b5..813128c79b7e 100644
--- a/platform/lang-impl/src/com/intellij/find/EditorSearchSession.java
+++ b/platform/lang-impl/src/com/intellij/find/EditorSearchSession.java
@@ -160,6 +160,7 @@ public class EditorSearchSession implements SearchSession,
myFindModel.setWholeWordsOnly(false);
}
updateUIWithFindModel();
+ clearSearchResults();
updateResults(true);
FindUtil.updateFindInFileModel(getProject(), myFindModel);
}
@@ -272,7 +273,7 @@ public class EditorSearchSession implements SearchSession,
updateResults(true);
}
else {
- nothingToSearchFor();
+ clearSearchResults();
}
updateMultiLineStateIfNeed();
}
@@ -336,10 +337,6 @@ public class EditorSearchSession implements SearchSession,
mySearchResults.setMatchesLimit(value);
}
- private boolean canReplaceCurrent() {
- return myLivePreviewController != null && myLivePreviewController.canReplace();
- }
-
public void replaceCurrent() {
if (mySearchResults.getCursor() != null) {
myLivePreviewController.performReplace();
@@ -380,7 +377,7 @@ public class EditorSearchSession implements SearchSession,
private void updateResults(final boolean allowedToChangedEditorSelection) {
final String text = myFindModel.getStringToFind();
if (text.length() == 0) {
- nothingToSearchFor();
+ clearSearchResults();
}
else {
@@ -413,7 +410,7 @@ public class EditorSearchSession implements SearchSession,
}
}
- private void nothingToSearchFor() {
+ private void clearSearchResults() {
updateUIWithEmptyResults();
if (mySearchResults != null) {
mySearchResults.clear();