mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
CollectMigration.NewListTerminal: support Guava collection constructors (IDEA-219934)
Also remove .distinct() automatically when unnecessary. GitOrigin-RevId: 504dd9e645f9492a4142c0793c42188912afdde9
This commit is contained in:
committed by
intellij-monorepo-bot
parent
67862fe347
commit
2572c79c56
@@ -323,8 +323,8 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
else {
|
||||
PsiExpression copy = JavaPsiFacade.getElementFactory(initializer.getProject())
|
||||
.createExpressionFromText(ct.text(initializer), initializer);
|
||||
if (copy instanceof PsiNewExpression) {
|
||||
PsiExpressionList argumentList = ((PsiNewExpression)copy).getArgumentList();
|
||||
if (copy instanceof PsiCallExpression && ConstructionUtils.isPrepopulatedCollectionInitializer(copy)) {
|
||||
PsiExpressionList argumentList = ((PsiCallExpression)copy).getArgumentList();
|
||||
if (argumentList != null) {
|
||||
PsiExpression arg = ArrayUtil.getFirstElement(argumentList.getExpressions());
|
||||
if (arg != null && !(arg.getType() instanceof PsiPrimitiveType)) {
|
||||
@@ -850,7 +850,7 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
NewListTerminal(CollectTerminal upstream,
|
||||
PsiLocalVariable variable,
|
||||
String intermediate,
|
||||
PsiNewExpression newListExpression,
|
||||
PsiCallExpression newListExpression,
|
||||
PsiType resultType) {
|
||||
super(upstream, variable, intermediate, newListExpression);
|
||||
myResultType = resultType;
|
||||
@@ -863,8 +863,11 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
|
||||
@Override
|
||||
StreamEx<String> fusedElements() {
|
||||
PsiJavaCodeReferenceElement reference = ((PsiNewExpression)myCreateExpression).getClassReference();
|
||||
return myUpstream.fusedElements().append(Objects.requireNonNull(reference).getReferenceName());
|
||||
if (myCreateExpression instanceof PsiNewExpression) {
|
||||
PsiJavaCodeReferenceElement reference = ((PsiNewExpression)myCreateExpression).getClassReference();
|
||||
return myUpstream.fusedElements().append(Objects.requireNonNull(reference).getReferenceName());
|
||||
}
|
||||
return myUpstream.fusedElements().append(((PsiMethodCallExpression)myCreateExpression).getMethodExpression().getReferenceName());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -875,14 +878,19 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
|
||||
WrapperCandidate candidate = WrapperCandidate.tryExtract(terminal, element);
|
||||
if (candidate == null) return null;
|
||||
if (!(candidate.myCandidate instanceof PsiNewExpression)) return null;
|
||||
if (!InheritanceUtil.isInheritor(candidate.myType, CommonClassNames.JAVA_UTIL_COLLECTION)) return null;
|
||||
PsiNewExpression newExpression = (PsiNewExpression)candidate.myCandidate;
|
||||
PsiExpressionList argumentList = newExpression.getArgumentList();
|
||||
if (!(candidate.myCandidate instanceof PsiCallExpression)) return null;
|
||||
PsiClass targetClass = PsiUtil.resolveClassInClassTypeOnly(candidate.myCandidate.getType());
|
||||
if (!InheritanceUtil.isInheritor(targetClass, CommonClassNames.JAVA_UTIL_COLLECTION)) return null;
|
||||
PsiCallExpression callExpression = (PsiCallExpression)candidate.myCandidate;
|
||||
if (!ConstructionUtils.isPrepopulatedCollectionInitializer(callExpression)) return null;
|
||||
if (CommonClassNames.JAVA_UTIL_HASH_SET.equals(targetClass.getQualifiedName()) && intermediateSteps.equals(".distinct()")) {
|
||||
intermediateSteps = "";
|
||||
}
|
||||
PsiExpressionList argumentList = callExpression.getArgumentList();
|
||||
if (argumentList == null) return null;
|
||||
PsiExpression[] args = argumentList.getExpressions();
|
||||
if (args.length != 1 || !terminal.isTargetReference(args[0])) return null;
|
||||
return new NewListTerminal(terminal, candidate.myVar, intermediateSteps, newExpression, candidate.myType);
|
||||
return new NewListTerminal(terminal, candidate.myVar, intermediateSteps, callExpression, candidate.myType);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Fuse HashSet into the Stream API chain" "true"
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
|
||||
class X {
|
||||
void foo(Stream<String> s) {
|
||||
Set<String> set = s.collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// "Fuse newHashSet into the Stream API chain" "true"
|
||||
package com.google.common.collect;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
|
||||
class X {
|
||||
void foo(Stream<String> s) {
|
||||
Set<String> set = s.collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
|
||||
class Sets {
|
||||
public static native <E> HashSet<E> newHashSet(Iterable<? extends E> var0);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Fuse HashSet into the Stream API chain" "true"
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
|
||||
class X {
|
||||
void foo(Stream<String> s) {
|
||||
Set<String> set = new HashSet<>(s.co<caret>llect(Collectors.toSet()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// "Fuse newHashSet into the Stream API chain" "true"
|
||||
package com.google.common.collect;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
|
||||
class X {
|
||||
void foo(Stream<String> s) {
|
||||
Set<String> set = Sets.newHashSet(s.co<caret>llect(Collectors.toSet()));
|
||||
}
|
||||
}
|
||||
|
||||
class Sets {
|
||||
public static native <E> HashSet<E> newHashSet(Iterable<? extends E> var0);
|
||||
}
|
||||
Reference in New Issue
Block a user