mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
InspectionProjectProfileManager.isInformationLevel used where applicable; StreamToLoopInspection highlights only terminal operation when highlighting is on
This commit is contained in:
+5
-16
@@ -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) {
|
||||
|
||||
+14
-2
@@ -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<String> 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();
|
||||
|
||||
+5
-10
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user