java smart completion: prefer all items with exactly expected type, not only classes (IDEA-169490)

This commit is contained in:
peter
2017-05-15 09:16:00 +02:00
parent 75f8c42d7f
commit 29672cb324
6 changed files with 59 additions and 26 deletions
@@ -0,0 +1,12 @@
class Map {
static class Builder {}
static Builder builder() {}
}
class BiMap extends Map {
static class Builder extends Map.Builder {}
static Builder builder() {}
}
class Usage {
Map.Builder b = bui<caret>
}
@@ -33,7 +33,7 @@ class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase {
}
void testJComponentAdd() throws Throwable {
checkPreferredItems(0, "name", "b", "fooBean239", "foo", "this")
checkPreferredItems(0, "name", "b", "fooBean239", "foo")
}
void testJComponentAddNew() throws Throwable {
@@ -323,7 +323,7 @@ class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase {
}
void testPreferLocalOverThis() {
checkPreferredItems 0, 'value', 'this', 'hashCode'
checkPreferredItems 0, 'value', 'hashCode', 'this'
}
void testGetLogger() {
@@ -339,7 +339,7 @@ class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase {
}
void testPreferLocalWildcardClassOverObject() {
checkPreferredItems 0, 'type', 'Object.class'
checkPreferredItems 0, 'type', 'forName', 'forName', 'Object.class'
}
void testPreferStringsInStringConcatenation() {
@@ -361,6 +361,13 @@ class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase {
assert lookup.items.size() == 2
}
void testPreferGlobalMembersReturningExpectedType() {
configureNoCompletion(getTestName(false) + ".java")
def items = myFixture.complete(CompletionType.SMART, 2)
assert LookupElementPresentation.renderElement(items[0]).itemText == 'Map.builder'
assert LookupElementPresentation.renderElement(items[1]).itemText == 'BiMap.builder'
}
@Override
protected String getBasePath() {
return JavaTestUtil.getRelativeJavaTestDataPath() + BASE_PATH
@@ -830,7 +830,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
}
public void testNoClassLiteral() throws Exception {
doActionTest();
assertStringItems("Object.class", "getClass", "forName", "forName");
assertStringItems("forName", "forName", "Object.class", "getClass");
}
public void testClassLiteralInAnno2() throws Throwable {