diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy index b5f3afcb6501..186f420b51a4 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy @@ -211,6 +211,14 @@ foo->bar ''' } + public void "test inside word"() { + myFixture.configureByText "a.c", 'foo fox fbar' + complete() + myFixture.checkResult 'foo fox foxbar' + complete() + myFixture.checkResult 'foo fox foobar' + } + private void complete() { myFixture.performEditorAction(IdeActions.ACTION_HIPPIE_COMPLETION) } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java index a07e5c1f0b06..d56a5a0a762a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java @@ -55,8 +55,8 @@ public class HippieWordCompletionHandler implements CodeInsightActionHandler { public void invoke(@NotNull Project project, @NotNull final Editor editor, @NotNull PsiFile file) { if (!FileModificationService.getInstance().prepareFileForWrite(file)) return; - int offset = editor.getCaretModel().getOffset(); - if (editor.isViewer() || editor.getDocument().getRangeGuard(offset, offset) != null) { + int caretOffset = editor.getCaretModel().getOffset(); + if (editor.isViewer() || editor.getDocument().getRangeGuard(caretOffset, caretOffset) != null) { editor.getDocument().fireReadOnlyModificationAttempt(); CodeInsightUtilBase.showReadOnlyViewWarning(editor); return; @@ -87,8 +87,7 @@ public class HippieWordCompletionHandler implements CodeInsightActionHandler { CompletionVariant nextVariant = computeNextVariant(editor, oldPrefix, lastProposedVariant, data, file, fromOtherFiles, false); if (nextVariant == null) return; - int replacementEnd = data.startOffset + data.myWordUnderCursor.length(); - editor.getDocument().replaceString(data.startOffset, replacementEnd, nextVariant.variant); + editor.getDocument().replaceString(data.startOffset, caretOffset, nextVariant.variant); editor.getCaretModel().moveToOffset(data.startOffset + nextVariant.variant.length()); completionState.lastProposedVariant = nextVariant; completionState.fromOtherFiles = nextVariant.editor != editor;