From 205cf1eb2b62843f410920ddaa0f4ff6fdca4883 Mon Sep 17 00:00:00 2001 From: "Andrey.Cherkasov" Date: Wed, 12 Jan 2022 14:11:07 +0300 Subject: [PATCH] [java-inspections] Java8CollectionRemoveIf: highlight only 'for'/'while' keyword instead of the whole statement GitOrigin-RevId: b2b312efab7a974dab6a2021a788274bc6cfc1b2 --- .../java18api/Java8CollectionRemoveIfInspection.java | 7 +++---- .../beforeForEachRemoveArrayList.java | 2 +- .../java8CollectionRemoveIf/beforeForEachRemoveSimple.java | 2 +- .../beforeForEachRemoveToArray.java | 2 +- .../beforeIteratorRemoveInline.java | 2 +- .../beforeIteratorRemoveInlineNoBrace.java | 2 +- .../beforeIteratorRemoveInlineShortCircuit.java | 2 +- .../beforeIteratorRemoveInlineTwice.java | 2 +- .../beforeIteratorRemoveListIterator.java | 2 +- 9 files changed, 11 insertions(+), 12 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java b/java/java-impl/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java index 3e0c9ce6b29d..96bc63a4f72f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java @@ -1,4 +1,4 @@ -// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInspection.java18api; import com.intellij.codeInsight.daemon.QuickFixBundle; @@ -8,7 +8,6 @@ import com.intellij.codeInspection.util.IterableTraversal; import com.intellij.codeInspection.util.IteratorDeclaration; import com.intellij.codeInspection.util.LambdaGenerationUtil; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; import com.intellij.pom.java.JavaFeature; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; @@ -75,7 +74,7 @@ public class Java8CollectionRemoveIfInspection extends AbstractBaseJavaLocalInsp } private void registerProblem(PsiLoopStatement statement, PsiJavaToken endToken) { - holder.registerProblem(statement, new TextRange(0, endToken.getTextOffset() - statement.getTextOffset() + 1), + holder.registerProblem(statement.getFirstChild(), QuickFixBundle.message("java.8.collection.removeif.inspection.description"), new ReplaceWithRemoveIfQuickFix()); } @@ -134,7 +133,7 @@ public class Java8CollectionRemoveIfInspection extends AbstractBaseJavaLocalInsp @Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - PsiElement element = descriptor.getStartElement(); + PsiElement element = descriptor.getStartElement().getParent(); if(!(element instanceof PsiLoopStatement)) return; PsiLoopStatement loop = (PsiLoopStatement)element; PsiStatement[] statements = ControlFlowUtils.unwrapBlock(loop.getBody()); diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveArrayList.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveArrayList.java index 52066fb817cd..811ce94f3c1f 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveArrayList.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveArrayList.java @@ -4,7 +4,7 @@ import java.util.*; public class Main { public void removeEmpty(List list) throws Exception { // Copy to avoid CME - for(String item : new ArrayList<>(list)) { + for(String item : new ArrayList<>(list)) { if(item.isEmpty()) list.remove(item); } } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveSimple.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveSimple.java index 8fb8b65282b0..24077d212f20 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveSimple.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveSimple.java @@ -3,7 +3,7 @@ import java.util.*; public class Main { public void removeEmpty(List list) throws Exception { - for(String item : list) { + for(String item : list) { // Presumably CopyOnWriteArrayList if(item.isEmpty()) list.remove(item); } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveToArray.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveToArray.java index c2dc9a8bdc46..cc4ce019de03 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveToArray.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeForEachRemoveToArray.java @@ -4,7 +4,7 @@ import java.util.*; public class Main { public void removeEmpty(List list) throws Exception { // Copy to avoid CME - for(String item : list.toArray(new String[list.size()])) { + for(String item : list.toArray(new String[list.size()])) { if(item.isEmpty()) list.remove(item); } } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInline.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInline.java index 844361a7a314..eb7cb272705b 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInline.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInline.java @@ -4,7 +4,7 @@ import java.util.List; public class Main { public void testIterator(List> data, boolean b) { - for(Iterator> iter = (data.iterator()); iter.hasNext();) { + for(Iterator> iter = (data.iterator()); iter.hasNext();) { if(iter.next().isEmpty() && /* also check the flag */ b) { iter.remove(); } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineNoBrace.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineNoBrace.java index 3bf8fc6b1f22..d4edce6df129 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineNoBrace.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineNoBrace.java @@ -4,7 +4,7 @@ import java.util.List; public class Main { public void testIterator(List> data, boolean b) { - for(Iterator> iter = (data.iterator()); iter.hasNext();) + for(Iterator> iter = (data.iterator()); iter.hasNext();) if(iter.next().isEmpty() && /* also check the flag */ b) iter.remove(); } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineShortCircuit.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineShortCircuit.java index ab69933f6648..62d5bf016b99 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineShortCircuit.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineShortCircuit.java @@ -4,7 +4,7 @@ import java.util.List; public class Main { public void testIterator(List> data, boolean b) { - for(Iterator> iter = data.iterator(); iter.hasNext();) { + for(Iterator> iter = data.iterator(); iter.hasNext();) { if(b && iter.next().isEmpty()) { iter.remove(); } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineTwice.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineTwice.java index e733b1d1bc09..4d164647d9d3 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineTwice.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveInlineTwice.java @@ -4,7 +4,7 @@ import java.util.List; public class Main { public void testIterator(List> data, boolean b) { - for(Iterator> iter = data.iterator(); iter.hasNext();) { + for(Iterator> iter = data.iterator(); iter.hasNext();) { if(iter.next().isEmpty() && iter.next().isEmpty()) { iter.remove(); } diff --git a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveListIterator.java b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveListIterator.java index 2a048162038d..129e8d08c1f5 100644 --- a/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveListIterator.java +++ b/java/java-tests/testData/inspection/java8CollectionRemoveIf/beforeIteratorRemoveListIterator.java @@ -4,7 +4,7 @@ import java.util.*; public class Test { void test(List list) { ListIterator iterator = list.listIterator(); - while(iterator.hasNext()) { + while(iterator.hasNext()) { if(iterator.next().isEmpty()) { iterator.remove(); }