don't use inferred purity in "Result of method call ignored" inspection for now (IDEA-130584)

This commit is contained in:
peter
2014-09-30 17:23:50 +02:00
parent d51e859340
commit 1862789caf
2 changed files with 10 additions and 2 deletions
@@ -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
@@ -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;
}