From 07795c4a42f4578e4e8e1338259891d4d3893afe Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Thu, 25 Nov 2010 19:31:22 +0300 Subject: [PATCH] don't erase generics when choosing a new class name with tab (IDEA-50622) --- .../completion/JavaClassNameInsertHandler.java | 11 +++++++++-- .../codeInsight/completion/JavaCompletionUtil.java | 10 +++++++--- .../completion/normal/ClassNameWithGenericsTab.java | 9 +++++++++ .../normal/ClassNameWithGenericsTab_after.java | 9 +++++++++ .../completion/NormalCompletionTest.groovy | 6 ++++++ 5 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java index ab679575063f..1ad49a9ddbdf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java @@ -71,8 +71,15 @@ class JavaClassNameInsertHandler implements InsertHandler 0) { return; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 8b07edc1ab5b..1dfd584a8281 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -318,23 +318,27 @@ public class JavaCompletionUtil { final PsiReference reference = file.findReferenceAt(selectionEndOffset); if(reference != null) { + /* if(reference instanceof PsiJavaCodeReferenceElement){ offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, element.getParent().getTextRange().getEndOffset()); } else{ - offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, - reference.getElement().getTextRange().getStartOffset() + reference.getRangeInElement().getEndOffset()); } + */ + offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, + reference.getElement().getTextRange().getStartOffset() + reference.getRangeInElement().getEndOffset()); element = file.findElementAt(offsetMap.getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET)); } else if (isWord(element)){ + /* if(element instanceof PsiIdentifier && element.getParent() instanceof PsiJavaCodeReferenceElement){ offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, element.getParent().getTextRange().getEndOffset()); } else{ - offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, element.getTextRange().getEndOffset()); } + */ + offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, element.getTextRange().getEndOffset()); element = file.findElementAt(offsetMap.getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET)); if (element == null) return; diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java new file mode 100644 index 000000000000..4f69a7e93f80 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab.java @@ -0,0 +1,9 @@ +public class TestClass { + + public TestClass create() { + final int value = 1; + return new XxTexCompXxx(value); + } +} + +class Xxx { } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java new file mode 100644 index 000000000000..eb3de923165b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameWithGenericsTab_after.java @@ -0,0 +1,9 @@ +public class TestClass { + + public TestClass create() { + final int value = 1; + return new Xxx(value); + } +} + +class Xxx { } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 02c591b8df3d..fef0ecd876c4 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -747,6 +747,12 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { checkResult(); } + public void testClassNameWithGenericsTab() throws Throwable { + configure() + myFixture.type '\t' + checkResult(); + } + public void testRightShift() throws Throwable { configure() assertStringItems("myField1", "myField2");