diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java index 7ee9c4c53373..d3f8bca78f6d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java @@ -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 diff --git a/java/java-tests/testData/inspection/streamApiCallChains/afterAsListArrayStreamGeneric.java b/java/java-tests/testData/inspection/streamApiCallChains/afterAsListArrayStreamGeneric.java new file mode 100644 index 000000000000..ac3efc0a2605 --- /dev/null +++ b/java/java-tests/testData/inspection/streamApiCallChains/afterAsListArrayStreamGeneric.java @@ -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 stream() { + Number[] numbers = {1, 2.0, 3}; + return Arrays.stream(numbers).filter(Objects::nonNull); + } +} diff --git a/java/java-tests/testData/inspection/streamApiCallChains/afterAsListLiteralStreamGeneric.java b/java/java-tests/testData/inspection/streamApiCallChains/afterAsListLiteralStreamGeneric.java new file mode 100644 index 000000000000..5d06ba253ccd --- /dev/null +++ b/java/java-tests/testData/inspection/streamApiCallChains/afterAsListLiteralStreamGeneric.java @@ -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 = Stream.>of(Arrays.asList(1,2,3), Arrays.asList(1.0, 2.0, 3.0)) + .collect(Collectors.toList()); + } +} diff --git a/java/java-tests/testData/inspection/streamApiCallChains/beforeAsListArrayStreamGeneric.java b/java/java-tests/testData/inspection/streamApiCallChains/beforeAsListArrayStreamGeneric.java new file mode 100644 index 000000000000..3ed211068525 --- /dev/null +++ b/java/java-tests/testData/inspection/streamApiCallChains/beforeAsListArrayStreamGeneric.java @@ -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 stream() { + Number[] numbers = {1, 2.0, 3}; + return Arrays.asList(numbers).stream().filter(Objects::nonNull); + } +} diff --git a/java/java-tests/testData/inspection/streamApiCallChains/beforeAsListLiteralStreamGeneric.java b/java/java-tests/testData/inspection/streamApiCallChains/beforeAsListLiteralStreamGeneric.java new file mode 100644 index 000000000000..4a6a0fde7b7e --- /dev/null +++ b/java/java-tests/testData/inspection/streamApiCallChains/beforeAsListLiteralStreamGeneric.java @@ -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 = Arrays.>asList(Arrays.asList(1,2,3), Arrays.asList(1.0, 2.0, 3.0)).stream() + .collect(Collectors.toList()); + } +}