Class IsNullValue

java.lang.Object
edu.umd.cs.findbugs.ba.npe.IsNullValue
All Implemented Interfaces:
Debug, IsNullValueAnalysisFeatures

public class IsNullValue extends Object implements IsNullValueAnalysisFeatures, Debug
A class to abstractly represent values in stack slots, indicating whether thoses values can be null, non-null, null on some incoming path, or unknown.
See Also:
  • Field Details

    • DEBUG_EXCEPTION

      private static final boolean DEBUG_EXCEPTION
    • DEBUG_KABOOM

      private static final boolean DEBUG_KABOOM
    • NULL

      private static final int NULL
      Definitely null.
      See Also:
    • CHECKED_NULL

      private static final int CHECKED_NULL
      Definitely null because of a comparison to a known null value.
      See Also:
    • NN

      private static final int NN
      Definitely not null.
      See Also:
    • CHECKED_NN

      private static final int CHECKED_NN
      Definitely not null because of a comparison to a known null value.
      See Also:
    • NO_KABOOM_NN

      private static final int NO_KABOOM_NN
      Definitely not null an NPE would have occurred and we would not be here if it were null.
      See Also:
    • NSP

      private static final int NSP
      Null on some simple path (at most one branch) to current location.
      See Also:
    • NN_UNKNOWN

      private static final int NN_UNKNOWN
      Unknown value (method param, value read from heap, etc.), assumed not null.
      See Also:
    • NCP2

      private static final int NCP2
      Null on some complex path (at least two branches) to current location.
      See Also:
    • NCP3

      private static final int NCP3
      Null on some complex path (at least three branches) to current location.
      See Also:
    • FLAG_SHIFT

      private static final int FLAG_SHIFT
      See Also:
    • EXCEPTION

      private static final int EXCEPTION
      Value was propagated along an exception path.
      See Also:
    • PARAM

      private static final int PARAM
      Value is (potentially) null because of a parameter passed to the method.
      See Also:
    • RETURN_VAL

      private static final int RETURN_VAL
      Value is (potentially) null because of a value returned from a called method.
      See Also:
    • FIELD_VAL

      private static final int FIELD_VAL
      See Also:
    • READLINE_VAL

      private static final int READLINE_VAL
      Value is (potentially) null because of a value returned from readline.
      See Also:
    • FLAG_MASK

      private static final int FLAG_MASK
      See Also:
    • mergeMatrix

      private static final int[][] mergeMatrix
    • instanceByFlagsList

      private static final IsNullValue[][] instanceByFlagsList
    • kind

      private final int kind
    • locationOfKaBoom

      private final Location locationOfKaBoom
  • Constructor Details

    • IsNullValue

      private IsNullValue(int kind)
    • IsNullValue

      private IsNullValue(int kind, Location ins)
  • Method Details

    • createInstanceByFlagList

      private static IsNullValue[][] createInstanceByFlagList()
    • checkNoKaboomNNLocation

      private void checkNoKaboomNNLocation()
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • getBaseKind

      private int getBaseKind()
    • getFlags

      private int getFlags()
    • hasFlag

      private boolean hasFlag(int flag)
    • isException

      public boolean isException()
      Was this value propagated on an exception path?
    • isReturnValue

      public boolean isReturnValue()
      Was this value marked as a possibly null return value?
    • isReadlineValue

      public boolean isReadlineValue()
    • isFieldValue

      public boolean isFieldValue()
    • isParamValue

      public boolean isParamValue()
      Was this value marked as a possibly null parameter?
    • isChecked

      public boolean isChecked()
      Is this value known because of an explicit null check?
    • wouldHaveBeenAKaboom

      public boolean wouldHaveBeenAKaboom()
      Is this value known to be non null because a NPE would have occurred otherwise?
    • toExceptionValue

      public IsNullValue toExceptionValue()
      Convert to an exception path value.
    • markInformationAsComingFromReturnValueOfMethod

      public IsNullValue markInformationAsComingFromReturnValueOfMethod(XMethod methodInvoked)
      Convert to a value known because it was returned from a method in a method property database.
      Parameters:
      methodInvoked - TODO
    • markInformationAsComingFromFieldValue

      public IsNullValue markInformationAsComingFromFieldValue(XField field)
      Convert to a value known because it was returned from a method in a method property database.
      Parameters:
      field - TODO
    • nullValue

      public static IsNullValue nullValue()
      Get the instance representing values that are definitely null.
    • checkedNullValue

      public static IsNullValue checkedNullValue()
      Get the instance representing a value known to be null because it was compared against null value, or because we saw that it was assigned the null constant.
    • nonNullValue

      public static IsNullValue nonNullValue()
      Get the instance representing values that are definitely not null.
    • checkedNonNullValue

      public static IsNullValue checkedNonNullValue()
      Get the instance representing a value known to be non-null because it was compared against null value, or because we saw the object creation.
    • noKaboomNonNullValue

      public static IsNullValue noKaboomNonNullValue(@Nonnull Location ins)
      Get the instance representing a value known to be non-null because a NPE would have occurred if it were null.
    • nullOnSimplePathValue

      public static IsNullValue nullOnSimplePathValue()
      Get the instance representing values that are definitely null on some simple (no branches) incoming path.
    • parameterMarkedAsMightBeNull

      public static IsNullValue parameterMarkedAsMightBeNull(XMethodParameter mp)
      Get instance representing a parameter marked as MightBeNull
    • parameterMarkedAsNonnull

      public static IsNullValue parameterMarkedAsNonnull(XMethodParameter mp)
      Get instance representing a parameter marked as Nonnull
    • nonReportingNotNullValue

      public static IsNullValue nonReportingNotNullValue()
      Get non-reporting non-null value. This is what we use for unknown values.
    • nullOnComplexPathValue

      public static IsNullValue nullOnComplexPathValue()
      Get null on complex path value. This is like null on simple path value, but there are at least two branches between the explicit null value and the current location. If the conditions are correlated, then the path on which the value is null may be infeasible.
    • nullOnComplexPathValue3

      public static IsNullValue nullOnComplexPathValue3()
      Like "null on complex path" except that there are at least three branches between the explicit null value and the current location.
    • pathSensitiveNullValue

      public static IsNullValue pathSensitiveNullValue()
      Get null value resulting from comparison to explicit null.
    • pathSensitiveNonNullValue

      public static IsNullValue pathSensitiveNonNullValue()
      Get non-null value resulting from comparison to explicit null.
    • merge

      public static IsNullValue merge(IsNullValue a, IsNullValue b)
      Merge two values.
    • isDefinitelyNull

      public boolean isDefinitelyNull()
      Is this value definitely null?
    • isNullOnSomePath

      public boolean isNullOnSomePath()
      Is this value null on some path?
    • isNullOnComplicatedPath

      public boolean isNullOnComplicatedPath()
      Is this value null on a complicated path?
    • isNullOnComplicatedPath23

      public boolean isNullOnComplicatedPath23()
      Is this value null on a complicated path?
    • isNullOnComplicatedPath2

      public boolean isNullOnComplicatedPath2()
      Is this value null on a complicated path?
    • mightBeNull

      public boolean mightBeNull()
      Return true if this value is either definitely null, or might be null on a simple path.
      Returns:
      true if this value is either definitely null, or might be null on a simple path, false otherwise
    • isDefinitelyNotNull

      public boolean isDefinitelyNotNull()
      Is this value definitely not null?
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getLocationOfKaBoom

      public Location getLocationOfKaBoom()
    • downgradeOnControlSplit

      public IsNullValue downgradeOnControlSplit()
      Control split: move given value down in the lattice if it is a conditionally-null value.
      Returns:
      another value (equal or further down in the lattice)