IDEA-196951 Delete empty parenthesis when replacing a method call with a (constant) field reference

GitOrigin-RevId: 190dd5c4af0a50ce3019fd9bbefd386865e7e3f9
This commit is contained in:
peter
2019-09-30 10:32:59 +00:00
committed by intellij-monorepo-bot
parent 9dc70cc524
commit e3367716c0
4 changed files with 44 additions and 4 deletions
@@ -164,8 +164,7 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
if (willBeImported()) {
RangeMarker toDelete = JavaCompletionUtil.insertTemporary(context.getTailOffset(), document, " ");
context.commitDocument();
final PsiReferenceExpression
ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiReferenceExpression.class, false);
PsiReferenceExpression ref = findReference(context, context.getStartOffset());
if (ref != null) {
if (ref.isQualified()) {
return; // shouldn't happen, but sometimes we see exceptions because of this
@@ -183,12 +182,12 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
}
}
PsiReferenceExpression ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getTailOffset() - 1, PsiReferenceExpression.class, false);
PsiReferenceExpression ref = findReference(context, context.getTailOffset() - 1);
if (ref != null) {
JavaCodeStyleManager.getInstance(context.getProject()).shortenClassReferences(ref);
}
ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getTailOffset() - 1, PsiReferenceExpression.class, false);
ref = findReference(context, context.getTailOffset() - 1);
PsiElement target = ref == null ? null : ref.resolve();
if (target instanceof PsiLocalVariable || target instanceof PsiParameter) {
makeFinalIfNeeded(context, (PsiVariable)target);
@@ -218,6 +217,23 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
document.insertString(ref.getTextRange().getStartOffset(), "!");
}
}
else if (completionChar == Lookup.REPLACE_SELECT_CHAR) {
removeEmptyCallParentheses(context);
}
}
private static void removeEmptyCallParentheses(@NotNull InsertionContext context) {
PsiReferenceExpression ref = findReference(context, context.getTailOffset() - 1);
if (ref != null && ref.getParent() instanceof PsiMethodCallExpression) {
PsiExpressionList argList = ((PsiMethodCallExpression)ref.getParent()).getArgumentList();
if (argList.getExpressionCount() == 0) {
context.getDocument().deleteString(argList.getTextRange().getStartOffset(), argList.getTextRange().getEndOffset());
}
}
}
private static PsiReferenceExpression findReference(@NotNull InsertionContext context, int offset) {
return PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), offset, PsiReferenceExpression.class, false);
}
private static boolean isTernaryCondition(PsiReferenceExpression ref) {
@@ -0,0 +1,10 @@
public class Util {
int goo(C c) {
return c.VA<caret>getValue();
}
}
class C {
static final int VALUE = 2;
static int getValue() {}
}
@@ -0,0 +1,10 @@
public class Util {
int goo(C c) {
return c.VALUE<caret>;
}
}
class C {
static final int VALUE = 2;
static int getValue() {}
}
@@ -1916,4 +1916,8 @@ class Abc {
myFixture.type('\n')
myFixture.checkResult("class MyClass { MyClass<caret> }")
}
void testRemoveParenthesesWhenReplacingEmptyCallWithConstant() {
doTest('\t')
}
}