From f2ad1eb124426d42257dcab55b4fb781244c61c8 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 18 Jan 2011 20:05:50 +0100 Subject: [PATCH] tailOffset degraded in class name completion (EA-24778) --- .../completion/ConstructorInsertHandler.java | 2 +- .../codeInsight/completion/DefaultInsertHandler.java | 12 +++++++++--- .../completion/JavaClassNameInsertHandler.java | 2 +- .../codeInsight/lookup/PsiTypeLookupItem.java | 2 +- .../normal/ClassNameInsideIdentifierInIf.java | 6 ++++++ .../normal/ClassNameInsideIdentifierInIf_after.java | 8 ++++++++ .../completion/NormalCompletionTest.groovy | 6 ++++++ 7 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java b/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java index fb9949bc7293..bea298445334 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java @@ -53,7 +53,7 @@ class ConstructorInsertHandler implements InsertHandler= 0) length = i; + RangeMarker savedTail = context.getDocument().createRangeMarker(context.getTailOffset(), context.getTailOffset()); final int newOffset = addImportForClass(file, startOffset, startOffset + length, aClass); JavaCompletionUtil.shortenReference(file, newOffset); + assert savedTail.isValid(); + context.setTailOffset(savedTail.getStartOffset()); } else if (o instanceof PsiType){ PsiType type = ((PsiType)o).getDeepComponentType(); 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 ddb2bba025eb..330d638f03d6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java @@ -98,7 +98,7 @@ class JavaClassNameInsertHandler implements InsertHandler= 0); String docText = context.getDocument().getText(); - DefaultInsertHandler.addImportForItem(context.getFile(), context.getStartOffset(), item); + DefaultInsertHandler.addImportForItem(context, item); if (context.getTailOffset() < 0) { if (ApplicationManagerEx.getApplicationEx().isInternal()) { LOG.error("Tail offset degraded: " + context.getStartOffset() + "; " + docText); diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java index 545172114b67..9b5e630302a5 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java @@ -37,7 +37,7 @@ public class PsiTypeLookupItem extends LookupItem { @Override public void handleInsert(InsertionContext context) { - DefaultInsertHandler.addImportForItem(context.getFile(), context.getStartOffset(), this); + DefaultInsertHandler.addImportForItem(context, this); super.handleInsert(context); } diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java new file mode 100644 index 000000000000..2637f89d13e6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf.java @@ -0,0 +1,6 @@ +public class Bar { + { + if (2 != InpStrReaAaa) { + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java new file mode 100644 index 000000000000..6a0b1b1c0dbf --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ClassNameInsideIdentifierInIf_after.java @@ -0,0 +1,8 @@ +import java.io.InputStreamReader; + +public class Bar { + { + if (2 != InputStreamReaderAaa) { + } + } +} \ 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 f2c1b2f641fb..cf30c5e4b8e0 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -842,6 +842,12 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { assertStringItems("myField1", "myField2"); } + public void testClassNameInsideIdentifierInIf() throws Throwable { + configure() + type '\n' + checkResult() + } + public void testSuggestMembersOfStaticallyImportedClasses() throws Exception { myFixture.addClass("""package foo; public class Foo {