java completion: don't overwrite whole anonymous class

search for reference at `BaseClassRe|f`, not `BaseClassRef() { ... }.call()`
This commit is contained in:
peter
2018-08-01 16:05:08 -07:00
parent bbebd17487
commit 7d5673a443
5 changed files with 52 additions and 9 deletions
@@ -81,7 +81,7 @@ public class ConstructorInsertHandler implements InsertHandler<LookupElementDeco
if (delegate instanceof PsiTypeLookupItem) {
if (context.getDocument().getTextLength() > context.getTailOffset() &&
context.getDocument().getCharsSequence().charAt(context.getTailOffset()) == '<') {
PsiJavaCodeReferenceElement ref = JavaClassNameInsertHandler.findJavaReference(context.getFile(), context.getTailOffset());
PsiJavaCodeReferenceElement ref = JavaClassNameInsertHandler.findJavaReference(context.getFile(), context.getTailOffset() - 1);
if (ref != null) {
PsiReferenceParameterList parameterList = ref.getParameterList();
if (parameterList != null && context.getTailOffset() == parameterList.getTextRange().getStartOffset()) {
@@ -136,7 +136,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
static void overwriteTopmostReference(InsertionContext context) {
context.commitDocument();
PsiJavaCodeReferenceElement ref = findJavaReference(context.getFile(), context.getTailOffset());
PsiJavaCodeReferenceElement ref = findJavaReference(context.getFile(), context.getTailOffset() - 1);
if (ref != null) {
while (ref.getParent() instanceof PsiJavaCodeReferenceElement) ref = (PsiJavaCodeReferenceElement)ref.getParent();
context.getDocument().deleteString(context.getTailOffset(), ref.getTextRange().getEndOffset());
@@ -0,0 +1,19 @@
class Bar {
void v() {
new Runnable() {
@Override
public void run() {
new Foo()<caret> {
@Override
public void run() {
}
};
}
}.run();
}
}
class Foo {
Foo() {}
}
@@ -0,0 +1,19 @@
class Bar {
void v() {
new Runnable() {
@Override
public void run() {
new Fo<caret>o() {
@Override
public void run() {
}
};
}
}.run();
}
}
class Foo {
Foo() {}
}
@@ -294,18 +294,20 @@ public class ClassNameCompletionTest extends LightFixtureCompletionTestCase {
checkResultByFile(path + "/varType-result.java");
}
public void testExtraSpace() { doJavaTest(); }
public void testExtraSpace() { doJavaTest('\n'); }
public void testAnnotation() { doJavaTest(); }
public void testAnnotation() { doJavaTest('\n'); }
public void testInStaticImport() { doJavaTest(); }
public void testInStaticImport() { doJavaTest('\n'); }
public void testInCommentWithPackagePrefix() { doJavaTest(); }
public void testInCommentWithPackagePrefix() { doJavaTest('\n'); }
private void doJavaTest() {
public void testNestedAnonymousTab() { doJavaTest('\t');}
private void doJavaTest(char toType) {
final String path = "/nameCompletion/java";
myFixture.configureByFile(path + "/" + getTestName(false) + "-source.java");
performAction();
performAction(toType);
checkResultByFile(path + "/" + getTestName(false) + "-result.java");
}
@@ -315,9 +317,12 @@ public class ClassNameCompletionTest extends LightFixtureCompletionTestCase {
}
private void performAction() {
performAction('\n');
}
private void performAction(char toType) {
complete();
if (LookupManager.getActiveLookup(myFixture.getEditor()) != null) {
myFixture.type('\n');
myFixture.type(toType);
}
}
}