java completion: prefer lambdas over method references (IDEA-181662)

This commit is contained in:
peter
2017-11-07 16:23:12 +01:00
parent 55d30a4354
commit 76641748e0
4 changed files with 15 additions and 2 deletions

View File

@@ -457,7 +457,7 @@ public class JavaCompletionSorting {
@Override
public Comparable weigh(@NotNull LookupElement element) {
final Object object = element.getObject();
if (object instanceof PsiMethod) {
if (object instanceof PsiMethod && FunctionalExpressionCompletionProvider.FUNCTIONAL_EXPR_ITEM.get(element) == null) {
PsiType type = ((PsiMethod)object).getReturnType();
final JavaMethodCallElement callItem = element.as(JavaMethodCallElement.CLASS_CONDITION_KEY);
if (callItem != null) {

View File

@@ -0,0 +1,7 @@
import java.util.*;
class Foo {
{
Optional.of(2).orElseThrow(<caret>)
}
}

View File

@@ -306,6 +306,11 @@ class Test88 {
myFixture.assertPreferredCompletionItems 0, 'output', 'out -> '
}
void testPreferLambdaToConstructorReference() {
configureByTestName()
myFixture.assertPreferredCompletionItems 0, '() -> ', 'AbstractMethodError::new'
}
private checkResultByFileName() {
checkResultByFile(getTestName(false) + "_after.java")
}

View File

@@ -110,7 +110,8 @@ public class SmartType18CompletionTest extends LightFixtureCompletionTestCase {
myFixture.addClass("package foo; class ImplInaccessible implements intf.Intf<String> {}");
configureByTestName();
myFixture.assertPreferredCompletionItems(0, "ImplBar::new", "ImplFoo::new", "() -> ");
myFixture.assertPreferredCompletionItems(0, "() -> ", "ImplBar::new", "ImplFoo::new");
myFixture.getLookup().setCurrentItem(myFixture.getLookupElements()[1]);
myFixture.type('\n');
checkResultByFile("/" + getTestName(false) + "-out.java");
}