java completion: don't delete everything if class name coincides with package (IDEA-180284)

This commit is contained in:
peter
2018-01-08 20:52:44 +01:00
parent 9d1de0c271
commit d4ab5f0efb
8 changed files with 31 additions and 18 deletions
@@ -98,7 +98,7 @@ public class AllClassesGetter {
}
}
}
if (toDelete.isValid()) {
if (toDelete != null && toDelete.isValid()) {
document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset());
context.setTailOffset(toDelete.getStartOffset());
}
@@ -83,7 +83,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
return;
}
OffsetKey refEnd = context.trackOffset(context.getTailOffset(), false);
OffsetKey refEnd = context.trackOffset(context.getTailOffset(), true);
boolean fillTypeArgs = context.getCompletionChar() == '<';
if (fillTypeArgs) {
@@ -98,6 +98,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
}
context.setTailOffset(context.getOffset(refEnd));
refEnd = context.trackOffset(context.getTailOffset(), false);
context.commitDocument();
if (item.getUserData(JavaChainLookupElement.CHAIN_QUALIFIER) == null &&
@@ -669,7 +669,7 @@ public class JavaCompletionUtil {
}
}
if (toDelete.isValid()) {
if (toDelete != null && toDelete.isValid()) {
document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset());
}
@@ -685,22 +685,17 @@ public class JavaCompletionUtil {
return psiReference.resolve();
}
public static RangeMarker insertTemporary(final int endOffset, final Document document, final String temporary) {
@Nullable
public static RangeMarker insertTemporary(int endOffset, Document document, String temporary) {
final CharSequence chars = document.getCharsSequence();
final int length = chars.length();
final RangeMarker toDelete;
if (endOffset < length && Character.isJavaIdentifierPart(chars.charAt(endOffset))){
if (endOffset < chars.length() && Character.isJavaIdentifierPart(chars.charAt(endOffset))){
document.insertString(endOffset, temporary);
toDelete = document.createRangeMarker(endOffset, endOffset + 1);
} else if (endOffset >= length) {
toDelete = document.createRangeMarker(length, length);
RangeMarker toDelete = document.createRangeMarker(endOffset, endOffset + 1);
toDelete.setGreedyToLeft(true);
toDelete.setGreedyToRight(true);
return toDelete;
}
else {
toDelete = document.createRangeMarker(endOffset, endOffset);
}
toDelete.setGreedyToLeft(true);
toDelete.setGreedyToRight(true);
return toDelete;
return null;
}
public static void insertParentheses(final InsertionContext context,
@@ -189,7 +189,7 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
ref.bindToElementViaStaticImport(((PsiField)variable).getContainingClass());
PostprocessReformattingAspect.getInstance(ref.getProject()).doPostponedFormatting();
}
if (toDelete.isValid()) {
if (toDelete != null && toDelete.isValid()) {
document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset());
}
context.commitDocument();
@@ -0,0 +1,5 @@
public class Util {
int goo() {
new Apple<caret>
}
}
@@ -0,0 +1,7 @@
import Apple.Apple;
public class Util {
int goo() {
new Apple()<caret>
}
}
@@ -1845,4 +1845,9 @@ class Bar {{
checkResultByFile(getTestName(false) + "_after.java")
}
void testCompletingClassWithSameNameAsPackage() {
myFixture.addClass("package Apple; public class Apple {}")
doTest('\n')
}
}
@@ -481,7 +481,7 @@ public class GroovyCompletionUtil {
newStartOffset = marker.getStartOffset();
}
if (toDelete.isValid()) {
if (toDelete != null && toDelete.isValid()) {
document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset());
}