From e6d50837ba21bd50896b52209cb230e95d720ec4 Mon Sep 17 00:00:00 2001 From: Gabriela Cunha Sampaio Date: Mon, 25 Jan 2021 03:43:01 -0800 Subject: [PATCH] Renaming Java tests in Pulse Summary: renaming Java tests in Pulse based on false positives/negatives inspection. Reviewed By: jvillard Differential Revision: D25903168 fbshipit-source-id: 5585cca40 --- .../java/pulse/AnalysisStops.java | 2 +- .../codetoanalyze/java/pulse/Builtins.java | 6 ++-- .../codetoanalyze/java/pulse/CursorNPEs.java | 6 ++-- .../java/pulse/DoubleExample.java | 2 +- .../java/pulse/DynamicDispatch.java | 10 +++--- .../java/pulse/HashMapExample.java | 10 +++--- .../java/pulse/IntegerExample.java | 2 +- .../tests/codetoanalyze/java/pulse/Lists.java | 6 ++-- .../java/pulse/NullPointerExceptions.java | 30 ++++++++-------- .../java/pulse/SuppressLintExample.java | 3 +- .../tests/codetoanalyze/java/pulse/issues.exp | 34 +++++++++---------- 11 files changed, 56 insertions(+), 55 deletions(-) diff --git a/infer/tests/codetoanalyze/java/pulse/AnalysisStops.java b/infer/tests/codetoanalyze/java/pulse/AnalysisStops.java index 93b2c5ef7..31524ef28 100644 --- a/infer/tests/codetoanalyze/java/pulse/AnalysisStops.java +++ b/infer/tests/codetoanalyze/java/pulse/AnalysisStops.java @@ -230,7 +230,7 @@ public class AnalysisStops { accessPathOnParamOk(ret); } - public void skipFunctionInLoopMayCauseFalseNegativeBad() { + public void FN_skipFunctionInLoopMayCauseFalseNegativeBad() { Object o = null; for (int i = 0; i < 10; i++) { externalFunc(); diff --git a/infer/tests/codetoanalyze/java/pulse/Builtins.java b/infer/tests/codetoanalyze/java/pulse/Builtins.java index f9e8b072c..191c7b81e 100644 --- a/infer/tests/codetoanalyze/java/pulse/Builtins.java +++ b/infer/tests/codetoanalyze/java/pulse/Builtins.java @@ -11,7 +11,7 @@ import com.facebook.infer.builtins.InferBuiltins; public class Builtins { - void blockErrorOk() { + void FP_blockErrorOk() { Object x = null; InferBuiltins.assume(x != null); x.toString(); @@ -23,14 +23,14 @@ public class Builtins { y.toString(); } - void blockErrorIntAssumeOk(Object x) { + void FP_blockErrorIntAssumeOk(Object x) { Object y = null; int i = 0; InferBuiltins.assume(i != 0); y.toString(); } - void causeErrorBad(Object x) { + void FN_causeErrorBad(Object x) { InferBuiltins.assume(x == null); x.toString(); } diff --git a/infer/tests/codetoanalyze/java/pulse/CursorNPEs.java b/infer/tests/codetoanalyze/java/pulse/CursorNPEs.java index 46506e806..5a2fdedc4 100644 --- a/infer/tests/codetoanalyze/java/pulse/CursorNPEs.java +++ b/infer/tests/codetoanalyze/java/pulse/CursorNPEs.java @@ -31,7 +31,7 @@ public class CursorNPEs { Context mContext; ContentResolver mContentResolver; - public void cursorFromContentResolverNPE(String customClause) { + public void FN_cursorFromContentResolverNPE(String customClause) { String[] projection = {"COUNT(*)"}; String selectionClause = selectionClause = customClause; @@ -42,7 +42,7 @@ public class CursorNPEs { cursor.close(); } - public void cursorFromMediaNPE() { + public void FN_cursorFromMediaNPE() { Cursor cursor = MediaStore.Images.Media.query(mContentResolver, null, null, null, null, null); cursor.close(); } @@ -54,7 +54,7 @@ public class CursorNPEs { cursor.close(); } - public int cursorFromDownloadManagerNPE(DownloadManager downloadManager) { + public int FN_cursorFromDownloadManagerNPE(DownloadManager downloadManager) { DownloadManager.Query query = new DownloadManager.Query(); Cursor cursor = null; try { diff --git a/infer/tests/codetoanalyze/java/pulse/DoubleExample.java b/infer/tests/codetoanalyze/java/pulse/DoubleExample.java index e69bd1f19..ad5537d25 100644 --- a/infer/tests/codetoanalyze/java/pulse/DoubleExample.java +++ b/infer/tests/codetoanalyze/java/pulse/DoubleExample.java @@ -18,7 +18,7 @@ public class DoubleExample { return x + 1.0; } - private Double testdReadNullableBad() { + private Double FN_testdReadNullableBad() { return x + 1.0; } } diff --git a/infer/tests/codetoanalyze/java/pulse/DynamicDispatch.java b/infer/tests/codetoanalyze/java/pulse/DynamicDispatch.java index 5d80b4aa7..1c3fd784d 100644 --- a/infer/tests/codetoanalyze/java/pulse/DynamicDispatch.java +++ b/infer/tests/codetoanalyze/java/pulse/DynamicDispatch.java @@ -26,12 +26,12 @@ public class DynamicDispatch { i.foo().toString(); } - static void interfaceShouldNotCauseFalseNegativeHardOK(Interface i) { + static void FN_interfaceShouldNotCauseFalseNegativeHardOK(Interface i) { i.foo().toString(); } static void callWithBadImplementationBad_FN(Impl impl) { - interfaceShouldNotCauseFalseNegativeHardOK(impl); + FN_interfaceShouldNotCauseFalseNegativeHardOK(impl); } static class Supertype { @@ -100,13 +100,13 @@ public class DynamicDispatch { dynamicDispatchWrapperBar(o).toString(); } - static void dynamicDispatchCallsWrapperWithSubtypeBad_FN() { + static void FN_dynamicDispatchCallsWrapperWithSubtypeBad() { // Should report because Subtype.foo() returns null Supertype o = new Subtype(); dynamicDispatchWrapperFoo(o).toString(); } - static void dynamicDispatchCallsWrapperWithSubtypeOK_FP() { + static void FP_dynamicDispatchCallsWrapperWithSubtypeOK() { // Should not report because Subtype.bar() does not returns null Supertype o = new Subtype(); dynamicDispatchWrapperBar(o).toString(); @@ -137,7 +137,7 @@ public class DynamicDispatch { return o.foo(); } - void dynamicResolutionWithPrivateMethodBad_FN() { + void FN_dynamicResolutionWithPrivateMethodBad() { Supertype subtype = new Subtype(); callFoo(subtype).toString(); } diff --git a/infer/tests/codetoanalyze/java/pulse/HashMapExample.java b/infer/tests/codetoanalyze/java/pulse/HashMapExample.java index 27b650086..2b1499c6c 100644 --- a/infer/tests/codetoanalyze/java/pulse/HashMapExample.java +++ b/infer/tests/codetoanalyze/java/pulse/HashMapExample.java @@ -37,7 +37,7 @@ public class HashMapExample { } } - public static int getOneIntegerWithoutCheck() { + public static int FN_getOneIntegerWithoutCheck() { HashMap hashMap = new HashMap<>(); Integer i32 = new Integer(32); @@ -46,7 +46,7 @@ public class HashMapExample { return a.intValue(); } - public static void getTwoIntegersWithOneCheck(Integer i, Integer j) { + public static void FN_getTwoIntegersWithOneCheck(Integer i, Integer j) { HashMap hashMap = new HashMap<>(); if (hashMap.containsKey(i) && !i.equals(j)) { @@ -75,7 +75,7 @@ public class HashMapExample { x.toString(); } - void getAfterRemovingTheKeyBad() { + void FN_getAfterRemovingTheKeyBad() { HashMap map = new HashMap(); Integer key = 42; map.put(key, new Object()); @@ -91,7 +91,7 @@ public class HashMapExample { map.get(key).toString(); } - void getAfterClearBad() { + void FN_getAfterClearBad() { HashMap map = new HashMap(); Integer key = 42; map.put(key, new Object()); @@ -99,7 +99,7 @@ public class HashMapExample { map.get(key).toString(); // NPE here } - void getFromKeySetGood_FP(HashMap map) { + void getFromKeySetGood(HashMap map) { for (String key : map.keySet()) { String s = map.get(key); if (s.equals("foo")) { diff --git a/infer/tests/codetoanalyze/java/pulse/IntegerExample.java b/infer/tests/codetoanalyze/java/pulse/IntegerExample.java index c98aaa027..5c763954a 100644 --- a/infer/tests/codetoanalyze/java/pulse/IntegerExample.java +++ b/infer/tests/codetoanalyze/java/pulse/IntegerExample.java @@ -9,7 +9,7 @@ package codetoanalyze.java.infer; public class IntegerExample { - private static void testIntegerEqualsGood() { + private static void FP_testIntegerEqualsGood() { Integer a = new Integer(42); Integer b = new Integer(42); Integer c = null; diff --git a/infer/tests/codetoanalyze/java/pulse/Lists.java b/infer/tests/codetoanalyze/java/pulse/Lists.java index 5d601ac4a..2cc6be8ac 100644 --- a/infer/tests/codetoanalyze/java/pulse/Lists.java +++ b/infer/tests/codetoanalyze/java/pulse/Lists.java @@ -11,7 +11,7 @@ import java.util.List; class Lists { - void emptyRemembersOk(List l) { + void FP_emptyRemembersOk(List l) { boolean empty = l.isEmpty(); Object o = null; if (empty != l.isEmpty()) { @@ -48,7 +48,7 @@ class Lists { return l.isEmpty() ? null : l.get(0); } - void getElementOk(List l) { + void FP_getElementOk(List l) { if (l.isEmpty()) { return; } @@ -63,7 +63,7 @@ class Lists { } // don't fully understand why we don't get this one; model should allow it - void FN_addInvalidatesEmptinessNPE(List l) { + void addInvalidatesEmptinessNPE(List l) { if (l.isEmpty()) { l.add(0, new Object()); Object o = null; diff --git a/infer/tests/codetoanalyze/java/pulse/NullPointerExceptions.java b/infer/tests/codetoanalyze/java/pulse/NullPointerExceptions.java index d7ba08656..0732ab821 100644 --- a/infer/tests/codetoanalyze/java/pulse/NullPointerExceptions.java +++ b/infer/tests/codetoanalyze/java/pulse/NullPointerExceptions.java @@ -89,7 +89,7 @@ public class NullPointerExceptions { B b; } - public int nullPointerExceptionWithAChainOfFields(C c) { + public int FN_nullPointerExceptionWithAChainOfFields(C c) { c.b = new B(); return c.b.a.x; } @@ -162,7 +162,7 @@ public class NullPointerExceptions { if (s == null) {} } - public void FP_noNullPointerExceptionAfterSkipFunction() { + public void noNullPointerExceptionAfterSkipFunction() { String t = new String("Hello!"); String s = t.toString(); genericMethodSomewhereCheckingForNull(s); @@ -227,13 +227,13 @@ public class NullPointerExceptions { arrayReadShouldNotCauseSymexMemoryError(0).toString(); } - public void sinkWithNeverNullSource() { + public void FP_sinkWithNeverNullSource() { NeverNullSource source = new NeverNullSource(); T t = source.get(); t.f(); } - public void otherSinkWithNeverNullSource() { + public void FP_otherSinkWithNeverNullSource() { SomeLibrary source = new SomeLibrary(); T t = source.get(); t.f(); @@ -241,7 +241,7 @@ public class NullPointerExceptions { private @Nullable Object mFld; - void nullableFieldNPE() { + void FN_nullableFieldNPE() { mFld.toString(); } @@ -285,17 +285,17 @@ public class NullPointerExceptions { } } - void derefGetterAfterCheckShouldNotCauseNPE() { + void FP_derefGetterAfterCheckShouldNotCauseNPE() { if (getObj() != null) { getObj().toString(); } } - void derefBoxedGetterAfterCheckShouldNotCauseNPE() { + void FP_derefBoxedGetterAfterCheckShouldNotCauseNPE() { boolean b = getBool() != null && getBool(); } - static void derefNonThisGetterAfterCheckShouldNotCauseNPE() { + static void FP_derefNonThisGetterAfterCheckShouldNotCauseNPE() { NullPointerExceptions c = new NullPointerExceptions(); if (c.getObj() != null) { c.getObj().toString(); @@ -370,7 +370,7 @@ public class NullPointerExceptions { return mNullableField; } - public void derefNullableGetter() { + public void FN_derefNullableGetter() { Object o = nullableGetter(); o.toString(); } @@ -436,12 +436,12 @@ public class NullPointerExceptions { } } - public @Nullable String testSystemGetPropertyArgument() { + public @Nullable String FN_testSystemGetPropertyArgument() { String s = System.getProperty(null); return s; } - public void testSystemGetPropertyReturn() { + public void FN_testSystemGetPropertyReturn() { String s = System.getProperty(""); int n = s.length(); } @@ -462,7 +462,7 @@ public class NullPointerExceptions { } @SuppressLint("NULL_DEREFERENCE") - void shouldNotReportNPE() { + void FP_shouldNotReportNPE() { Object o = null; o.toString(); } @@ -570,7 +570,7 @@ public class NullPointerExceptions { o.orNull().toString(); } - void stringConstantEqualsTrueNotNPE() { + void FP_stringConstantEqualsTrueNotNPE() { final String c1 = "Test string!"; final String c2 = "Test string!"; String s = null; @@ -621,7 +621,7 @@ public class NullPointerExceptions { class E implements I { - void dereferenceNullableInterfaceFieldBad() { + void FN_dereferenceNullableInterfaceFieldBad() { mObject.toString(); } } @@ -630,7 +630,7 @@ public class NullPointerExceptions { return null; } - void addNullToImmutableListBuilderBad() { + void FN_addNullToImmutableListBuilderBad() { ImmutableList.Builder listBuilder = ImmutableList.builder(); listBuilder.add(getObject()); } diff --git a/infer/tests/codetoanalyze/java/pulse/SuppressLintExample.java b/infer/tests/codetoanalyze/java/pulse/SuppressLintExample.java index 804e88c28..13e6ddbfa 100644 --- a/infer/tests/codetoanalyze/java/pulse/SuppressLintExample.java +++ b/infer/tests/codetoanalyze/java/pulse/SuppressLintExample.java @@ -30,6 +30,7 @@ class SuppressAllWarnigsInTheClass { public class SuppressLintExample { + // FP. Reason: no current support for @SuppressLint @SuppressLint("null-dereference") SuppressLintExample() { Object object = null; @@ -42,7 +43,7 @@ public class SuppressLintExample { } @SuppressLint("null-dereference") - void shouldNotReportNPE() { + void FP_shouldNotReportNPE() { Object object = null; object.toString(); } diff --git a/infer/tests/codetoanalyze/java/pulse/issues.exp b/infer/tests/codetoanalyze/java/pulse/issues.exp index e7b6fb65f..04ec050e4 100644 --- a/infer/tests/codetoanalyze/java/pulse/issues.exp +++ b/infer/tests/codetoanalyze/java/pulse/issues.exp @@ -1,36 +1,41 @@ codetoanalyze/java/pulse/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.accessPathInCalleeMayCauseFalseNegativeBad():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,when calling `void AnalysisStops.accessPathOnParamOk(AnalysisStops$MyObj)` here,parameter `obj` of void AnalysisStops.accessPathOnParamOk(AnalysisStops$MyObj),assigned,assigned,invalid access occurs here] codetoanalyze/java/pulse/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadInCalleeMayCauseFalseNegativeBad():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,when calling `void AnalysisStops.derefParamOk(AnalysisStops$MyObj)` here,parameter `obj` of void AnalysisStops.derefParamOk(AnalysisStops$MyObj),assigned,invalid access occurs here] codetoanalyze/java/pulse/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegativeBad():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,when calling `void AnalysisStops.derefParamOk(AnalysisStops$MyObj)` here,parameter `obj` of void AnalysisStops.derefParamOk(AnalysisStops$MyObj),assigned,invalid access occurs here] -codetoanalyze/java/pulse/Builtins.java, codetoanalyze.java.infer.Builtins.blockErrorIntAssumeOk(java.lang.Object):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/Builtins.java, codetoanalyze.java.infer.Builtins.blockErrorOk():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/Builtins.java, codetoanalyze.java.infer.Builtins.FP_blockErrorIntAssumeOk(java.lang.Object):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/Builtins.java, codetoanalyze.java.infer.Builtins.FP_blockErrorOk():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/Builtins.java, codetoanalyze.java.infer.Builtins.doNotBlockErrorBad(java.lang.Object):void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [*** LATENT ***,invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/Builtins.java, codetoanalyze.java.infer.Builtins.doNotBlockErrorBad(java.lang.Object):void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [*** LATENT ***,invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/DefaultInInterface.java, DefaultInInterface$A.defaultCallNPE():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DefaultInInterface$I.defaultMethod1()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DefaultInInterface$I.defaultMethod1()`,return from call to `Object DefaultInInterface$I.defaultMethod1()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DefaultInInterface.java, DefaultInInterface$B.overridenCallNPE():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DefaultInInterface$B.defaultMethod2()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DefaultInInterface$B.defaultMethod2()`,return from call to `Object DefaultInInterface$B.defaultMethod2()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DefaultInInterface.java, DefaultInInterface.uncertainCallMethod1NPE_latent(int):void, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [*** LATENT ***,invalidation part of the trace starts here,when calling `Object DefaultInInterface$I.defaultMethod1()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DefaultInInterface$I.defaultMethod1()`,return from call to `Object DefaultInInterface$I.defaultMethod1()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch$WithField.dispatchOnFieldOK_FP():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch$Supertype.bar()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch$Supertype.bar()`,return from call to `Object DynamicDispatch$Supertype.bar()`,assigned,invalid access occurs here] -codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchCallsWrapperWithSubtypeOK_FP():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)` here,when calling `Object DynamicDispatch$Supertype.bar()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)`,return from call to `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.FP_dynamicDispatchCallsWrapperWithSubtypeOK():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)` here,when calling `Object DynamicDispatch$Supertype.bar()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)`,return from call to `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchCallsWrapperWithSupertypeBad():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)` here,when calling `Object DynamicDispatch$Supertype.bar()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)`,return from call to `Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchShouldNotCauseFalseNegativeEasyBad():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch$Subtype.foo()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch$Subtype.foo()`,return from call to `Object DynamicDispatch$Subtype.foo()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicResolutionWithVariadicMethodBad():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch.variadicMethod(DynamicDispatch$Supertype[])` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch.variadicMethod(DynamicDispatch$Supertype[])`,return from call to `Object DynamicDispatch.variadicMethod(DynamicDispatch$Supertype[])`,assigned,invalid access occurs here] codetoanalyze/java/pulse/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.interfaceShouldNotCauseFalseNegativeEasyBad():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object DynamicDispatch$Impl.foo()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object DynamicDispatch$Impl.foo()`,return from call to `Object DynamicDispatch$Impl.foo()`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/IntegerExample.java, codetoanalyze.java.infer.IntegerExample.FP_testIntegerEqualsGood():void, 6, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/IntegerExample.java, codetoanalyze.java.infer.IntegerExample.FP_testIntegerEqualsGood():void, 10, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/IntegerExample.java, codetoanalyze.java.infer.IntegerExample.testIntegerEqualsBad():void, 6, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/IntegerExample.java, codetoanalyze.java.infer.IntegerExample.testIntegerEqualsFN():void, 6, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/IntegerExample.java, codetoanalyze.java.infer.IntegerExample.testIntegerEqualsGood():void, 6, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/IntegerExample.java, codetoanalyze.java.infer.IntegerExample.testIntegerEqualsGood():void, 10, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/InvokeDynamic.java, codetoanalyze.java.infer.InvokeDynamic.invokeDynamicThenNpeBad(java.util.List):void, 7, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/InvokeDynamic.java, codetoanalyze.java.infer.InvokeDynamic.lambda$npeInLambdaBad$1(java.lang.String,java.lang.String):int, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.FN_addInvalidatesEmptinessNPE(java.util.List):void, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.FP_emptyRemembersOk(java.util.List):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.FP_getElementOk(java.util.List):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object Lists.getElement(List)` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object Lists.getElement(List)`,return from call to `Object Lists.getElement(List)`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.addInvalidatesEmptinessNPE(java.util.List):void, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.clearCausesEmptinessNPE(java.util.List,int):void, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.emptyRemembersOk(java.util.List):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.getElementNPE(java.util.List):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object Lists.getElement(List)` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object Lists.getElement(List)`,return from call to `Object Lists.getElement(List)`,assigned,invalid access occurs here] -codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.getElementOk(java.util.List):void, 4, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object Lists.getElement(List)` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object Lists.getElement(List)`,return from call to `Object Lists.getElement(List)`,assigned,invalid access occurs here] codetoanalyze/java/pulse/Lists.java, codetoanalyze.java.infer.Lists.removeInvalidatesNonEmptinessNPE(java.util.List,int):void, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions$$$Class$Name$With$Dollars.npeWithDollars():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_derefBoxedGetterAfterCheckShouldNotCauseNPE():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Boolean NullPointerExceptions.getBool()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Boolean NullPointerExceptions.getBool()`,return from call to `Boolean NullPointerExceptions.getBool()`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_derefGetterAfterCheckShouldNotCauseNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object NullPointerExceptions.getObj()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.getObj()`,return from call to `Object NullPointerExceptions.getObj()`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_derefNonThisGetterAfterCheckShouldNotCauseNPE():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object NullPointerExceptions.getObj()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.getObj()`,return from call to `Object NullPointerExceptions.getObj()`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_otherSinkWithNeverNullSource():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `T SomeLibrary.get()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `T SomeLibrary.get()`,return from call to `T SomeLibrary.get()`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_shouldNotReportNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_sinkWithNeverNullSource():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `T NeverNullSource.get()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `T NeverNullSource.get()`,return from call to `T NeverNullSource.get()`,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_stringConstantEqualsTrueNotNPE():void, 7, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.FP_stringConstantEqualsTrueNotNPE():void, 12, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.badCheckShouldCauseNPE():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object NullPointerExceptions.getObj()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.getObj()`,return from call to `Object NullPointerExceptions.getObj()`,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.derefBoxedGetterAfterCheckShouldNotCauseNPE():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Boolean NullPointerExceptions.getBool()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Boolean NullPointerExceptions.getBool()`,return from call to `Boolean NullPointerExceptions.getBool()`,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.derefGetterAfterCheckShouldNotCauseNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object NullPointerExceptions.getObj()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.getObj()`,return from call to `Object NullPointerExceptions.getObj()`,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.derefNonThisGetterAfterCheckShouldNotCauseNPE():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object NullPointerExceptions.getObj()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.getObj()`,return from call to `Object NullPointerExceptions.getObj()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.derefNull():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `Object NullPointerExceptions.derefUndefinedCallee()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.derefUndefinedCallee()`,return from call to `Object NullPointerExceptions.derefUndefinedCallee()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.derefNullableRet(boolean):void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [*** LATENT ***,invalidation part of the trace starts here,when calling `Object NullPointerExceptions.nullableRet(boolean)` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.nullableRet(boolean)`,return from call to `Object NullPointerExceptions.nullableRet(boolean)`,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.dereferenceAfterLoopOnList(codetoanalyze.java.infer.NullPointerExceptions$L):void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [*** LATENT ***,invalidation part of the trace starts here,when calling `Object NullPointerExceptions.returnsNullAfterLoopOnList(NullPointerExceptions$L)` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `Object NullPointerExceptions.returnsNullAfterLoopOnList(NullPointerExceptions$L)`,return from call to `Object NullPointerExceptions.returnsNullAfterLoopOnList(NullPointerExceptions$L)`,assigned,invalid access occurs here] @@ -45,15 +50,10 @@ codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.Nu codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.nullPointerExceptionWithArray():int, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.nullPointerExceptionWithNullArrayParameter():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,when calling `void NullPointerExceptions.expectNotNullArrayParameter(NullPointerExceptions$A[])` here,parameter `array` of void NullPointerExceptions.expectNotNullArrayParameter(NullPointerExceptions$A[]),invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.nullPointerExceptionWithNullObjectParameter():void, 1, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,when calling `void NullPointerExceptions.expectNotNullObjectParameter(NullPointerExceptions$A)` here,parameter `a` of void NullPointerExceptions.expectNotNullObjectParameter(NullPointerExceptions$A),invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.otherSinkWithNeverNullSource():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `T SomeLibrary.get()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `T SomeLibrary.get()`,return from call to `T SomeLibrary.get()`,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.shouldNotReportNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.sinkWithNeverNullSource():void, 3, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `T NeverNullSource.get()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `T NeverNullSource.get()`,return from call to `T NeverNullSource.get()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.someNPEAfterResourceLeak():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,when calling `T CloseableAsResourceExample.sourceOfNullWithResourceLeak()` here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,passed as argument to `T CloseableAsResourceExample.sourceOfNullWithResourceLeak()`,return from call to `T CloseableAsResourceExample.sourceOfNullWithResourceLeak()`,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.stringConstantEqualsFalseNotNPE_FP():void, 10, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.stringConstantEqualsTrueNotNPE():void, 7, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.stringConstantEqualsTrueNotNPE():void, 12, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.stringVarEqualsFalseNPE():void, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/SuppressLintExample.java, codetoanalyze.java.infer.SuppressAllWarnigsInTheClass.shouldNotReportNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/SuppressLintExample.java, codetoanalyze.java.infer.SuppressLintExample.(), 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] -codetoanalyze/java/pulse/SuppressLintExample.java, codetoanalyze.java.infer.SuppressLintExample.shouldNotReportNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] +codetoanalyze/java/pulse/SuppressLintExample.java, codetoanalyze.java.infer.SuppressLintExample.FP_shouldNotReportNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] codetoanalyze/java/pulse/SuppressLintExample.java, codetoanalyze.java.infer.SuppressLintExample.shouldReportNPE():void, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here]