IDEA-160325 Replace Arrays.asList(...).stream() with Stream.of(...) quick fix removes generic type parameter which may lead to compilation error

This commit is contained in:
Tagir Valeev
2016-08-26 12:03:23 +03:00
parent 7c133e3b0a
commit 0b64ec45fa
5 changed files with 64 additions and 6 deletions
@@ -160,10 +160,12 @@ public class SimplifyStreamApiCallChainsInspection extends BaseJavaBatchLocalIns
}
private static abstract class ArraysAsListFix extends CallChainFixBase {
private final String myMethodFQN;
private final String myClassName;
private final String myMethodName;
private ArraysAsListFix(String methodFQN) {
myMethodFQN = methodFQN;
private ArraysAsListFix(String className, String methodName) {
myClassName = className;
myMethodName = methodName;
}
@Override
@@ -173,14 +175,21 @@ public class SimplifyStreamApiCallChainsInspection extends BaseJavaBatchLocalIns
methodCall.getArgumentList().replace(qualifierCall.getArgumentList());
final Project project = methodCall.getProject();
final PsiExpression newMethodExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(myMethodFQN, methodCall);
PsiType[] parameters = qualifierCall.getMethodExpression().getTypeParameters();
String replacement;
if(parameters.length == 1) {
replacement = myClassName + ".<" + parameters[0].getCanonicalText() + ">" + myMethodName;
} else {
replacement = myClassName + "." + myMethodName;
}
final PsiExpression newMethodExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(replacement, methodCall);
JavaCodeStyleManager.getInstance(project).shortenClassReferences(methodCall.getMethodExpression().replace(newMethodExpression));
}
}
private static class ArraysAsListVarargFix extends ArraysAsListFix {
private ArraysAsListVarargFix() {
super(CommonClassNames.JAVA_UTIL_STREAM_STREAM + "." + OF_METHOD);
super(CommonClassNames.JAVA_UTIL_STREAM_STREAM, OF_METHOD);
}
@Nls
@@ -193,7 +202,7 @@ public class SimplifyStreamApiCallChainsInspection extends BaseJavaBatchLocalIns
private static class ArraysAsListSingleArrayFix extends ArraysAsListFix {
private ArraysAsListSingleArrayFix() {
super(CommonClassNames.JAVA_UTIL_ARRAYS + "." + STREAM_METHOD);
super(CommonClassNames.JAVA_UTIL_ARRAYS, STREAM_METHOD);
}
@Nls
@@ -0,0 +1,12 @@
// "Replace Arrays.asList().stream() with Arrays.stream()" "true"
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Stream;
public class Main {
public Stream<Object> stream() {
Number[] numbers = {1, 2.0, 3};
return Arrays.<Object>stream(numbers).filter(Objects::nonNull);
}
}
@@ -0,0 +1,13 @@
// "Replace Arrays.asList().stream() with Stream.of()" "true"
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
List<List<Object>> list = Stream.<List<Object>>of(Arrays.asList(1,2,3), Arrays.asList(1.0, 2.0, 3.0))
.collect(Collectors.toList());
}
}
@@ -0,0 +1,12 @@
// "Replace Arrays.asList().stream() with Arrays.stream()" "true"
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Stream;
public class Main {
public Stream<Object> stream() {
Number[] numbers = {1, 2.0, 3};
return Arrays.<Object>asList(numbers).st<caret>ream().filter(Objects::nonNull);
}
}
@@ -0,0 +1,12 @@
// "Replace Arrays.asList().stream() with Stream.of()" "true"
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<List<Object>> list = Arrays.<List<Object>>asL<caret>ist(Arrays.asList(1,2,3), Arrays.asList(1.0, 2.0, 3.0)).stream()
.collect(Collectors.toList());
}
}