From 4fd3db662e99eec9837c6178b77c6800d2dd6dbd Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 10 Jan 2018 16:19:28 +0700 Subject: [PATCH] PointlessNullCheckInspection: fix to switch off reports on calls --- .../siyeh/InspectionGadgetsBundle.properties | 1 + .../src/com/siyeh/ig/DelegatingFix.java | 2 +- .../PointlessNullCheckInspection.java | 30 +++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index 21e53acc260d..0be1cd2b4e86 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -1182,6 +1182,7 @@ pointless.nullcheck.problem.descriptor.instanceof=Unnecessary 'null' check befor pointless.nullcheck.problem.descriptor.call=Unnecessary ''null'' check before ''{0}()'' call pointless.nullcheck.simplify.quickfix=Remove unnecessary ''{0}'' condition pointless.nullcheck.option.report.calls=Report unnecessary 'null' checks before method calls +pointless.nullcheck.option.report.calls.off=Do not report pointless 'null' check before calls introduce.constant.quickfix=Introduce constant make.initialization.explicit.quickfix=Make initialization explicit move.anonymous.to.inner.quickfix=Convert to named inner class diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java index c411ba2bdfa0..efe7f7ba7559 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java @@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull; public class DelegatingFix extends InspectionGadgetsFix { - private final LocalQuickFix delegate; + protected final LocalQuickFix delegate; public DelegatingFix(LocalQuickFix delegate) { this.delegate = delegate; diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/PointlessNullCheckInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/PointlessNullCheckInspection.java index 4de2f43c9817..5ec9a5485289 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/PointlessNullCheckInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/PointlessNullCheckInspection.java @@ -15,12 +15,15 @@ */ package com.siyeh.ig.controlflow; +import com.intellij.codeInsight.intention.LowPriorityAction; import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.codeInspection.SetInspectionOptionFix; import com.intellij.codeInspection.dataFlow.ControlFlowAnalyzer; import com.intellij.codeInspection.dataFlow.MethodContract; import com.intellij.codeInspection.dataFlow.StandardMethodContract; import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Iconable; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; @@ -28,6 +31,7 @@ import com.intellij.psi.util.PsiUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.DelegatingFix; import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.psiutils.*; import one.util.streamex.IntStreamEx; @@ -55,6 +59,8 @@ import static com.intellij.util.ObjectUtils.tryCast; * @author Hamlet D'Arcy */ public class PointlessNullCheckInspection extends BaseInspection { + private static final String REPORT_CALLS_OPTION = "REPORT_CALLS"; + public boolean REPORT_CALLS = true; @Nls @@ -86,10 +92,30 @@ public class PointlessNullCheckInspection extends BaseInspection { return new PointlessNullCheckVisitor(REPORT_CALLS); } + @NotNull @Override - public InspectionGadgetsFix buildFix(Object... infos) { + protected InspectionGadgetsFix[] buildFixes(Object... infos) { final PsiExpression expression = (PsiExpression)infos[0]; - return new PointlessNullCheckFix(expression.getText()); + PsiExpression parent = PsiTreeUtil.getParentOfType((PsiElement)infos[1], PsiInstanceOfExpression.class, PsiMethodCallExpression.class); + PointlessNullCheckFix removeNullCheckFix = new PointlessNullCheckFix(expression.getText()); + if (parent instanceof PsiMethodCallExpression) { + return new InspectionGadgetsFix[]{removeNullCheckFix, new DoNotReportOnCallsFix(this)}; + } + else { + return new InspectionGadgetsFix[]{removeNullCheckFix}; + } + } + + private static class DoNotReportOnCallsFix extends DelegatingFix implements LowPriorityAction, Iconable { + public DoNotReportOnCallsFix(PointlessNullCheckInspection inspection) { + super(new SetInspectionOptionFix(inspection, REPORT_CALLS_OPTION, + InspectionGadgetsBundle.message("pointless.nullcheck.option.report.calls.off"), false)); + } + + @Override + public Icon getIcon(int flags) { + return ((Iconable)delegate).getIcon(flags); + } } private static class PointlessNullCheckFix extends InspectionGadgetsFix {