DFA: report imprecise methods in tests

This commit is contained in:
Tagir Valeev
2019-02-05 16:11:04 +07:00
parent c955be737e
commit e825df9b5c
5 changed files with 8 additions and 6 deletions
@@ -13,6 +13,7 @@ import com.intellij.codeInspection.dataFlow.fix.*;
import com.intellij.codeInspection.dataFlow.instructions.*;
import com.intellij.codeInspection.dataFlow.value.DfaConstValue;
import com.intellij.codeInspection.nullable.NullableStuffInspectionBase;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
@@ -195,7 +196,8 @@ public class DataFlowInspectionBase extends AbstractBaseJavaLocalInspectionTool
final DataFlowInstructionVisitor visitor = new DataFlowInstructionVisitor();
final RunnerResult rc = dfaRunner.analyzeMethod(scope, visitor, IGNORE_ASSERT_STATEMENTS, initialStates);
if (rc == RunnerResult.OK) {
if (dfaRunner.wasForciblyMerged() && Registry.is("ide.dfa.report.imprecise")) {
if (dfaRunner.wasForciblyMerged() &&
(ApplicationManager.getApplication().isUnitTestMode() || Registry.is("ide.dfa.report.imprecise"))) {
reportAnalysisQualityProblem(holder, scope, "dataflow.not.precise");
}
createDescription(dfaRunner, holder, visitor, scope);
@@ -63,7 +63,7 @@ class Constants {
static native Object get();
}
class NotTooComplexInitializer {
class <weak_warning descr="Class initializer is complex: data flow results could be imprecise">NotTooComplexInitializer</weak_warning> {
static {
int i = 1;
for(Object obj = Constants.get(); obj != Constants.C5; obj = Constants.get()) {
@@ -84,7 +84,7 @@ class NotTooComplexInitializer {
}
}
}
class NotTooComplexMergingInitializer {
class <weak_warning descr="Class initializer is complex: data flow results could be imprecise">NotTooComplexMergingInitializer</weak_warning> {
static {
foo(Constants.C1 == null, Constants.C2 == null, Constants.C3 == null,
Constants.C4 == null, Constants.C5 == null, Constants.C6 == null,
@@ -4,7 +4,7 @@ class Test {
enum A {X, Y, Z};
List<String> list1, list2;
void test(List<String> tokens) {
void <weak_warning descr="Method 'test' is complex: data flow results could be imprecise">test</weak_warning>(List<String> tokens) {
String t = "int";
A s = A.X;
A l = A.X;
@@ -191,7 +191,7 @@ public class ManyObjectEquals {
private String test183;
@Override
public boolean equals(Object o) {
public boolean <weak_warning descr="Method 'equals' is complex: data flow results could be imprecise">equals</weak_warning>(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ManyObjectEquals test = (ManyObjectEquals) o;
@@ -30,7 +30,7 @@ class NestedScopeComplexity {
static Object get() {return new Object();}
void test() {
void <weak_warning descr="Method 'test' is complex: data flow results could be imprecise">test</weak_warning>() {
int i = 1;
for(Object obj = get(); obj != C100; obj = get()) {
if (obj == C1) i = 2;