From 6746c6e1d1cf5f7dae8e8e5047639ac17b8e72f9 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 4 Dec 2017 17:36:00 +0700 Subject: [PATCH] StreamApiMigration: fixed exception when void expression is used as method argument --- .../streamMigration/ForEachMigration.java | 5 +++-- .../streamApiMigration/foreach/afterForEachVoid.java | 11 +++++++++++ .../streamApiMigration/foreach/beforeForEachVoid.java | 11 +++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVoid.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVoid.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/ForEachMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/ForEachMigration.java index 881b84764b53..04e52591a05e 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/ForEachMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/ForEachMigration.java @@ -48,6 +48,7 @@ class ForEachMigration extends BaseStreamApiMigration { if(args.length != 1) return null; PsiExpression arg = args[0]; if(ExpressionUtils.isReferenceTo(arg, tb.getVariable())) return null; + if(PsiType.VOID.equals(arg.getType())) return null; PsiExpression qualifier = call.getMethodExpression().getQualifierExpression(); if(tb.dependsOn(qualifier) || VariableAccessUtils.variableIsUsed(tb.getVariable(), qualifier) || @@ -72,9 +73,9 @@ class ForEachMigration extends BaseStreamApiMigration { if (addedType == null) addedType = call.getType(); JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project); SuggestedNameInfo suggestedNameInfo = - codeStyleManager.suggestVariableName(VariableKind.LOCAL_VARIABLE, null, null, addedType, false); + codeStyleManager.suggestVariableName(VariableKind.LOCAL_VARIABLE, null, null, addedType, true); if (suggestedNameInfo.names.length == 0) { - suggestedNameInfo = codeStyleManager.suggestVariableName(VariableKind.LOCAL_VARIABLE, "item", null, null, false); + suggestedNameInfo = codeStyleManager.suggestVariableName(VariableKind.LOCAL_VARIABLE, "item", null, null, true); } String varName = codeStyleManager.suggestUniqueVariableName(suggestedNameInfo, call, false).names[0]; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVoid.java new file mode 100644 index 000000000000..2cc4a04d0e48 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVoid.java @@ -0,0 +1,11 @@ +// "Replace with forEach" "true" + +import java.util.stream.IntStream; + +public class Test { + void foo(int i) {} + + void test() { + IntStream.range(0, 10).forEach(i -> System.out.println(foo(i))); + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVoid.java new file mode 100644 index 000000000000..7b69066b96f0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVoid.java @@ -0,0 +1,11 @@ +// "Replace with forEach" "true" + +public class Test { + void foo(int i) {} + + void test() { + for(int i=0; i<10; i++) { + System.out.println(foo(i)); + } + } +}