diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java index 4d8668a09268..8f921827737f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java @@ -85,6 +85,7 @@ public class AllClassesGetter { } else if (psiClass.isValid()) { try { + context.setTailOffset(psiReference.getRangeInElement().getEndOffset() + psiReference.getElement().getTextRange().getStartOffset()); final PsiElement newUnderlying = psiReference.bindToElement(psiClass); if (newUnderlying != null) { final PsiElement psiElement = CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(newUnderlying); diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java index c2e63e57f957..b0f896fccced 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java @@ -52,6 +52,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -194,13 +195,17 @@ public class JavaClassReference extends GenericReference implements PsiJavaRefer } assert newName != null; - TextRange range = - new TextRange(myJavaClassReferenceSet.getReference(0).getRangeInElement().getStartOffset(), getRangeInElement().getEndOffset()); + int end = getRangeInElement().getEndOffset(); + String text = getElement().getText(); + int lt = text.indexOf('<', getRangeInElement().getStartOffset()); + if (lt >= 0) { + end = CharArrayUtil.shiftBackward(text, lt - 1, "\n\t ") + 1; + } + TextRange range = new TextRange(myJavaClassReferenceSet.getReference(0).getRangeInElement().getStartOffset(), end); final ElementManipulator manipulator = getManipulator(getElement()); if (manipulator != null) { final PsiElement finalElement = manipulator.handleContentChange(getElement(), range, newName); - range = new TextRange(range.getStartOffset(), range.getStartOffset() + newName.length()); - myJavaClassReferenceSet.reparse(finalElement, range); + myJavaClassReferenceSet.reparse(finalElement, TextRange.from(range.getStartOffset(), newName.length())); return finalElement; } return element;