diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java index 23421393a786..e4832a955217 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java @@ -71,14 +71,15 @@ class CollectMigration extends BaseStreamApiMigration { PsiElement result; if (toReplace != null) { result = ct.replace(toReplace, stream); + terminal.cleanUp(ct); removeLoop(ct, loopStatement); } else { PsiVariable variable = terminal.getTargetVariable(); LOG.assertTrue(variable != null); + terminal.cleanUp(ct); result = replaceInitializer(loopStatement, variable, variable.getInitializer(), stream, terminal.getStatus(), ct); } - terminal.cleanUp(); return result; } @@ -216,7 +217,7 @@ class CollectMigration extends BaseStreamApiMigration { public InitializerUsageStatus getStatus() { return myStatus; } - void cleanUp() {} + void cleanUp(CommentTracker ct) {} boolean isTrivial() { return generateIntermediate(new CommentTracker()).isEmpty(); @@ -670,9 +671,9 @@ class CollectMigration extends BaseStreamApiMigration { } @Override - public void cleanUp() { - myDownstream.cleanUp(); - myStatement.delete(); + public void cleanUp(CommentTracker ct) { + myDownstream.cleanUp(ct); + ct.delete(myStatement); } @Override @@ -754,12 +755,12 @@ class CollectMigration extends BaseStreamApiMigration { } @Override - public void cleanUp() { + public void cleanUp(CommentTracker ct) { PsiLocalVariable variable = myUpstream.getTargetVariable(); if (variable != null && myUpstream.getStatus() != ControlFlowUtils.InitializerUsageStatus.AT_WANTED_PLACE) { - variable.delete(); + ct.delete(variable); } - myUpstream.cleanUp(); + myUpstream.cleanUp(ct); } } diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FuseStreamOperationsInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FuseStreamOperationsInspection.java index b442bfa99c79..6325ad9a2bf6 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FuseStreamOperationsInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FuseStreamOperationsInspection.java @@ -205,6 +205,7 @@ public class FuseStreamOperationsInspection extends AbstractBaseJavaLocalInspect String stream = terminal.generateIntermediate(ct) + terminal.generateTerminal(ct, myStrictMode); PsiElement toReplace = terminal.getElementToReplace(); PsiElement result; + terminal.cleanUp(ct); if (toReplace != null) { result = ct.replaceAndRestoreComments(toReplace, stream); } @@ -213,7 +214,6 @@ public class FuseStreamOperationsInspection extends AbstractBaseJavaLocalInspect PsiExpression initializer = Objects.requireNonNull(variable.getInitializer()); result = ct.replaceAndRestoreComments(initializer, stream); } - terminal.cleanUp(); LambdaCanBeMethodReferenceInspection.replaceAllLambdasWithMethodReferences(result); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/afterSetListSort.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/afterSetListSort.java index b150c343099f..910636d4c1b9 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/afterSetListSort.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/afterSetListSort.java @@ -5,6 +5,9 @@ import java.util.stream.Stream; public class Test { public void testSetListSort(String[] args) { + // foo + // bar + /*baz*/ System.out.println(Arrays.stream(args).distinct().sorted().toArray()); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/beforeSetListSort.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/beforeSetListSort.java index 74b9a8dda600..5b48320bfdea 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/beforeSetListSort.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fuseStreamOperations/beforeSetListSort.java @@ -6,8 +6,8 @@ import java.util.stream.Stream; public class Test { public void testSetListSort(String[] args) { Set set = Arrays.stream(args).collect(Collectors.toSet()); - List list = new ArrayList<>(set); - list.sort(null); - System.out.println(list.toArray()); + List list = new ArrayList<>(set); // foo + list.sort(null); // bar + System.out.println(list.toArray(/*baz*/)); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java index 53e3818d51b0..219f4d1f08f2 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java @@ -10,6 +10,7 @@ public class Collect { } void collectNames(List persons){ - List names = persons.stream().map(Person::getName).sorted(Comparator.comparing(Person::getName)).collect(Collectors.toList()); + List names = persons.stream().map(Person::getName).sorted(Comparator.comparing(/*c2*/Person::getName)).collect(Collectors.toList()); + // comment } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java index 1c616c54b23d..395d6e0bb6e4 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java @@ -13,6 +13,7 @@ public class Collect { for (Person person : persons) { names.add(person.getName()); } - Collections.sort(names, Comparator.comparing(Person::getName)); + Collections.// comment + sort(names, Comparator.comparing(/*c2*/Person::getName)); } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java index a0c64620255d..b545676ba4d3 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java @@ -313,6 +313,8 @@ public class CommentTracker { private void grabCommentsOnDelete(PsiElement element) { if (element instanceof PsiExpression && element.getParent() instanceof PsiExpressionStatement || + (element.getParent() instanceof PsiDeclarationStatement && + ((PsiDeclarationStatement)element.getParent()).getDeclaredElements().length == 1) || element.getParent() instanceof PsiJavaCodeReferenceElement) { element = element.getParent(); }