From 7da83f8bc15afe8659b01e6d55a5f26d8be81cb8 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 28 Jul 2015 15:13:52 +0200 Subject: [PATCH] for nonword characters consider whole words boundary to be just different character (r=Peter.Gromov) --- .../testSrc/com/intellij/find/FindManagerTest.java | 8 ++++++++ .../src/com/intellij/find/impl/FindManagerImpl.java | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java index 5d2a68600e48..16320628b403 100644 --- a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java @@ -619,6 +619,14 @@ public class FindManagerTest extends DaemonAnalyzerTestCase { List usages = FindUtil.findAll(myProject, myEditor, model); assertNotNull(usages); assertEquals(2, usages.size()); + + configureByText(FileTypes.PLAIN_TEXT, "myproperty=@AspectJ"); + model = new FindModel(); + model.setStringToFind("@AspectJ"); + model.setWholeWordsOnly(true); + usages = FindUtil.findAll(myProject, myEditor, model); + assertNotNull(usages); + assertEquals(1, usages.size()); } public void testFindInCurrentFileOutsideProject() throws Exception { diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java b/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java index 4cb6f1a24dfd..9582978e86ed 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java @@ -401,10 +401,10 @@ public class FindManagerImpl extends FindManager { if (startOffset != 0) { boolean previousCharacterIsIdentifier = Character.isJavaIdentifierPart(text.charAt(startOffset - 1)) && (startOffset <= 1 || text.charAt(startOffset - 2) != '\\'); - boolean previousCharacterIsWhitespace = Character.isWhitespace(text.charAt(startOffset - 1)); + boolean previousCharacterIsSameAsNext = text.charAt(startOffset - 1) == text.charAt(startOffset); boolean firstCharacterIsIdentifier = Character.isJavaIdentifierPart(text.charAt(startOffset)); - isWordStart = !firstCharacterIsIdentifier && (previousCharacterIsIdentifier || previousCharacterIsWhitespace) || + isWordStart = !firstCharacterIsIdentifier && !previousCharacterIsSameAsNext || firstCharacterIsIdentifier && !previousCharacterIsIdentifier; } else { isWordStart = true; @@ -414,11 +414,11 @@ public class FindManagerImpl extends FindManager { if (endOffset != text.length()) { boolean nextCharacterIsIdentifier = Character.isJavaIdentifierPart(text.charAt(endOffset)); - boolean nextCharacterIsWhitespace = Character.isWhitespace(text.charAt(endOffset)); + boolean nextCharacterIsSameAsPrevious = endOffset > 0 && text.charAt(endOffset) == text.charAt(endOffset - 1); boolean lastSearchedCharacterIsIdentifier = endOffset > 0 && Character.isJavaIdentifierPart(text.charAt(endOffset - 1)); isWordEnd = lastSearchedCharacterIsIdentifier && !nextCharacterIsIdentifier || - !lastSearchedCharacterIsIdentifier && (nextCharacterIsIdentifier || nextCharacterIsWhitespace); + !lastSearchedCharacterIsIdentifier && !nextCharacterIsSameAsPrevious; } else { isWordEnd = true; }