From 5f3c3ee3f92fa43410feb9bd91598accf89ae3ea Mon Sep 17 00:00:00 2001 From: Jeremy Dubreil Date: Wed, 7 Feb 2018 17:13:51 -0800 Subject: [PATCH] [infer][genrule] use Eradicate for the genrule test Reviewed By: sblackshear Differential Revision: D6921710 fbshipit-source-id: 911100a --- DEFS | 1 + infer/tests/build_systems/buck/issues.exp | 10 ++++++---- infer/tests/build_systems/genrule/issues.exp | 4 +++- .../build_systems/genrule/module1/Class1.java | 2 ++ .../tests/build_systems/genrule/module2/BUCK | 3 ++- .../build_systems/genrule/module2/Class2.java | 19 +++++++++++++++---- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/DEFS b/DEFS index d54042899..45bfc2c62 100644 --- a/DEFS +++ b/DEFS @@ -40,6 +40,7 @@ def create_infer_genrule( srcs=srcs, cmd = ' '.join([ os.getenv('INFER_BIN', 'infer'), + '--eradicate-only', '--results-dir', '$OUT', '--classpath', '$(classpath :{})'.format(name), '--sourcepath', '$SRCDIR', diff --git a/infer/tests/build_systems/buck/issues.exp b/infer/tests/build_systems/buck/issues.exp index 798120a0a..b2ecc4c00 100644 --- a/infer/tests/build_systems/buck/issues.exp +++ b/infer/tests/build_systems/buck/issues.exp @@ -1,6 +1,8 @@ infer/tests/build_systems/genrule/module1/Class1.java, void Class1.localNPE1(), 2, NULL_DEREFERENCE, [start of procedure localNPE1()] +infer/tests/build_systems/genrule/module2/Class2.java, void Class2.dereferenceInterTargetFieldBad(Class1), 1, NULL_DEREFERENCE, [start of procedure dereferenceInterTargetFieldBad(...)] +infer/tests/build_systems/genrule/module2/Class2.java, void Class2.dereferenceLocalNullableFieldBad(), 1, NULL_DEREFERENCE, [start of procedure dereferenceLocalNullableFieldBad()] infer/tests/build_systems/genrule/module2/Class2.java, void Class2.followMethodDeclarationOnlyBad(SkipImplementationClass1), 2, NULL_DEREFERENCE, [start of procedure followMethodDeclarationOnlyBad(...),Skipping annotatedNullable(): method has no implementation,Definition of annotatedNullable()] -infer/tests/build_systems/genrule/module2/Class2.java, void Class2.interTargetAbstractNPE(Class1), 2, NULL_DEREFERENCE, [start of procedure interTargetAbstractNPE(...),Skipping abstractMayReturnNull(): abstract method,Definition of abstractMayReturnNull()] -infer/tests/build_systems/genrule/module2/Class2.java, void Class2.interTargetNPE(), 2, NULL_DEREFERENCE, [start of procedure interTargetNPE(),start of procedure returnsNull(),return from a call to String Class1.returnsNull()] -infer/tests/build_systems/genrule/module2/Class2.java, void Class2.interTargetNativeNPE(Class1), 2, NULL_DEREFERENCE, [start of procedure interTargetNativeNPE(...),Skipping nativeMayReturnNull(): method has no implementation,Definition of nativeMayReturnNull()] -infer/tests/build_systems/genrule/module2/Class2.java, void Class2.localNPE2(), 2, NULL_DEREFERENCE, [start of procedure localNPE2()] +infer/tests/build_systems/genrule/module2/Class2.java, void Class2.interTargetAbstractNPEBad(Class1), 2, NULL_DEREFERENCE, [start of procedure interTargetAbstractNPEBad(...),Skipping abstractMayReturnNull(): abstract method,Definition of abstractMayReturnNull()] +infer/tests/build_systems/genrule/module2/Class2.java, void Class2.interTargetNPEBad(), 2, NULL_DEREFERENCE, [start of procedure interTargetNPEBad(),start of procedure returnsNull(),return from a call to String Class1.returnsNull()] +infer/tests/build_systems/genrule/module2/Class2.java, void Class2.interTargetNativeNPEBad(Class1), 2, NULL_DEREFERENCE, [start of procedure interTargetNativeNPEBad(...),Skipping nativeMayReturnNull(): method has no implementation,Definition of nativeMayReturnNull()] +infer/tests/build_systems/genrule/module2/Class2.java, void Class2.localNPE2Bad(), 2, NULL_DEREFERENCE, [start of procedure localNPE2Bad()] diff --git a/infer/tests/build_systems/genrule/issues.exp b/infer/tests/build_systems/genrule/issues.exp index eacad8493..9b5412472 100644 --- a/infer/tests/build_systems/genrule/issues.exp +++ b/infer/tests/build_systems/genrule/issues.exp @@ -1 +1,3 @@ -build_systems/genrule/module2/Class2.java, void Class2.localNPE2(), 2, NULL_DEREFERENCE, [start of procedure localNPE2()] +build_systems/genrule/module2/Class2.java, void Class2.dereferenceInterTargetFieldBad(Class1), 1, ERADICATE_NULL_METHOD_CALL, [origin,The value of `class1.field1` in the call to `toString()` could be null. (Origin: field Class1.field1 at line 55)] +build_systems/genrule/module2/Class2.java, void Class2.dereferenceLocalNullableFieldBad(), 1, ERADICATE_NULL_METHOD_CALL, [origin,The value of `Class2.field2` in the call to `toString()` could be null. (Origin: field Class2.field2 at line 51)] +build_systems/genrule/module2/Class2.java, void Class2.localNPE2Bad(), 2, ERADICATE_NULL_METHOD_CALL, [origin,The value of `obj` in the call to `toString()` could be null. (Origin: null constant at line 21)] diff --git a/infer/tests/build_systems/genrule/module1/Class1.java b/infer/tests/build_systems/genrule/module1/Class1.java index 9698942cd..6ad802d7f 100644 --- a/infer/tests/build_systems/genrule/module1/Class1.java +++ b/infer/tests/build_systems/genrule/module1/Class1.java @@ -13,6 +13,8 @@ import genrule.annotations.Nullable; public abstract class Class1 { + public @Nullable Object field1; + public static @Nullable String returnsNull() { return null; } diff --git a/infer/tests/build_systems/genrule/module2/BUCK b/infer/tests/build_systems/genrule/module2/BUCK index 79218845f..a1f50d968 100644 --- a/infer/tests/build_systems/genrule/module2/BUCK +++ b/infer/tests/build_systems/genrule/module2/BUCK @@ -2,6 +2,7 @@ java_library( name='module2', srcs=glob(["*.java"]), deps=[ - '//infer/tests/build_systems/genrule/module1:module1' + '//infer/tests/build_systems/genrule/module1:module1', + '//infer/tests/build_systems/genrule/annotations:annotations', ] ) diff --git a/infer/tests/build_systems/genrule/module2/Class2.java b/infer/tests/build_systems/genrule/module2/Class2.java index 3c8433ef9..3e31859fe 100644 --- a/infer/tests/build_systems/genrule/module2/Class2.java +++ b/infer/tests/build_systems/genrule/module2/Class2.java @@ -9,27 +9,30 @@ package genrule.module2; +import genrule.annotations.Nullable; import genrule.module1.Class1; import genrule.module1.SkipImplementationClass1; public class Class2 { - void localNPE2() { + @Nullable Object field2; + + void localNPE2Bad() { Object obj = null; obj.toString(); } - void interTargetNPE() { + void interTargetNPEBad() { Object obj = Class1.returnsNull(); obj.toString(); } - void interTargetAbstractNPE(Class1 class1) { + void interTargetAbstractNPEBad(Class1 class1) { Object obj = class1.abstractMayReturnNull(); obj.toString(); } - void interTargetNativeNPE(Class1 class1) { + void interTargetNativeNPEBad(Class1 class1) { Object obj = class1.nativeMayReturnNull(); obj.toString(); } @@ -44,4 +47,12 @@ public class Class2 { obj2.toString(); } + void dereferenceLocalNullableFieldBad() { + field2.toString(); + } + + void dereferenceInterTargetFieldBad(Class1 class1) { + class1.field1.toString(); + } + }