From c00f3ff5b068df9c4ece6ef3b77b129accd6000c Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 30 Nov 2016 16:34:21 +0700 Subject: [PATCH] InspectionProjectProfileManager.isInformationLevel used where applicable; StreamToLoopInspection highlights only terminal operation when highlighting is on --- .../StreamApiMigrationInspection.java | 21 +++++-------------- .../streamToLoop/StreamToLoopInspection.java | 16 ++++++++++++-- .../com/siyeh/ig/BaseInspectionVisitor.java | 15 +++++-------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index 609852c32974..428e500778a1 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -15,13 +15,14 @@ */ package com.intellij.codeInspection.streamMigration; -import com.intellij.codeHighlighting.HighlightDisplayLevel; import com.intellij.codeInsight.ExceptionUtil; import com.intellij.codeInsight.PsiEquivalenceUtil; import com.intellij.codeInsight.daemon.GroupNames; -import com.intellij.codeInsight.daemon.HighlightDisplayKey; import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; -import com.intellij.codeInspection.*; +import com.intellij.codeInspection.BaseJavaBatchLocalInspectionTool; +import com.intellij.codeInspection.LambdaCanBeMethodReferenceInspection; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; import com.intellij.codeInspection.util.OptionalUtil; import com.intellij.openapi.diagnostic.Logger; @@ -75,8 +76,6 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo public boolean REPLACE_TRIVIAL_FOREACH; public boolean SUGGEST_FOREACH; - private HighlightDisplayKey myKey; - @Nullable @Override public JComponent createOptionsPanel() { @@ -721,17 +720,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo @NotNull private TextRange getRange(PsiLoopStatement statement) { - boolean wholeStatement = false; - if(myIsOnTheFly) { - if (myKey == null) { - myKey = HighlightDisplayKey.find(getShortName()); - } - if (myKey != null) { - InspectionProfile profile = InspectionProjectProfileManager.getInstance(statement.getProject()).getCurrentProfile(); - HighlightDisplayLevel level = profile.getErrorLevel(myKey, statement); - wholeStatement = HighlightDisplayLevel.DO_NOT_SHOW.equals(level); - } - } + boolean wholeStatement = myIsOnTheFly && InspectionProjectProfileManager.isInformationLevel(getShortName(), statement); if(statement instanceof PsiForeachStatement) { PsiJavaToken rParenth = ((PsiForeachStatement)statement).getRParenth(); if (wholeStatement && rParenth != null) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamToLoop/StreamToLoopInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamToLoop/StreamToLoopInspection.java index fd7b28d5faff..e5f29f0cd33b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamToLoop/StreamToLoopInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamToLoop/StreamToLoopInspection.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInspection.streamToLoop; +import com.intellij.codeInsight.daemon.HighlightDisplayKey; import com.intellij.codeInspection.BaseJavaBatchLocalInspectionTool; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; @@ -23,7 +24,9 @@ import com.intellij.codeInspection.util.OptionalUtil; import com.intellij.lang.java.lexer.JavaLexer; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; import com.intellij.pom.java.LanguageLevel; +import com.intellij.profile.codeInspection.InspectionProjectProfileManager; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; @@ -48,6 +51,8 @@ import static com.intellij.codeInspection.streamToLoop.Operation.FlatMapOperatio public class StreamToLoopInspection extends BaseJavaBatchLocalInspectionTool { private static final Logger LOG = Logger.getInstance(StreamToLoopInspection.class); + private HighlightDisplayKey myKey; + // To quickly filter out most of the non-interesting method calls private static final Set SUPPORTED_TERMINALS = StreamEx.of("count", "sum", "summaryStatistics", "reduce", "collect", "findFirst", "findAny", "anyMatch", "allMatch", "noneMatch", @@ -64,7 +69,8 @@ public class StreamToLoopInspection extends BaseJavaBatchLocalInspectionTool { public void visitMethodCallExpression(PsiMethodCallExpression call) { super.visitMethodCallExpression(call); PsiReferenceExpression expression = call.getMethodExpression(); - if (!SUPPORTED_TERMINALS.contains(expression.getReferenceName()) || !isSupportedCodeLocation(call)) return; + PsiElement nameElement = expression.getReferenceNameElement(); + if (nameElement == null || !SUPPORTED_TERMINALS.contains(nameElement.getText()) || !isSupportedCodeLocation(call)) return; PsiMethod method = call.resolveMethod(); if(method == null) return; PsiClass aClass = method.getContainingClass(); @@ -74,7 +80,13 @@ public class StreamToLoopInspection extends BaseJavaBatchLocalInspectionTool { Operation op = createOperationFromCall(StreamVariable.STUB, currentCall); if(op == null) return; if(op instanceof SourceOperation) { - holder.registerProblem(call, "Replace stream API chain with loop", new ReplaceStreamWithLoopFix()); + TextRange range; + if(isOnTheFly && InspectionProjectProfileManager.isInformationLevel(getShortName(), call)) { + range = new TextRange(0, call.getTextLength()); + } else { + range = nameElement.getTextRange().shiftRight(-call.getTextOffset()); + } + holder.registerProblem(call, range, "Replace stream API chain with loop", new ReplaceStreamWithLoopFix()); return; } PsiExpression qualifier = currentCall.getMethodExpression().getQualifierExpression(); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java index bc0ddfc78924..fe58f995b9ef 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java @@ -15,9 +15,10 @@ */ package com.siyeh.ig; -import com.intellij.codeHighlighting.HighlightDisplayLevel; -import com.intellij.codeInsight.daemon.HighlightDisplayKey; -import com.intellij.codeInspection.*; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.codeInspection.ProblemHighlightType; +import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.util.TextRange; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; import com.intellij.psi.*; @@ -245,12 +246,6 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor { } protected boolean isVisibleHighlight(@NotNull PsiElement element) { - if (!isOnTheFly()) { - return true; - } - final HighlightDisplayKey key = HighlightDisplayKey.find(inspection.getShortName()); - final InspectionProfile profile = InspectionProjectProfileManager.getInstance(element.getProject()).getCurrentProfile(); - final HighlightDisplayLevel errorLevel = profile.getErrorLevel(key, element); - return !HighlightDisplayLevel.DO_NOT_SHOW.equals(errorLevel); + return !isOnTheFly() || !InspectionProjectProfileManager.isInformationLevel(inspection.getShortName(), element); } } \ No newline at end of file