From 1862789caf0f00cdebe74508ac0dceac7e1fb63d Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 30 Sep 2014 15:05:05 +0200 Subject: [PATCH] don't use inferred purity in "Result of method call ignored" inspection for now (IDEA-130584) --- platform/util/resources/misc/registry.properties | 3 +++ .../siyeh/ig/bugs/IgnoreResultOfCallInspectionBase.java | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 3ac31010f867..df9999d2221f 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -271,6 +271,9 @@ ide.non.english.keyboard.layout.fix.description=Enables a fix for key codes with ide.dfa.getters.with.side.effects=java\\.nio\\..*ByteBuffer\\.get.* ide.dfa.getters.with.side.effects.description=A regex on qualified names of methods that look like getters but are not. For Constant Conditions & Exception inspection +ide.ignore.call.result.inspection.honor.inferred.pure=false +ide.ignore.call.result.inspection.honor.inferred.pure.description=Whether inferred @Contract(pure=true) annotations should be taken into account in ''Result of method call ignored'' inspection + ide.enable.toolwindow.stack=false change.signature.awesome.mode=true diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/IgnoreResultOfCallInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/IgnoreResultOfCallInspectionBase.java index ee70da0c50ed..5306ade7d656 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/IgnoreResultOfCallInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/IgnoreResultOfCallInspectionBase.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInspection.dataFlow.ControlFlowAnalyzer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.*; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiUtilCore; @@ -148,8 +149,12 @@ public class IgnoreResultOfCallInspectionBase extends BaseInspection { registerMethodCallError(call, aClass); return; } - - if (ControlFlowAnalyzer.isPure(method)) { + + PsiAnnotation anno = ControlFlowAnalyzer.findContractAnnotation(method); + boolean honorInferred = Registry.is("ide.ignore.call.result.inspection.honor.inferred.pure"); + if (anno != null && + (honorInferred || !AnnotationUtil.isInferredAnnotation(anno)) && + Boolean.TRUE.equals(AnnotationUtil.getBooleanAttributeValue(anno, "pure"))) { registerMethodCallError(call, aClass); return; }