diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/DuplicateActionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/DuplicateActionTest.groovy index fe9ced59cc21..68b0de566438 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/DuplicateActionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/DuplicateActionTest.groovy @@ -35,7 +35,6 @@ xxx private void doTest(String before, @NonNls String ext, String after) { myFixture.configureByText("a." + ext, before); myFixture.performEditorAction(IdeActions.ACTION_EDITOR_DUPLICATE) - println "/" + myFixture.editor.document.text.substring(myFixture.editor.caretModel.offset) + "/" myFixture.checkResult(after); } @@ -52,6 +51,19 @@ class C { ''' } + public void "test preserve caret position when it's already inside element's name"() { + doTest ''' +class C { + void foo() {} +} +''', 'java', ''' +class C { + void foo() {} + void foo() {} +} +''' + } + public void testXmlTag() { doTest ''' diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/actions/NamedElementDuplicateHandler.java b/platform/lang-impl/src/com/intellij/openapi/editor/actions/NamedElementDuplicateHandler.java index 326e9ff2fde9..faa46736977f 100644 --- a/platform/lang-impl/src/com/intellij/openapi/editor/actions/NamedElementDuplicateHandler.java +++ b/platform/lang-impl/src/com/intellij/openapi/editor/actions/NamedElementDuplicateHandler.java @@ -51,7 +51,7 @@ public class NamedElementDuplicateHandler extends EditorWriteActionHandler { TextRange toDuplicate = new TextRange(editor.logicalPositionToOffset(lines.first), editor.logicalPositionToOffset(lines.second)); PsiElement name = findNameIdentifier(editor, file, toDuplicate); - if (name != null) { + if (name != null && !name.getTextRange().containsOffset(editor.getCaretModel().getOffset())) { editor.getCaretModel().moveToOffset(name.getTextOffset()); } }