From caa8bd0e3956254f870197451df07ec1c61e9ee8 Mon Sep 17 00:00:00 2001 From: Gabriela Cunha Sampaio Date: Fri, 22 Jan 2021 07:58:09 -0800 Subject: [PATCH] Renaming biabduction Java tests Summary: Renaming biabduction tests in infer/tests/codetoanalyze/java/biabduction/*.java to follow our naming convention: fooOk for tests where no report is expected, fooBad when we expect a report, and FP_ or FN_ prefixes when reality doesn't match the expectation Reviewed By: jvillard Differential Revision: D25900575 fbshipit-source-id: ad1370085 --- .../java/biabduction/AnalysisStops.java | 120 +++++++++--------- .../java/biabduction/ArrayOutOfBounds.java | 38 +++--- .../java/biabduction/AutoGenerated.java | 2 +- .../java/biabduction/Builtins.java | 8 +- .../java/biabduction/ClassCastExceptions.java | 12 +- .../CloseableAsResourceExample.java | 28 ++-- .../java/biabduction/CursorLeaks.java | 30 ++--- .../java/biabduction/CursorNPEs.java | 6 +- .../java/biabduction/DynamicDispatch.java | 6 +- .../java/biabduction/IntegerExample.java | 2 +- .../biabduction/NullPointerExceptions.java | 2 +- .../codetoanalyze/java/biabduction/issues.exp | 82 ++++++------ 12 files changed, 168 insertions(+), 168 deletions(-) diff --git a/infer/tests/codetoanalyze/java/biabduction/AnalysisStops.java b/infer/tests/codetoanalyze/java/biabduction/AnalysisStops.java index 45fa2c179..93b2c5ef7 100644 --- a/infer/tests/codetoanalyze/java/biabduction/AnalysisStops.java +++ b/infer/tests/codetoanalyze/java/biabduction/AnalysisStops.java @@ -13,7 +13,7 @@ public class AnalysisStops { private native Object externalFunc(); - public void skipPointerDerefMayCauseLocalFalseNegative() { + public void skipPointerDerefMayCauseLocalFalseNegativeBad() { Object ret = externalFunc(); ret.toString(); int i = 1 / 0; @@ -25,7 +25,7 @@ public class AnalysisStops { return new Object(); } - public void skipPointerDerefMayCauseCalleeFalsePositive() { + public void skipPointerDerefMayCauseCalleeFalsePositiveOk() { Object o = skipPointerDerefPreventsSpecInferenceRetObj(); o.toString(); } @@ -36,7 +36,7 @@ public class AnalysisStops { return 0; } - public void skipPointerDerefMayCauseCalleeFalseNegative() { + public void skipPointerDerefMayCauseCalleeFalseNegativeBad() { int ret = skipPointerDerefPreventsSpecInferenceRetZero(); int i = 1 / ret; } @@ -45,7 +45,7 @@ public class AnalysisStops { int j = 1 / i; } - public void skipPointerDerefMayCauseInterprocFalseNegative() { + public void skipPointerDerefMayCauseInterprocFalseNegativeBad() { int i = skipPointerDerefPreventsSpecInferenceRetZero(); divideByParam(i); } @@ -54,12 +54,12 @@ public class AnalysisStops { return (String) externalFunc(); } - public void castFailureOnUndefinedObjMayCauseFalseNegative() { + public void castFailureOnUndefinedObjMayCauseFalseNegativeBad() { castExternalPreventsSpecInference(); int i = 1 / 0; } - public void callOnCastUndefinedObjMayCauseFalseNegative() { + public void callOnCastUndefinedObjMayCauseFalseNegativeBad() { String s = castExternalPreventsSpecInference(); s.toString(); int i = 1 / 0; @@ -81,54 +81,54 @@ public class AnalysisStops { private native MyObj externalFunc2(); - public void callOnUndefinedObjMayCauseFalseNegative() { + public void callOnUndefinedObjMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); int i = 1 / ret.retZero(); } - public void callOnUndefinedObjMayCauseFalsePositive() { + public void callOnUndefinedObjMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); int i = 1 / ret.retOne(); } - public void fieldWriteOnUndefinedObjMayCauseFalseNegative() { + public void fieldWriteOnUndefinedObjMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); ret.f = new Object(); int i = 1 / 0; } - public void fieldWriteOnUndefinedObjMayCauseFalsePositive() { + public void fieldWriteOnUndefinedObjMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); ret.f = new Object(); ret.f.toString(); } - public void fieldReadOnUndefinedObjMayCauseFalseNegative() { + public void fieldReadOnUndefinedObjMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); Object o = ret.f; int i = 1 / 0; } - public void fieldReadOnUndefinedObjMayCauseFalsePositive() { + public void fieldReadOnUndefinedObjMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); Object o = ret.f; o.toString(); } - public void recursiveAngelicTypesMayCauseFalseNegative() { + public void recursiveAngelicTypesMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); MyObj rec1 = ret.rec; MyObj rec2 = rec1.rec; int i = 1 / 0; } - public void recursiveAngelicTypesMayCauseFalsePositive() { + public void recursiveAngelicTypesMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); MyObj rec1 = ret.rec; rec1.rec.toString(); } - public void infiniteMaterializationMayCauseFalseNegative(boolean b) { + public void infiniteMaterializationMayCauseFalseNegativeBad(boolean b) { MyObj rec = externalFunc2(); while (b) { rec = rec.rec; @@ -136,7 +136,7 @@ public class AnalysisStops { int i = 1 / 0; } - public void infiniteMaterializationMayCauseFalsePositive(boolean b) { + public void infiniteMaterializationMayCauseFalsePositiveOk(boolean b) { MyObj rec = externalFunc2(); while (b) { rec = rec.rec; @@ -144,7 +144,7 @@ public class AnalysisStops { rec.toString(); } - public void primitiveFieldOfAngelicObjMayCauseFalseNegative() { + public void primitiveFieldOfAngelicObjMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); if (ret.i == 0) { int i = 1 / 0; @@ -153,14 +153,14 @@ public class AnalysisStops { } } - public void primitiveFieldOfAngelicObjMayCauseFalsePositive() { + public void primitiveFieldOfAngelicObjMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); if (ret.i != 0) { int i = 1 / ret.i; } } - public void heapFieldOfAngelicObjMayCauseFalseNegative() { + public void heapFieldOfAngelicObjMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); Object obj = ret.f; if (obj == ret.f) { @@ -168,7 +168,7 @@ public class AnalysisStops { } } - public void heapFieldOfAngelicObjMayCauseFalsePositive() { + public void heapFieldOfAngelicObjMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); Object obj = ret.f; if (obj != ret.f) { @@ -176,7 +176,7 @@ public class AnalysisStops { } } - public void fieldReadAferCastMayCauseFalseNegative(Iterator iter) { + public void fieldReadAferCastMayCauseFalseNegativeBad(Iterator iter) { MyObj ret = iter.next(); Object obj = ret.f; obj.toString(); @@ -186,51 +186,51 @@ public class AnalysisStops { } } - public void derefParam(MyObj obj) { + public void derefParamOk(MyObj obj) { Object f = obj.f; f.toString(); } - public void fieldReadInCalleeMayCauseFalsePositive() { + public void fieldReadInCalleeMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); - derefParam(ret); + derefParamOk(ret); } - public void fieldReadInCalleeMayCauseFalseNegative() { + public void fieldReadInCalleeMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); ret.f = null; - derefParam(ret); + derefParamOk(ret); } - public void fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositive() { + public void fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); - derefParam(ret.rec); + derefParamOk(ret.rec); } - public void fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegative() { + public void fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); ret.rec.f = null; - derefParam(ret.rec); + derefParamOk(ret.rec); } - public void accessPathOnParam(MyObj obj) { + public void accessPathOnParamOk(MyObj obj) { MyObj ret = obj.rec; Object f = ret.f; f.toString(); } - public void accessPathInCalleeMayCauseFalsePositive() { + public void accessPathInCalleeMayCauseFalsePositiveOk() { MyObj ret = externalFunc2(); - accessPathOnParam(ret); + accessPathOnParamOk(ret); } - public void accessPathInCalleeMayCauseFalseNegative() { + public void accessPathInCalleeMayCauseFalseNegativeBad() { MyObj ret = externalFunc2(); ret.rec.f = null; - accessPathOnParam(ret); + accessPathOnParamOk(ret); } - public void skipFunctionInLoopMayCauseFalseNegative() { + public void skipFunctionInLoopMayCauseFalseNegativeBad() { Object o = null; for (int i = 0; i < 10; i++) { externalFunc(); @@ -239,32 +239,32 @@ public class AnalysisStops { } // will fail to find error unless spec inference succeeds for all callees - public void specInferenceMayFailAndCauseFalseNegative(boolean b, Iterator iter) { - skipPointerDerefMayCauseLocalFalseNegative(); + public void specInferenceMayFailAndCauseFalseNegativeBad(boolean b, Iterator iter) { + skipPointerDerefMayCauseLocalFalseNegativeBad(); skipPointerDerefPreventsSpecInferenceRetObj(); skipPointerDerefPreventsSpecInferenceRetZero(); - skipPointerDerefMayCauseCalleeFalseNegative(); - skipPointerDerefMayCauseInterprocFalseNegative(); - castFailureOnUndefinedObjMayCauseFalseNegative(); - callOnCastUndefinedObjMayCauseFalseNegative(); - callOnUndefinedObjMayCauseFalseNegative(); - callOnUndefinedObjMayCauseFalsePositive(); - fieldWriteOnUndefinedObjMayCauseFalseNegative(); - fieldWriteOnUndefinedObjMayCauseFalsePositive(); - fieldReadOnUndefinedObjMayCauseFalseNegative(); - fieldReadOnUndefinedObjMayCauseFalsePositive(); - recursiveAngelicTypesMayCauseFalseNegative(); - recursiveAngelicTypesMayCauseFalsePositive(); - infiniteMaterializationMayCauseFalseNegative(b); - infiniteMaterializationMayCauseFalsePositive(b); - primitiveFieldOfAngelicObjMayCauseFalsePositive(); - primitiveFieldOfAngelicObjMayCauseFalseNegative(); - heapFieldOfAngelicObjMayCauseFalsePositive(); - heapFieldOfAngelicObjMayCauseFalseNegative(); - fieldReadAferCastMayCauseFalseNegative(iter); - fieldReadInCalleeMayCauseFalsePositive(); - fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositive(); - accessPathInCalleeMayCauseFalsePositive(); + skipPointerDerefMayCauseCalleeFalseNegativeBad(); + skipPointerDerefMayCauseInterprocFalseNegativeBad(); + castFailureOnUndefinedObjMayCauseFalseNegativeBad(); + callOnCastUndefinedObjMayCauseFalseNegativeBad(); + callOnUndefinedObjMayCauseFalseNegativeBad(); + callOnUndefinedObjMayCauseFalsePositiveOk(); + fieldWriteOnUndefinedObjMayCauseFalseNegativeBad(); + fieldWriteOnUndefinedObjMayCauseFalsePositiveOk(); + fieldReadOnUndefinedObjMayCauseFalseNegativeBad(); + fieldReadOnUndefinedObjMayCauseFalsePositiveOk(); + recursiveAngelicTypesMayCauseFalseNegativeBad(); + recursiveAngelicTypesMayCauseFalsePositiveOk(); + infiniteMaterializationMayCauseFalseNegativeBad(b); + infiniteMaterializationMayCauseFalsePositiveOk(b); + primitiveFieldOfAngelicObjMayCauseFalsePositiveOk(); + primitiveFieldOfAngelicObjMayCauseFalseNegativeBad(); + heapFieldOfAngelicObjMayCauseFalsePositiveOk(); + heapFieldOfAngelicObjMayCauseFalseNegativeBad(); + fieldReadAferCastMayCauseFalseNegativeBad(iter); + fieldReadInCalleeMayCauseFalsePositiveOk(); + fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositiveOk(); + accessPathInCalleeMayCauseFalsePositiveOk(); int i = 1 / 0; } } diff --git a/infer/tests/codetoanalyze/java/biabduction/ArrayOutOfBounds.java b/infer/tests/codetoanalyze/java/biabduction/ArrayOutOfBounds.java index 881f8b03e..ab787ce7b 100644 --- a/infer/tests/codetoanalyze/java/biabduction/ArrayOutOfBounds.java +++ b/infer/tests/codetoanalyze/java/biabduction/ArrayOutOfBounds.java @@ -9,40 +9,40 @@ package codetoanalyze.java.infer; public class ArrayOutOfBounds { - public int arrayOutOfBounds() { + public int arrayOutOfBoundsBad() { int[] arr = new int[1]; return arr[3]; } - public int arrayInBounds() { + public int arrayInBoundsOk() { int[] arr = new int[2]; return arr[1]; } // tests below this line are turned off until array functionality improves - public void arrayLoopOutOfBounds(int[] arr) { + public void FN_arrayLoopOutOfBoundsBad(int[] arr) { for (int i = 0; i <= arr.length; i++) { int j = arr[i]; } } - public void arrayLoopInBounds(int[] arr) { + public void arrayLoopInBoundsOk(int[] arr) { for (int i = 0; i < arr.length; i++) { int j = arr[i]; } } - public void buggyIter(int[] arr1, int[] arr2) { + public void FN_buggyIterBad(int[] arr1, int[] arr2) { for (int i = 0; i < arr1.length; i++) { arr2[i] = 7; } } - public void switchedArrsOutOfBounds() { - buggyIter(new int[11], new int[10]); + public void FN_switchedArrsOutOfBoundsBad() { + FN_buggyIterBad(new int[11], new int[10]); } - public void buggyNestedLoop1(int[] arr1, int[] arr2) { + public void FN_buggyNestedLoop1Bad(int[] arr1, int[] arr2) { for (int i = 0; i < arr1.length; i++) { for (int j = 0; i < arr2.length; j++) { arr1[i] = arr1[i] + arr2[j]; @@ -50,11 +50,11 @@ public class ArrayOutOfBounds { } } - public void nestedOutOfBounds1() { - buggyNestedLoop1(new int[11], new int[10]); + public void FN_nestedOutOfBounds1Bad() { + FN_buggyNestedLoop1Bad(new int[11], new int[10]); } - public void buggyNestedLoop2(int[] arr1, int[] arr2) { + public void FN_buggyNestedLoop2Bad(int[] arr1, int[] arr2) { for (int i = 0; i < arr1.length; i++) { for (int j = 0; j < arr2.length; i++) { arr1[i] = arr1[i] + arr2[j]; @@ -62,11 +62,11 @@ public class ArrayOutOfBounds { } } - public void nestedOutOfBounds2() { - buggyNestedLoop2(new int[11], new int[10]); + public void FN_nestedOutOfBounds2Bad() { + FN_buggyNestedLoop2Bad(new int[11], new int[10]); } - public void buggyNestedLoop3(int[] arr1, int[] arr2) { + public void FN_buggyNestedLoop3Bad(int[] arr1, int[] arr2) { for (int i = 0; i < arr1.length; i++) { for (int j = 0; j < arr2.length; j++) { arr1[i] = 2 * arr2[i]; @@ -74,11 +74,11 @@ public class ArrayOutOfBounds { } } - public void nestedOutOfBounds3() { - buggyNestedLoop3(new int[11], new int[10]); + public void FN_nestedOutOfBounds3Bad() { + FN_buggyNestedLoop3Bad(new int[11], new int[10]); } - public void safeNestedLoop(int[] arr1, int[] arr2) { + public void safeNestedLoopOk(int[] arr1, int[] arr2) { for (int i = 0; i < arr1.length; i++) { for (int j = 0; j < arr2.length; j++) { arr1[i] = arr1[i] + arr2[j]; @@ -86,7 +86,7 @@ public class ArrayOutOfBounds { } } - public void nestedInBounds() { - safeNestedLoop(new int[11], new int[10]); + public void nestedInBoundsOk() { + safeNestedLoopOk(new int[11], new int[10]); } } diff --git a/infer/tests/codetoanalyze/java/biabduction/AutoGenerated.java b/infer/tests/codetoanalyze/java/biabduction/AutoGenerated.java index 6852aa7da..507407682 100644 --- a/infer/tests/codetoanalyze/java/biabduction/AutoGenerated.java +++ b/infer/tests/codetoanalyze/java/biabduction/AutoGenerated.java @@ -11,7 +11,7 @@ package codetoanalyze.java.infer; public class AutoGenerated { - void npe() { + void npeBad() { String s = null; int n = s.length(); } diff --git a/infer/tests/codetoanalyze/java/biabduction/Builtins.java b/infer/tests/codetoanalyze/java/biabduction/Builtins.java index d9e1f430c..f9e8b072c 100644 --- a/infer/tests/codetoanalyze/java/biabduction/Builtins.java +++ b/infer/tests/codetoanalyze/java/biabduction/Builtins.java @@ -11,26 +11,26 @@ import com.facebook.infer.builtins.InferBuiltins; public class Builtins { - void blockError() { + void blockErrorOk() { Object x = null; InferBuiltins.assume(x != null); x.toString(); } - void doNotBlockError(Object x) { + void doNotBlockErrorBad(Object x) { Object y = null; InferBuiltins.assume(x != null); y.toString(); } - void blockErrorIntAssume(Object x) { + void blockErrorIntAssumeOk(Object x) { Object y = null; int i = 0; InferBuiltins.assume(i != 0); y.toString(); } - void causeError(Object x) { + void causeErrorBad(Object x) { InferBuiltins.assume(x == null); x.toString(); } diff --git a/infer/tests/codetoanalyze/java/biabduction/ClassCastExceptions.java b/infer/tests/codetoanalyze/java/biabduction/ClassCastExceptions.java index 6e258bd73..88108295e 100644 --- a/infer/tests/codetoanalyze/java/biabduction/ClassCastExceptions.java +++ b/infer/tests/codetoanalyze/java/biabduction/ClassCastExceptions.java @@ -36,31 +36,31 @@ class AnotherImplementationOfInterface implements MyInterface { public class ClassCastExceptions { - public void classCastException() { + public void classCastExceptionBad() { SuperClass a = new SubClassA(); SubClassB b = (SubClassB) a; } - public int classCastExceptionImplementsInterfaceCallee(MyInterface i) { + public int classCastExceptionImplementsInterfaceCalleeOk(MyInterface i) { ImplementationOfInterface impl = (ImplementationOfInterface) i; return impl.getInt(); } - public int classCastExceptionImplementsInterface() { - return classCastExceptionImplementsInterfaceCallee(new AnotherImplementationOfInterface()); + public int classCastExceptionImplementsInterfaceBad() { + return classCastExceptionImplementsInterfaceCalleeOk(new AnotherImplementationOfInterface()); } public String getURL() { return "http://bla.com"; } - public void openHttpURLConnection() throws IOException { + public void openHttpURLConnectionOk() throws IOException { URL url = new URL(getURL()); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.disconnect(); } - public void castingArrayOfPrimitiveTypeOK(int[] a) { + public void castingArrayOfPrimitiveTypeOk(int[] a) { int[] b = (int[]) a; } } diff --git a/infer/tests/codetoanalyze/java/biabduction/CloseableAsResourceExample.java b/infer/tests/codetoanalyze/java/biabduction/CloseableAsResourceExample.java index b7737fa18..321d3050c 100644 --- a/infer/tests/codetoanalyze/java/biabduction/CloseableAsResourceExample.java +++ b/infer/tests/codetoanalyze/java/biabduction/CloseableAsResourceExample.java @@ -100,28 +100,28 @@ public class CloseableAsResourceExample { } } - void withException() throws LocalException { + void withExceptionBad() throws LocalException { SomeResource res = new SomeResource(); res.doSomething(); res.close(); } // should report a resource leak - void closingWrapper() { + void closingWrapperOk() { Resource r = new Resource(); Sub s = new Sub(r); s.close(); } - void notClosingWrapper() { + void notClosingWrapperBad() { Sub s = new Sub(new Resource()); s.mR.close(); } // should report a resource leak - void noNeedToCloseStringReader() { + void noNeedToCloseStringReaderOk() { StringReader stringReader = new StringReader("paf!"); } - void noNeedToCloseByteArrayOutputStream() { + void noNeedToCloseByteArrayOutputStreamOk() { ByteArrayOutputStream stream = new ByteArrayOutputStream(42); } @@ -130,11 +130,11 @@ public class CloseableAsResourceExample { ByteArrayInputStreamWrapper stream2 = new ByteArrayInputStreamWrapper(array); } - void noNeedToCloseByteArrayInputStream(byte[] array) { + void noNeedToCloseByteArrayInputStreamOk(byte[] array) { ByteArrayInputStream stream = new ByteArrayInputStream(array); } - void closingWithCloseQuietly() { + void closingWithCloseQuietlyOk() { SomeResource r = null; try { r = new SomeResource(); @@ -145,7 +145,7 @@ public class CloseableAsResourceExample { } } - void failToCloseWithCloseQuietly() { + void failToCloseWithCloseQuietlyBad() { try { SomeResource r = new SomeResource(); r.doSomething(); @@ -154,17 +154,17 @@ public class CloseableAsResourceExample { } } - void noLeakwithExceptionOnClose() throws IOException { + void noLeakwithExceptionOnCloseOk() throws IOException { ResourceWithException res = new ResourceWithException(); res.close(); } - void noLeakWithCloseQuietlyAndExceptionOnClose() { + void noLeakWithCloseQuietlyAndExceptionOnCloseOk() { ResourceWithException res = new ResourceWithException(); Utils.closeQuietly(res); } - static T sourceOfNullWithResourceLeak() { + static T sourceOfNullWithResourceLeakBad() { SomeResource r = new SomeResource(); return null; } @@ -175,16 +175,16 @@ public class CloseableAsResourceExample { public void close() {} } - void leakFoundWhenIndirectlyImplementingCloseable() { + void leakFoundWhenIndirectlyImplementingCloseableBad() { MyResource res = new MyResource(); } - void skippedCallClosesResourceOnArgs() { + void skippedCallClosesResourceOnArgsOk() { SomeResource res = new SomeResource(); SomeResource.bar(res); } - void skippedVritualCallDoesNotCloseResourceOnReceiver() { + void skippedVirtualCallDoesNotCloseResourceOnReceiverOk() { SomeResource res = new SomeResource(); res.foo(42); } diff --git a/infer/tests/codetoanalyze/java/biabduction/CursorLeaks.java b/infer/tests/codetoanalyze/java/biabduction/CursorLeaks.java index 551e529df..5cee1bdf5 100644 --- a/infer/tests/codetoanalyze/java/biabduction/CursorLeaks.java +++ b/infer/tests/codetoanalyze/java/biabduction/CursorLeaks.java @@ -29,7 +29,7 @@ public class CursorLeaks { } } - public Object cursorClosedCheckNull(SQLiteDatabase sqLiteDatabase) { + public Object cursorClosedCheckNullOk(SQLiteDatabase sqLiteDatabase) { Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null); Object value = null; @@ -47,7 +47,7 @@ public class CursorLeaks { return value; } - public Object cursorClosedCheckNullCheckClosed_FP(SQLiteDatabase sqLiteDatabase) { + public Object FP_cursorClosedCheckNullCheckClosedOk(SQLiteDatabase sqLiteDatabase) { Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null); Object value = null; @@ -65,7 +65,7 @@ public class CursorLeaks { return value; } - public int cursorNotClosed(SQLiteDatabase sqLiteDatabase) { + public int cursorNotClosedBad(SQLiteDatabase sqLiteDatabase) { Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null); return cursor.getCount(); } @@ -73,7 +73,7 @@ public class CursorLeaks { Context mContext; ContentResolver mContentResolver; - public int getImageCountHelperNotClosed(String customClause) { + public int getImageCountHelperNotClosedBad(String customClause) { String[] projection = {"COUNT(*)"}; String selectionClause = selectionClause = customClause; @@ -90,7 +90,7 @@ public class CursorLeaks { } } - public int getImageCountHelperClosed(String customClause) { + public int getImageCountHelperClosedOk(String customClause) { String[] projection = {"COUNT(*)"}; String selectionClause = selectionClause = customClause; @@ -107,7 +107,7 @@ public class CursorLeaks { } } - public int getBucketCountNotClosed() { + public int getBucketCountNotClosedBad() { Cursor cursor = MediaStore.Images.Media.query(mContentResolver, null, null, null, null, null); if (cursor == null) { return 0; @@ -120,7 +120,7 @@ public class CursorLeaks { } } - public int getBucketCountClosed() { + public int getBucketCountClosedOk() { Cursor cursor = MediaStore.Images.Media.query(mContentResolver, null, null, null, null, null); if (cursor == null) { return 0; @@ -137,21 +137,21 @@ public class CursorLeaks { } } - private void queryUVMLegacyDbNotClosed() { + private void queryUVMLegacyDbNotClosedBad() { SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); builder.setTables(""); Cursor cursor = builder.query(null, null, "", null, null, null, null); if (cursor != null) cursor.moveToFirst(); } - private void queryUVMLegacyDbClosed() { + private void queryUVMLegacyDbClosedOk() { SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); builder.setTables(""); Cursor cursor = builder.query(null, null, "", null, null, null, null); if (cursor != null) cursor.close(); } - public int completeDownloadClosed(DownloadManager downloadManager) { + public int completeDownloadClosedOk(DownloadManager downloadManager) { DownloadManager.Query query = new DownloadManager.Query(); Cursor cursor = (Cursor) null; try { @@ -166,7 +166,7 @@ public class CursorLeaks { } } - public int completeDownloadNotClosed(DownloadManager downloadManager) { + public int completeDownloadNotClosedBad(DownloadManager downloadManager) { DownloadManager.Query query = new DownloadManager.Query(); Cursor cursor = null; try { @@ -181,7 +181,7 @@ public class CursorLeaks { } } - private void loadPrefsFromContentProviderClosed() { + private void loadPrefsFromContentProviderClosedOk() { ContentProviderClient contentProviderClient = mContentResolver.acquireContentProviderClient(""); if (contentProviderClient != null) { Cursor cursor = null; @@ -198,7 +198,7 @@ public class CursorLeaks { } } - private void loadPrefsFromContentProviderNotClosed() { + private void loadPrefsFromContentProviderNotClosedBad() { ContentProviderClient contentProviderClient = mContentResolver.acquireContentProviderClient(""); if (contentProviderClient == null) return; Cursor cursor = null; @@ -223,7 +223,7 @@ public class CursorLeaks { } } - public Cursor cursorWrapperReturned(SQLiteDatabase sqLiteDatabase) { + public Cursor cursorWrapperReturnedOk(SQLiteDatabase sqLiteDatabase) { Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null); return new NamedCursor(cursor, "abc"); } @@ -237,7 +237,7 @@ public class CursorLeaks { native NamedCursor createWrapper(Cursor cursor); - public NamedCursor cursorAttachedTheWrapper(SQLiteDatabase sqLiteDatabase) { + public NamedCursor cursorAttachedTheWrapperOk(SQLiteDatabase sqLiteDatabase) { Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null); return createWrapper(cursor); } diff --git a/infer/tests/codetoanalyze/java/biabduction/CursorNPEs.java b/infer/tests/codetoanalyze/java/biabduction/CursorNPEs.java index 46506e806..b1def13e2 100644 --- a/infer/tests/codetoanalyze/java/biabduction/CursorNPEs.java +++ b/infer/tests/codetoanalyze/java/biabduction/CursorNPEs.java @@ -31,7 +31,7 @@ public class CursorNPEs { Context mContext; ContentResolver mContentResolver; - public void cursorFromContentResolverNPE(String customClause) { + public void cursorFromContentResolverNPEBad(String customClause) { String[] projection = {"COUNT(*)"}; String selectionClause = selectionClause = customClause; @@ -42,7 +42,7 @@ public class CursorNPEs { cursor.close(); } - public void cursorFromMediaNPE() { + public void cursorFromMediaNPEBad() { 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 cursorFromDownloadManagerNPEBad(DownloadManager downloadManager) { DownloadManager.Query query = new DownloadManager.Query(); Cursor cursor = null; try { diff --git a/infer/tests/codetoanalyze/java/biabduction/DynamicDispatch.java b/infer/tests/codetoanalyze/java/biabduction/DynamicDispatch.java index 65ac5700c..6ce27093b 100644 --- a/infer/tests/codetoanalyze/java/biabduction/DynamicDispatch.java +++ b/infer/tests/codetoanalyze/java/biabduction/DynamicDispatch.java @@ -68,7 +68,7 @@ public class DynamicDispatch { o.bar().toString(); } - static void dynamicDispatchShouldNotReportWhenCallingSupertype(Supertype o) { + static void FP_dynamicDispatchShouldNotReportWhenCallingSupertype(Supertype o) { // should not report a warning because the Supertype implementation // of foo() does not return null o.foo().toString(); @@ -77,7 +77,7 @@ public class DynamicDispatch { static void dynamicDispatchShouldReportWhenCalledWithSubtypeParameter(Subtype o) { // should report a warning because the Subtype implementation // of foo() returns null - dynamicDispatchShouldNotReportWhenCallingSupertype(o); + FP_dynamicDispatchShouldNotReportWhenCallingSupertype(o); } static Object dynamicDispatchWrapperFoo(Supertype o) { @@ -120,7 +120,7 @@ public class DynamicDispatch { mField = t; } - static void dispatchOnFieldGood() { + static void dispatchOnFieldOk() { Supertype subtype = new Subtype(); WithField object = new WithField(subtype); object.mField.bar().toString(); diff --git a/infer/tests/codetoanalyze/java/biabduction/IntegerExample.java b/infer/tests/codetoanalyze/java/biabduction/IntegerExample.java index c98aaa027..8ff9c3821 100644 --- a/infer/tests/codetoanalyze/java/biabduction/IntegerExample.java +++ b/infer/tests/codetoanalyze/java/biabduction/IntegerExample.java @@ -33,7 +33,7 @@ public class IntegerExample { } } - private static void testIntegerEqualsFN() { + private static void testIntegerEqualsOk() { Integer a = new Integer(42); Integer b = new Integer(42); Integer c = null; diff --git a/infer/tests/codetoanalyze/java/biabduction/NullPointerExceptions.java b/infer/tests/codetoanalyze/java/biabduction/NullPointerExceptions.java index d7ba08656..0dceefb77 100644 --- a/infer/tests/codetoanalyze/java/biabduction/NullPointerExceptions.java +++ b/infer/tests/codetoanalyze/java/biabduction/NullPointerExceptions.java @@ -325,7 +325,7 @@ public class NullPointerExceptions { } void someNPEAfterResourceLeak() { - T t = CloseableAsResourceExample.sourceOfNullWithResourceLeak(); + T t = CloseableAsResourceExample.sourceOfNullWithResourceLeakBad(); t.f(); } diff --git a/infer/tests/codetoanalyze/java/biabduction/issues.exp b/infer/tests/codetoanalyze/java/biabduction/issues.exp index 3b2459e48..d2aea5180 100644 --- a/infer/tests/codetoanalyze/java/biabduction/issues.exp +++ b/infer/tests/codetoanalyze/java/biabduction/issues.exp @@ -1,52 +1,52 @@ -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.accessPathInCalleeMayCauseFalseNegative():void, 3, NULL_DEREFERENCE, no_bucket, ERROR, [start of procedure accessPathInCalleeMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure accessPathOnParam(...),Skipping toString(): unknown method] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.callOnCastUndefinedObjMayCauseFalseNegative():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure callOnCastUndefinedObjMayCauseFalseNegative(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference(),Skipping toString(): unknown method] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.callOnUndefinedObjMayCauseFalseNegative():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure callOnUndefinedObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure retZero(),return from a call to int AnalysisStops$MyObj.retZero()] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.castFailureOnUndefinedObjMayCauseFalseNegative():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure castFailureOnUndefinedObjMayCauseFalseNegative(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference()] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadAferCastMayCauseFalseNegative(java.util.Iterator):void, 6, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure fieldReadAferCastMayCauseFalseNegative(...),Skipping toString(): unknown method,Taking true branch] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadInCalleeMayCauseFalseNegative():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure fieldReadInCalleeMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParam(...),Skipping toString(): unknown method] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegative():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParam(...),Skipping toString(): unknown method] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadOnUndefinedObjMayCauseFalseNegative():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure fieldReadOnUndefinedObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2()] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalseNegative():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure fieldWriteOnUndefinedObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2()] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.heapFieldOfAngelicObjMayCauseFalseNegative():void, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure heapFieldOfAngelicObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.infiniteMaterializationMayCauseFalseNegative(boolean):void, 5, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure infiniteMaterializationMayCauseFalseNegative(...),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegative():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure primitiveFieldOfAngelicObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegative():void, 5, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure primitiveFieldOfAngelicObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.recursiveAngelicTypesMayCauseFalseNegative():void, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure recursiveAngelicTypesMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2()] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipFunctionInLoopMayCauseFalseNegative():void, 5, NULL_DEREFERENCE, B1, ERROR, [start of procedure skipFunctionInLoopMayCauseFalseNegative(),Taking true branch,Skipping externalFunc(): unknown method,Definition of externalFunc(),Taking false branch] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipPointerDerefMayCauseCalleeFalseNegative():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure skipPointerDerefMayCauseCalleeFalseNegative(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero()] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipPointerDerefMayCauseInterprocFalseNegative():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure skipPointerDerefMayCauseInterprocFalseNegative(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),start of procedure divideByParam(...)] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipPointerDerefMayCauseLocalFalseNegative():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure skipPointerDerefMayCauseLocalFalseNegative(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method] -codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.specInferenceMayFailAndCauseFalseNegative(boolean,java.util.Iterator):void, 26, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure specInferenceMayFailAndCauseFalseNegative(...),start of procedure skipPointerDerefMayCauseLocalFalseNegative(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to void AnalysisStops.skipPointerDerefMayCauseLocalFalseNegative(),start of procedure skipPointerDerefPreventsSpecInferenceRetObj(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to Object AnalysisStops.skipPointerDerefPreventsSpecInferenceRetObj(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),start of procedure skipPointerDerefMayCauseCalleeFalseNegative(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),return from a call to void AnalysisStops.skipPointerDerefMayCauseCalleeFalseNegative(),start of procedure skipPointerDerefMayCauseInterprocFalseNegative(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),start of procedure divideByParam(...),return from a call to void AnalysisStops.divideByParam(int),return from a call to void AnalysisStops.skipPointerDerefMayCauseInterprocFalseNegative(),start of procedure castFailureOnUndefinedObjMayCauseFalseNegative(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference(),return from a call to void AnalysisStops.castFailureOnUndefinedObjMayCauseFalseNegative(),start of procedure callOnCastUndefinedObjMayCauseFalseNegative(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference(),Skipping toString(): unknown method,return from a call to void AnalysisStops.callOnCastUndefinedObjMayCauseFalseNegative(),start of procedure callOnUndefinedObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure retZero(),return from a call to int AnalysisStops$MyObj.retZero(),return from a call to void AnalysisStops.callOnUndefinedObjMayCauseFalseNegative(),start of procedure callOnUndefinedObjMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure retOne(),return from a call to int AnalysisStops$MyObj.retOne(),return from a call to void AnalysisStops.callOnUndefinedObjMayCauseFalsePositive(),start of procedure fieldWriteOnUndefinedObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),return from a call to void AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalseNegative(),start of procedure fieldWriteOnUndefinedObjMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Skipping toString(): unknown method,return from a call to void AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalsePositive(),start of procedure fieldReadOnUndefinedObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),return from a call to void AnalysisStops.fieldReadOnUndefinedObjMayCauseFalseNegative(),start of procedure fieldReadOnUndefinedObjMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Skipping toString(): unknown method,return from a call to void AnalysisStops.fieldReadOnUndefinedObjMayCauseFalsePositive(),start of procedure recursiveAngelicTypesMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),return from a call to void AnalysisStops.recursiveAngelicTypesMayCauseFalseNegative(),Skipping recursiveAngelicTypesMayCauseFalsePositive(): empty list of specs,Definition of recursiveAngelicTypesMayCauseFalsePositive(),start of procedure infiniteMaterializationMayCauseFalseNegative(...),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,return from a call to void AnalysisStops.infiniteMaterializationMayCauseFalseNegative(boolean),start of procedure infiniteMaterializationMayCauseFalsePositive(...),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,Skipping toString(): unknown method,return from a call to void AnalysisStops.infiniteMaterializationMayCauseFalsePositive(boolean),start of procedure primitiveFieldOfAngelicObjMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch,return from a call to void AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalsePositive(),start of procedure primitiveFieldOfAngelicObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,return from a call to void AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegative(),start of procedure heapFieldOfAngelicObjMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,return from a call to void AnalysisStops.heapFieldOfAngelicObjMayCauseFalsePositive(),start of procedure heapFieldOfAngelicObjMayCauseFalseNegative(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch,return from a call to void AnalysisStops.heapFieldOfAngelicObjMayCauseFalseNegative(),Skipping fieldReadAferCastMayCauseFalseNegative(...): empty list of specs,Definition of fieldReadAferCastMayCauseFalseNegative(...),start of procedure fieldReadInCalleeMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParam(...),Skipping toString(): unknown method,return from a call to void AnalysisStops.derefParam(AnalysisStops$MyObj),return from a call to void AnalysisStops.fieldReadInCalleeMayCauseFalsePositive(),start of procedure fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParam(...),Skipping toString(): unknown method,return from a call to void AnalysisStops.derefParam(AnalysisStops$MyObj),return from a call to void AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositive(),start of procedure accessPathInCalleeMayCauseFalsePositive(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure accessPathOnParam(...),Skipping toString(): unknown method,return from a call to void AnalysisStops.accessPathOnParam(AnalysisStops$MyObj),return from a call to void AnalysisStops.accessPathInCalleeMayCauseFalsePositive()] -codetoanalyze/java/biabduction/ArrayOutOfBounds.java, codetoanalyze.java.infer.ArrayOutOfBounds.arrayOutOfBounds():int, 2, ARRAY_OUT_OF_BOUNDS_L1, no_bucket, ERROR, [start of procedure arrayOutOfBounds()] -codetoanalyze/java/biabduction/Builtins.java, codetoanalyze.java.infer.Builtins.causeError(java.lang.Object):void, 2, NULL_DEREFERENCE, B5, ERROR, [start of procedure causeError(...),Taking true branch] -codetoanalyze/java/biabduction/Builtins.java, codetoanalyze.java.infer.Builtins.doNotBlockError(java.lang.Object):void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure doNotBlockError(...),Taking true branch] -codetoanalyze/java/biabduction/ClassCastExceptions.java, codetoanalyze.java.infer.ClassCastExceptions.classCastException():void, 2, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure classCastException(),start of procedure SubClassA(),start of procedure SuperClass(),return from a call to SuperClass.(),return from a call to SubClassA.()] -codetoanalyze/java/biabduction/ClassCastExceptions.java, codetoanalyze.java.infer.ClassCastExceptions.classCastExceptionImplementsInterface():int, 1, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure classCastExceptionImplementsInterface(),start of procedure AnotherImplementationOfInterface(),return from a call to AnotherImplementationOfInterface.()] -codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.failToCloseWithCloseQuietly():void, 5, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure failToCloseWithCloseQuietly(),start of procedure SomeResource(),return from a call to SomeResource.(),start of procedure doSomething(),Skipping star(): unknown method,Definition of star(),Taking true branch,start of procedure LocalException(),return from a call to LocalException.(),exception codetoanalyze.java.infer.LocalException,return from a call to void SomeResource.doSomething()] -codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.leakFoundWhenIndirectlyImplementingCloseable():void, 1, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure leakFoundWhenIndirectlyImplementingCloseable(),start of procedure CloseableAsResourceExample$MyResource(...),return from a call to CloseableAsResourceExample$MyResource.(CloseableAsResourceExample)] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.accessPathInCalleeMayCauseFalseNegativeBad():void, 3, NULL_DEREFERENCE, no_bucket, ERROR, [start of procedure accessPathInCalleeMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure accessPathOnParamOk(...),Skipping toString(): unknown method] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.callOnCastUndefinedObjMayCauseFalseNegativeBad():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure callOnCastUndefinedObjMayCauseFalseNegativeBad(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference(),Skipping toString(): unknown method] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.callOnUndefinedObjMayCauseFalseNegativeBad():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure callOnUndefinedObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure retZero(),return from a call to int AnalysisStops$MyObj.retZero()] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.castFailureOnUndefinedObjMayCauseFalseNegativeBad():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure castFailureOnUndefinedObjMayCauseFalseNegativeBad(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference()] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadAferCastMayCauseFalseNegativeBad(java.util.Iterator):void, 6, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure fieldReadAferCastMayCauseFalseNegativeBad(...),Skipping toString(): unknown method,Taking true branch] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadInCalleeMayCauseFalseNegativeBad():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure fieldReadInCalleeMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParamOk(...),Skipping toString(): unknown method] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegativeBad():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParamOk(...),Skipping toString(): unknown method] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldReadOnUndefinedObjMayCauseFalseNegativeBad():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure fieldReadOnUndefinedObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2()] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalseNegativeBad():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure fieldWriteOnUndefinedObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2()] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.heapFieldOfAngelicObjMayCauseFalseNegativeBad():void, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure heapFieldOfAngelicObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.infiniteMaterializationMayCauseFalseNegativeBad(boolean):void, 5, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure infiniteMaterializationMayCauseFalseNegativeBad(...),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegativeBad():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure primitiveFieldOfAngelicObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegativeBad():void, 5, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure primitiveFieldOfAngelicObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.recursiveAngelicTypesMayCauseFalseNegativeBad():void, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure recursiveAngelicTypesMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2()] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipFunctionInLoopMayCauseFalseNegativeBad():void, 5, NULL_DEREFERENCE, B1, ERROR, [start of procedure skipFunctionInLoopMayCauseFalseNegativeBad(),Taking true branch,Skipping externalFunc(): unknown method,Definition of externalFunc(),Taking false branch] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipPointerDerefMayCauseCalleeFalseNegativeBad():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure skipPointerDerefMayCauseCalleeFalseNegativeBad(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero()] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipPointerDerefMayCauseInterprocFalseNegativeBad():void, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure skipPointerDerefMayCauseInterprocFalseNegativeBad(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),start of procedure divideByParam(...)] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.skipPointerDerefMayCauseLocalFalseNegativeBad():void, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure skipPointerDerefMayCauseLocalFalseNegativeBad(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method] +codetoanalyze/java/biabduction/AnalysisStops.java, codetoanalyze.java.infer.AnalysisStops.specInferenceMayFailAndCauseFalseNegativeBad(boolean,java.util.Iterator):void, 26, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure specInferenceMayFailAndCauseFalseNegativeBad(...),start of procedure skipPointerDerefMayCauseLocalFalseNegativeBad(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to void AnalysisStops.skipPointerDerefMayCauseLocalFalseNegativeBad(),start of procedure skipPointerDerefPreventsSpecInferenceRetObj(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to Object AnalysisStops.skipPointerDerefPreventsSpecInferenceRetObj(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),start of procedure skipPointerDerefMayCauseCalleeFalseNegativeBad(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),return from a call to void AnalysisStops.skipPointerDerefMayCauseCalleeFalseNegativeBad(),start of procedure skipPointerDerefMayCauseInterprocFalseNegativeBad(),start of procedure skipPointerDerefPreventsSpecInferenceRetZero(),Skipping externalFunc(): unknown method,Definition of externalFunc(),Skipping toString(): unknown method,return from a call to int AnalysisStops.skipPointerDerefPreventsSpecInferenceRetZero(),start of procedure divideByParam(...),return from a call to void AnalysisStops.divideByParam(int),return from a call to void AnalysisStops.skipPointerDerefMayCauseInterprocFalseNegativeBad(),start of procedure castFailureOnUndefinedObjMayCauseFalseNegativeBad(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference(),return from a call to void AnalysisStops.castFailureOnUndefinedObjMayCauseFalseNegativeBad(),start of procedure callOnCastUndefinedObjMayCauseFalseNegativeBad(),start of procedure castExternalPreventsSpecInference(),Skipping externalFunc(): unknown method,Definition of externalFunc(),return from a call to String AnalysisStops.castExternalPreventsSpecInference(),Skipping toString(): unknown method,return from a call to void AnalysisStops.callOnCastUndefinedObjMayCauseFalseNegativeBad(),start of procedure callOnUndefinedObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure retZero(),return from a call to int AnalysisStops$MyObj.retZero(),return from a call to void AnalysisStops.callOnUndefinedObjMayCauseFalseNegativeBad(),start of procedure callOnUndefinedObjMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure retOne(),return from a call to int AnalysisStops$MyObj.retOne(),return from a call to void AnalysisStops.callOnUndefinedObjMayCauseFalsePositiveOk(),start of procedure fieldWriteOnUndefinedObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),return from a call to void AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalseNegativeBad(),start of procedure fieldWriteOnUndefinedObjMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Skipping toString(): unknown method,return from a call to void AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalsePositiveOk(),start of procedure fieldReadOnUndefinedObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),return from a call to void AnalysisStops.fieldReadOnUndefinedObjMayCauseFalseNegativeBad(),start of procedure fieldReadOnUndefinedObjMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Skipping toString(): unknown method,return from a call to void AnalysisStops.fieldReadOnUndefinedObjMayCauseFalsePositiveOk(),start of procedure recursiveAngelicTypesMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),return from a call to void AnalysisStops.recursiveAngelicTypesMayCauseFalseNegativeBad(),Skipping recursiveAngelicTypesMayCauseFalsePositiveOk(): empty list of specs,Definition of recursiveAngelicTypesMayCauseFalsePositiveOk(),start of procedure infiniteMaterializationMayCauseFalseNegativeBad(...),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,return from a call to void AnalysisStops.infiniteMaterializationMayCauseFalseNegativeBad(boolean),start of procedure infiniteMaterializationMayCauseFalsePositiveOk(...),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,Skipping toString(): unknown method,return from a call to void AnalysisStops.infiniteMaterializationMayCauseFalsePositiveOk(boolean),start of procedure primitiveFieldOfAngelicObjMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch,return from a call to void AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalsePositiveOk(),start of procedure primitiveFieldOfAngelicObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,return from a call to void AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegativeBad(),start of procedure heapFieldOfAngelicObjMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking false branch,return from a call to void AnalysisStops.heapFieldOfAngelicObjMayCauseFalsePositiveOk(),start of procedure heapFieldOfAngelicObjMayCauseFalseNegativeBad(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),Taking true branch,return from a call to void AnalysisStops.heapFieldOfAngelicObjMayCauseFalseNegativeBad(),Skipping fieldReadAferCastMayCauseFalseNegativeBad(...): empty list of specs,Definition of fieldReadAferCastMayCauseFalseNegativeBad(...),start of procedure fieldReadInCalleeMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParamOk(...),Skipping toString(): unknown method,return from a call to void AnalysisStops.derefParamOk(AnalysisStops$MyObj),return from a call to void AnalysisStops.fieldReadInCalleeMayCauseFalsePositiveOk(),start of procedure fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure derefParamOk(...),Skipping toString(): unknown method,return from a call to void AnalysisStops.derefParamOk(AnalysisStops$MyObj),return from a call to void AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalsePositiveOk(),start of procedure accessPathInCalleeMayCauseFalsePositiveOk(),Skipping externalFunc2(): unknown method,Definition of externalFunc2(),start of procedure accessPathOnParamOk(...),Skipping toString(): unknown method,return from a call to void AnalysisStops.accessPathOnParamOk(AnalysisStops$MyObj),return from a call to void AnalysisStops.accessPathInCalleeMayCauseFalsePositiveOk()] +codetoanalyze/java/biabduction/ArrayOutOfBounds.java, codetoanalyze.java.infer.ArrayOutOfBounds.arrayOutOfBoundsBad():int, 2, ARRAY_OUT_OF_BOUNDS_L1, no_bucket, ERROR, [start of procedure arrayOutOfBoundsBad()] +codetoanalyze/java/biabduction/Builtins.java, codetoanalyze.java.infer.Builtins.causeErrorBad(java.lang.Object):void, 2, NULL_DEREFERENCE, B5, ERROR, [start of procedure causeErrorBad(...),Taking true branch] +codetoanalyze/java/biabduction/Builtins.java, codetoanalyze.java.infer.Builtins.doNotBlockErrorBad(java.lang.Object):void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure doNotBlockErrorBad(...),Taking true branch] +codetoanalyze/java/biabduction/ClassCastExceptions.java, codetoanalyze.java.infer.ClassCastExceptions.classCastExceptionBad():void, 2, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure classCastExceptionBad(),start of procedure SubClassA(),start of procedure SuperClass(),return from a call to SuperClass.(),return from a call to SubClassA.()] +codetoanalyze/java/biabduction/ClassCastExceptions.java, codetoanalyze.java.infer.ClassCastExceptions.classCastExceptionImplementsInterfaceBad():int, 1, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure classCastExceptionImplementsInterfaceBad(),start of procedure AnotherImplementationOfInterface(),return from a call to AnotherImplementationOfInterface.()] +codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.failToCloseWithCloseQuietlyBad():void, 5, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure failToCloseWithCloseQuietlyBad(),start of procedure SomeResource(),return from a call to SomeResource.(),start of procedure doSomething(),Skipping star(): unknown method,Definition of star(),Taking true branch,start of procedure LocalException(),return from a call to LocalException.(),exception codetoanalyze.java.infer.LocalException,return from a call to void SomeResource.doSomething()] +codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.leakFoundWhenIndirectlyImplementingCloseableBad():void, 1, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure leakFoundWhenIndirectlyImplementingCloseableBad(),start of procedure CloseableAsResourceExample$MyResource(...),return from a call to CloseableAsResourceExample$MyResource.(CloseableAsResourceExample)] codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.notClosingCloseable():void, 1, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure notClosingCloseable(),start of procedure SomeResource(),return from a call to SomeResource.()] -codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.notClosingWrapper():void, 2, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure notClosingWrapper(),start of procedure Resource(),return from a call to Resource.(),start of procedure Sub(...),start of procedure Wrapper(...),return from a call to Wrapper.(Resource),return from a call to Sub.(Resource),start of procedure close(),return from a call to void Resource.close()] -codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.sourceOfNullWithResourceLeak():codetoanalyze.java.infer.T, 1, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure sourceOfNullWithResourceLeak(),start of procedure SomeResource(),return from a call to SomeResource.()] -codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.withException():void, 4, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure withException(),start of procedure SomeResource(),return from a call to SomeResource.(),start of procedure doSomething(),Skipping star(): unknown method,Definition of star(),Taking true branch,start of procedure LocalException(),return from a call to LocalException.(),exception codetoanalyze.java.infer.LocalException,return from a call to void SomeResource.doSomething()] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.completeDownloadNotClosed(android.app.DownloadManager):int, 8, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure completeDownloadNotClosed(...),Taking false branch,Skipping getColumnIndex(...): unknown method] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.cursorClosedCheckNullCheckClosed_FP(android.database.sqlite.SQLiteDatabase):java.lang.Object, 11, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure cursorClosedCheckNullCheckClosed_FP(...),Taking false branch,Skipping getString(...): unknown method,Taking true branch,Taking false branch] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.cursorNotClosed(android.database.sqlite.SQLiteDatabase):int, 2, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure cursorNotClosed(...),Skipping getCount(): unknown method] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.getBucketCountNotClosed():int, 9, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure getBucketCountNotClosed(),Taking false branch,Taking false branch] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.getImageCountHelperNotClosed(java.lang.String):int, 9, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure getImageCountHelperNotClosed(...),Taking true branch,Skipping getInt(...): unknown method] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.loadPrefsFromContentProviderNotClosed():void, 10, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure loadPrefsFromContentProviderNotClosed(),Taking false branch,Taking true branch] -codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.queryUVMLegacyDbNotClosed():void, 4, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure queryUVMLegacyDbNotClosed(),Skipping setTables(...): unknown method,Taking true branch] -codetoanalyze/java/biabduction/CursorNPEs.java, codetoanalyze.java.infer.CursorNPEs.cursorFromContentResolverNPE(java.lang.String):void, 8, NULL_DEREFERENCE, B1, ERROR, [start of procedure cursorFromContentResolverNPE(...)] -codetoanalyze/java/biabduction/CursorNPEs.java, codetoanalyze.java.infer.CursorNPEs.cursorFromDownloadManagerNPE(android.app.DownloadManager):int, 5, NULL_DEREFERENCE, B2, ERROR, [start of procedure cursorFromDownloadManagerNPE(...)] -codetoanalyze/java/biabduction/CursorNPEs.java, codetoanalyze.java.infer.CursorNPEs.cursorFromMediaNPE():void, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure cursorFromMediaNPE()] +codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.notClosingWrapperBad():void, 2, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure notClosingWrapperBad(),start of procedure Resource(),return from a call to Resource.(),start of procedure Sub(...),start of procedure Wrapper(...),return from a call to Wrapper.(Resource),return from a call to Sub.(Resource),start of procedure close(),return from a call to void Resource.close()] +codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.sourceOfNullWithResourceLeakBad():codetoanalyze.java.infer.T, 1, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure sourceOfNullWithResourceLeakBad(),start of procedure SomeResource(),return from a call to SomeResource.()] +codetoanalyze/java/biabduction/CloseableAsResourceExample.java, codetoanalyze.java.infer.CloseableAsResourceExample.withExceptionBad():void, 4, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure withExceptionBad(),start of procedure SomeResource(),return from a call to SomeResource.(),start of procedure doSomething(),Skipping star(): unknown method,Definition of star(),Taking true branch,start of procedure LocalException(),return from a call to LocalException.(),exception codetoanalyze.java.infer.LocalException,return from a call to void SomeResource.doSomething()] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.FP_cursorClosedCheckNullCheckClosedOk(android.database.sqlite.SQLiteDatabase):java.lang.Object, 11, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure FP_cursorClosedCheckNullCheckClosedOk(...),Taking false branch,Skipping getString(...): unknown method,Taking true branch,Taking false branch] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.completeDownloadNotClosedBad(android.app.DownloadManager):int, 8, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure completeDownloadNotClosedBad(...),Taking false branch,Skipping getColumnIndex(...): unknown method] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.cursorNotClosedBad(android.database.sqlite.SQLiteDatabase):int, 2, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure cursorNotClosedBad(...),Skipping getCount(): unknown method] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.getBucketCountNotClosedBad():int, 9, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure getBucketCountNotClosedBad(),Taking false branch,Taking false branch] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.getImageCountHelperNotClosedBad(java.lang.String):int, 9, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure getImageCountHelperNotClosedBad(...),Taking true branch,Skipping getInt(...): unknown method] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.loadPrefsFromContentProviderNotClosedBad():void, 10, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure loadPrefsFromContentProviderNotClosedBad(),Taking false branch,Taking true branch] +codetoanalyze/java/biabduction/CursorLeaks.java, codetoanalyze.java.infer.CursorLeaks.queryUVMLegacyDbNotClosedBad():void, 4, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure queryUVMLegacyDbNotClosedBad(),Skipping setTables(...): unknown method,Taking true branch] +codetoanalyze/java/biabduction/CursorNPEs.java, codetoanalyze.java.infer.CursorNPEs.cursorFromContentResolverNPEBad(java.lang.String):void, 8, NULL_DEREFERENCE, B1, ERROR, [start of procedure cursorFromContentResolverNPEBad(...)] +codetoanalyze/java/biabduction/CursorNPEs.java, codetoanalyze.java.infer.CursorNPEs.cursorFromDownloadManagerNPEBad(android.app.DownloadManager):int, 5, NULL_DEREFERENCE, B2, ERROR, [start of procedure cursorFromDownloadManagerNPEBad(...)] +codetoanalyze/java/biabduction/CursorNPEs.java, codetoanalyze.java.infer.CursorNPEs.cursorFromMediaNPEBad():void, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure cursorFromMediaNPEBad()] codetoanalyze/java/biabduction/DivideByZero.java, codetoanalyze.java.infer.DivideByZero.callDivideByZeroInterProc():int, 1, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure callDivideByZeroInterProc(),start of procedure divideByZeroInterProc(...)] codetoanalyze/java/biabduction/DivideByZero.java, codetoanalyze.java.infer.DivideByZero.divByZeroLocal(java.lang.String):int, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure divByZeroLocal(...)] codetoanalyze/java/biabduction/DivideByZero.java, codetoanalyze.java.infer.DivideByZero.divideByZeroWithStaticField():int, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure divideByZeroWithStaticField(),start of procedure setXToZero(),return from a call to void DivideByZero.setXToZero(),start of procedure divideByZeroInterProc(...)] codetoanalyze/java/biabduction/DoubleExample.java, codetoanalyze.java.infer.DoubleExample.testdReadNullableBad():java.lang.Double, 1, NULL_DEREFERENCE, B1, ERROR, [start of procedure testdReadNullableBad()] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch$WithField.dispatchOnFieldBad():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure dispatchOnFieldBad(),start of procedure DynamicDispatch$Subtype(),start of procedure DynamicDispatch$Supertype(),return from a call to DynamicDispatch$Supertype.(),return from a call to DynamicDispatch$Subtype.(),start of procedure DynamicDispatch$WithField(...),return from a call to DynamicDispatch$WithField.(DynamicDispatch$Subtype),start of procedure foo(),return from a call to Object DynamicDispatch$Subtype.foo()] +codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.FP_dynamicDispatchShouldNotReportWhenCallingSupertype(codetoanalyze.java.infer.DynamicDispatch$Subtype):void, 3, NULL_DEREFERENCE, B2, ERROR, [start of procedure FP_dynamicDispatchShouldNotReportWhenCallingSupertype(...),start of procedure foo(),return from a call to Object DynamicDispatch$Subtype.foo()] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchCallsWrapperWithSubtypeBad():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure dynamicDispatchCallsWrapperWithSubtypeBad(),start of procedure DynamicDispatch$Subtype(),start of procedure DynamicDispatch$Supertype(),return from a call to DynamicDispatch$Supertype.(),return from a call to DynamicDispatch$Subtype.(),start of procedure dynamicDispatchWrapperFoo(...),start of procedure foo(),return from a call to Object DynamicDispatch$Subtype.foo(),return from a call to Object DynamicDispatch.dynamicDispatchWrapperFoo(DynamicDispatch$Subtype)] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchCallsWrapperWithSupertypeBad():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure dynamicDispatchCallsWrapperWithSupertypeBad(),start of procedure DynamicDispatch$Supertype(),return from a call to DynamicDispatch$Supertype.(),start of procedure dynamicDispatchWrapperBar(...),start of procedure bar(),return from a call to Object DynamicDispatch$Supertype.bar(),return from a call to Object DynamicDispatch.dynamicDispatchWrapperBar(DynamicDispatch$Supertype)] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchShouldNotCauseFalseNegativeEasy():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure dynamicDispatchShouldNotCauseFalseNegativeEasy(),start of procedure DynamicDispatch$Subtype(),start of procedure DynamicDispatch$Supertype(),return from a call to DynamicDispatch$Supertype.(),return from a call to DynamicDispatch$Subtype.(),start of procedure foo(),return from a call to Object DynamicDispatch$Subtype.foo()] -codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicDispatchShouldNotReportWhenCallingSupertype(codetoanalyze.java.infer.DynamicDispatch$Subtype):void, 3, NULL_DEREFERENCE, B2, ERROR, [start of procedure dynamicDispatchShouldNotReportWhenCallingSupertype(...),start of procedure foo(),return from a call to Object DynamicDispatch$Subtype.foo()] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.dynamicResolutionWithPrivateMethodBad():void, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure dynamicResolutionWithPrivateMethodBad(),start of procedure DynamicDispatch$Subtype(),start of procedure DynamicDispatch$Supertype(),return from a call to DynamicDispatch$Supertype.(),return from a call to DynamicDispatch$Subtype.(),start of procedure callFoo(...),start of procedure foo(),return from a call to Object DynamicDispatch$Subtype.foo(),return from a call to Object DynamicDispatch.callFoo(DynamicDispatch$Subtype)] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.interfaceShouldNotCauseFalseNegativeEasy():void, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure interfaceShouldNotCauseFalseNegativeEasy(),start of procedure DynamicDispatch$Impl(),return from a call to DynamicDispatch$Impl.(),start of procedure foo(),return from a call to Object DynamicDispatch$Impl.foo()] codetoanalyze/java/biabduction/DynamicDispatch.java, codetoanalyze.java.infer.DynamicDispatch.interfaceShouldNotCauseFalseNegativeHard(codetoanalyze.java.infer.DynamicDispatch$Impl):void, 1, NULL_DEREFERENCE, B2, ERROR, [start of procedure interfaceShouldNotCauseFalseNegativeHard(...),start of procedure foo(),return from a call to Object DynamicDispatch$Impl.foo()] @@ -124,7 +124,7 @@ codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.in codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.nullableParamNPE(java.lang.Object):void, 1, NULL_DEREFERENCE, B1, ERROR, [start of procedure nullableParamNPE(...)] codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.optionalNPE(com.google.common.base.Optional):void, 1, NULL_DEREFERENCE, B2, ERROR, [start of procedure optionalNPE(...)] codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.preconditionCheckStateTest(codetoanalyze.java.infer.NullPointerExceptions$D):int, 1, PRECONDITION_NOT_MET, no_bucket, WARNING, [start of procedure preconditionCheckStateTest(...),Taking false branch] -codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.someNPEAfterResourceLeak():void, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure someNPEAfterResourceLeak(),start of procedure sourceOfNullWithResourceLeak(),start of procedure SomeResource(),return from a call to SomeResource.(),return from a call to T CloseableAsResourceExample.sourceOfNullWithResourceLeak()] +codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.someNPEAfterResourceLeak():void, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure someNPEAfterResourceLeak(),start of procedure sourceOfNullWithResourceLeakBad(),start of procedure SomeResource(),return from a call to SomeResource.(),return from a call to T CloseableAsResourceExample.sourceOfNullWithResourceLeakBad()] codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.stringConstantEqualsFalseNotNPE_FP():void, 10, NULL_DEREFERENCE, B1, ERROR, [start of procedure stringConstantEqualsFalseNotNPE_FP(),Taking false branch] codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.stringVarEqualsFalseNPE():void, 5, NULL_DEREFERENCE, B1, ERROR, [start of procedure stringVarEqualsFalseNPE(),start of procedure getString2(),return from a call to String NullPointerExceptions.getString2(),Skipping toString(): unknown method,Taking true branch] codetoanalyze/java/biabduction/NullPointerExceptions.java, codetoanalyze.java.infer.NullPointerExceptions.testSystemGetPropertyArgument():java.lang.String, 1, NULL_DEREFERENCE, B1, ERROR, [start of procedure testSystemGetPropertyArgument()]