IDEA-206386 Stream.toUnmodifiableList autocompletion (and mockJDK-11 to test it)

This commit is contained in:
peter
2019-02-01 11:42:45 +01:00
parent b191104b01
commit 0112b8aaa8
7 changed files with 27 additions and 5 deletions

View File

@@ -44,7 +44,7 @@ class CollectConversion {
return;
}
convertQualifierViaCollectors(ref, expectedTypes, consumer, qualifier);
convertQualifierViaCollectors(ref, expectedTypes, consumer, qualifier, collectors);
}
private static void suggestCollectorsArgument(Collection<? extends ExpectedTypeInfo> expectedTypes, Consumer<? super LookupElement> consumer, PsiClass collectors, PsiExpression qualifier) {
@@ -64,8 +64,11 @@ class CollectConversion {
private static void convertQualifierViaCollectors(PsiReferenceExpression ref,
Collection<? extends ExpectedTypeInfo> expectedTypes,
Consumer<? super LookupElement> consumer, PsiExpression qualifier) {
Consumer<? super LookupElement> consumer,
PsiExpression qualifier,
@NotNull PsiClass collectors) {
for (Pair<String, PsiType> pair : suggestCollectors(expectedTypes, qualifier)) {
if (collectors.findMethodsByName(pair.first, true).length == 0) continue;
consumer.consume(new MyLookupElement(pair.first, pair.second, ref));
}
}
@@ -119,9 +122,11 @@ class CollectConversion {
List<Pair<String, PsiType>> result = new ArrayList<>();
if (listType != null) {
result.add(Pair.create("toList", listType));
result.add(Pair.create("toUnmodifiableList", listType));
}
if (setType != null) {
result.add(Pair.create("toSet", setType));
result.add(Pair.create("toUnmodifiableSet", setType));
}
if (expectedTypes.isEmpty() || hasIterable) {
result.add(Pair.create("toCollection", factory.createType(collection, component)));

View File

@@ -0,0 +1,7 @@
import java.util.*;
class Foo {
void m() {
Arrays.asList("a", "b").stream().toUnmod<caret>
}
}

View File

@@ -56,4 +56,10 @@ class Normal11CompletionTest extends NormalCompletionTestCase {
myFixture.checkResult(fullText)
return var
}
void testToUnmodifiable() {
configureByTestName()
myFixture.assertPreferredCompletionItems 0, 'collect(Collectors.toUnmodifiableList())', 'collect(Collectors.toUnmodifiableSet())'
}
}

View File

@@ -245,7 +245,7 @@ class Test88 {
void testAllCollectors() {
configureByTestName()
myFixture.assertPreferredCompletionItems 0, 'collect', 'collect', 'collect(Collectors.toCollection())', 'collect(Collectors.toList())', 'collect(Collectors.toSet())'
assert myFixture.lookupElementStrings == ['collect', 'collect', 'collect(Collectors.toCollection())', 'collect(Collectors.toList())', 'collect(Collectors.toSet())']
selectItem(myItems.find { it.lookupString.contains('toCollection') })
checkResultByFileName()
}

Binary file not shown.

Binary file not shown.

View File

@@ -71,8 +71,12 @@ public class IdeaTestUtil extends PlatformTestUtil {
@NotNull
public static Sdk getMockJdk(@NotNull JavaVersion version) {
int mockJdk = version.feature >= 9 ? 9 : version.feature >= 7 ? version.feature : version.feature >= 5 ? 7 : 4;
String path = getPathForJdkNamed(MOCK_JDK_DIR_NAME_PREFIX + "1." + mockJdk).getPath();
int mockJdk = version.feature >= 11 ? 11 :
version.feature >= 9 ? 9 :
version.feature >= 7 ? version.feature :
version.feature >= 5 ? 7 :
4;
String path = getPathForJdkNamed(MOCK_JDK_DIR_NAME_PREFIX + (mockJdk < 11 ? "1." : "") + mockJdk).getPath();
return createMockJdk("java " + version, path);
}