method refs: do not insert ; in calls/exprs (IDEA-92713)

This commit is contained in:
anna
2012-10-11 20:56:02 +02:00
parent 53e2791720
commit b8fb9f7f36
5 changed files with 27 additions and 3 deletions

View File

@@ -792,7 +792,9 @@ public class JavaCompletionUtil {
boolean insertAdditionalSemicolon = true;
final PsiReferenceExpression referenceExpression = PsiTreeUtil.getTopmostParentOfType(context.getFile().findElementAt(context.getStartOffset()), PsiReferenceExpression.class);
if (referenceExpression != null) {
if (referenceExpression instanceof PsiMethodReferenceExpression && LambdaUtil.insertSemicolon(referenceExpression.getParent())) {
insertAdditionalSemicolon = false;
} else if (referenceExpression != null) {
PsiElement parent = referenceExpression.getParent();
if (parent instanceof PsiMethodCallExpression) {
parent = parent.getParent();

View File

@@ -566,13 +566,16 @@ public class LambdaUtil {
if (lambdaExpression.getBody() instanceof PsiCodeBlock) {
return true;
}
final PsiElement parent = lambdaExpression.getParent();
if (parent instanceof PsiExpressionList || parent instanceof PsiExpression) {
if (insertSemicolon(lambdaExpression.getParent())) {
return false;
}
return true;
}
public static boolean insertSemicolon(PsiElement parent) {
return parent instanceof PsiExpressionList || parent instanceof PsiExpression;
}
public static boolean isValidQualifier(PsiMethodReferenceExpression expression) {
final PsiElement referenceNameElement = expression.getReferenceNameElement();
if (referenceNameElement instanceof PsiKeyword) {

View File

@@ -0,0 +1,9 @@
import java.util.*;
class Test {
void aaa(Test p) { return 1; }
void test() {
c(Test::<caret>);
}
void c(Comparator<Test> c){}
}

View File

@@ -0,0 +1,9 @@
import java.util.*;
class Test {
void aaa(Test p) { return 1; }
void test() {
c(Test::c);
}
void c(Comparator<Test> c){}
}

View File

@@ -40,6 +40,7 @@ public class Normal17CompletionTest extends LightFixtureCompletionTestCase {
public void testOnlyResourcesInResourceList4() { doTest() }
public void testMethodReferenceNoStatic() { doTest() }
public void testMethodReferenceCallContext() { doTest() }
public void testResourceParentInResourceList() {
configureByFile(getTestName(false) + ".java")