public class UnconditionalFlowInfo extends FlowInfo
| Modifier and Type | Class and Description |
|---|---|
static class |
UnconditionalFlowInfo.AssertionFailedException
Exception raised when unexpected behavior is detected.
|
| Modifier and Type | Field and Description |
|---|---|
static int |
BitCacheSize |
static boolean |
COVERAGE_TEST_FLAG |
static int |
CoverageTestId |
long |
definiteInits |
long[][] |
extra |
static int |
extraLength |
static int |
IN |
long |
iNBit |
static int |
INN |
long |
iNNBit |
int |
maxFieldCount |
long |
nullBit1 |
long |
nullBit2 |
long |
nullBit3 |
long |
nullBit4 |
long |
potentialInits |
DEAD_END, FREE_TYPEVARIABLE, NON_NULL, NULL, NULL_FLAG_MASK, POTENTIALLY_NON_NULL, POTENTIALLY_NULL, POTENTIALLY_UNKNOWN, REACHABLE, tagBits, UNKNOWN, UNREACHABLE, UNREACHABLE_BY_NULLANALYSIS, UNREACHABLE_OR_DEAD, UNROOTED| Constructor and Description |
|---|
UnconditionalFlowInfo() |
| Modifier and Type | Method and Description |
|---|---|
void |
acceptAllIncomingNullness() |
FlowInfo |
addInitializationsFrom(FlowInfo inits)
Add other inits to this flow info, then return this.
|
FlowInfo |
addNullInfoFrom(FlowInfo inits)
Add all null information from otherInits to this flow info and return this.
|
FlowInfo |
addPotentialInitializationsFrom(FlowInfo inits)
Compose other inits over this flow info, then return this.
|
UnconditionalFlowInfo |
addPotentialNullInfoFrom(UnconditionalFlowInfo otherInits)
Compose other inits over this flow info, then return this.
|
boolean |
cannotBeDefinitelyNullOrNonNull(LocalVariableBinding local)
Check whether a given local variable is known to be unable to gain a definite
non null or definite null status by the use of an enclosing flow info.
|
boolean |
cannotBeNull(LocalVariableBinding local)
Check whether a given local variable is known to be non null, either because
it is definitely non null, or because is has been tested against non null.
|
boolean |
canOnlyBeNull(LocalVariableBinding local)
Check whether a given local variable is known to be null, either because it
is definitely null, or because is has been tested against null.
|
FlowInfo |
copy()
Return a deep copy of the current instance.
|
UnconditionalFlowInfo |
discardInitializationInfo()
Discard definite inits and potential inits from this, then return this.
|
UnconditionalFlowInfo |
discardNonFieldInitializations()
Remove local variables information from this flow info and return this.
|
static UnconditionalFlowInfo |
fakeInitializedFlowInfo(int localsCount,
int maxFieldCount) |
void |
growSpace(int newLength,
int copyStart,
int copyLength) |
boolean |
hasNullInfoFor(LocalVariableBinding local)
Check if any null info has been recorded for a given local variable.
|
FlowInfo |
initsWhenFalse()
Return the flow info that would result from the path associated to the
value false for the condition expression that generated this flow info.
|
FlowInfo |
initsWhenTrue()
Return the flow info that would result from the path associated to the
value true for the condition expression that generated this flow info.
|
boolean |
isDefinitelyAssigned(FieldBinding field)
Check status of definite assignment for a field.
|
boolean |
isDefinitelyAssigned(LocalVariableBinding local)
Check status of definite assignment for a local.
|
boolean |
isDefinitelyNonNull(LocalVariableBinding local)
Check status of definite non-null value for a given local variable.
|
boolean |
isDefinitelyNull(LocalVariableBinding local)
Check status of definite null value for a given local variable.
|
boolean |
isDefinitelyUnknown(LocalVariableBinding local)
Check status of definite unknown value for a given local variable.
|
boolean |
isPotentiallyAssigned(FieldBinding field)
Check status of potential assignment for a field.
|
boolean |
isPotentiallyAssigned(LocalVariableBinding local)
Check status of potential assignment for a local variable.
|
boolean |
isPotentiallyNonNull(LocalVariableBinding local)
Check status of potential null assignment for a local.
|
boolean |
isPotentiallyNull(LocalVariableBinding local)
Check status of potential null assignment for a local.
|
boolean |
isPotentiallyUnknown(LocalVariableBinding local)
Return true if the given local may have been assigned to an unknown value.
|
boolean |
isProtectedNonNull(LocalVariableBinding local)
Return true if the given local is protected by a test against a non null
value.
|
boolean |
isProtectedNull(LocalVariableBinding local)
Return true if the given local is protected by a test against null.
|
protected static boolean |
isTrue(boolean expression,
java.lang.String message)
Asserts that the given boolean is
true. |
void |
markAsComparedEqualToNonNull(LocalVariableBinding local)
Record that a local variable got checked to be non null.
|
void |
markAsComparedEqualToNull(LocalVariableBinding local)
Record that a local variable got checked to be null.
|
void |
markAsDefinitelyAssigned(FieldBinding field)
Record a field got definitely assigned.
|
void |
markAsDefinitelyAssigned(LocalVariableBinding local)
Record a local got definitely assigned.
|
void |
markAsDefinitelyNonNull(LocalVariableBinding local)
Record a local got definitely assigned to a non-null value.
|
void |
markAsDefinitelyNull(LocalVariableBinding local)
Record a local got definitely assigned to null.
|
void |
markAsDefinitelyUnknown(LocalVariableBinding local)
Mark a local as having been assigned to an unknown value.
|
void |
markPotentiallyNonNullBit(LocalVariableBinding local)
Record a local may have got assigned to non-null (set the bit on existing info).
|
void |
markPotentiallyNullBit(LocalVariableBinding local)
Record a local may have got assigned to null (set the bit on existing info).
|
void |
markPotentiallyUnknownBit(LocalVariableBinding local)
Mark a local as potentially having been assigned to an unknown value.
|
UnconditionalFlowInfo |
mergeDefiniteInitsWith(UnconditionalFlowInfo otherInits) |
UnconditionalFlowInfo |
mergedWith(UnconditionalFlowInfo otherInits)
Return the intersection of this and otherInits, that is
one of:
the receiver updated in the following way:
intersection of definitely assigned variables,
union of potentially assigned variables,
similar operations for null,
or the receiver or otherInits if the other one is non
reachable.
otherInits is not affected, and is not returned either (no
need to protect the result).
|
UnconditionalFlowInfo |
nullInfoLessUnconditionalCopy()
Return a copy of this unconditional flow info, deprived from its null
info.
|
void |
resetAssignmentInfo(int position) |
void |
resetAssignmentInfo(LocalVariableBinding local)
Resets the definite and potential initialization info for the given local variable
|
void |
resetNullInfo(LocalVariableBinding local)
Reset all null-information about a given local.
|
FlowInfo |
safeInitsWhenTrue()
Return a flow info that carries the same information as the result of
initsWhenTrue, but warrantied to be different
from this.Caveat: side effects on the result may affect components of this. |
FlowInfo |
setReachMode(int reachMode)
Set this flow info reach mode and return this.
|
java.lang.String |
toString() |
UnconditionalFlowInfo |
unconditionalCopy()
Return a new flow info that holds the same information as this would after
a call to unconditionalInits, but leaving this info unaffected.
|
UnconditionalFlowInfo |
unconditionalFieldLessCopy()
Return a new flow info that holds the same information as this would after
a call to
unconditionalInits followed by the
erasure of fields specific information, but leaving this flow info unaffected. |
UnconditionalFlowInfo |
unconditionalInits()
Return a flow info that merges the possible paths of execution described by
this flow info.
|
UnconditionalFlowInfo |
unconditionalInitsWithoutSideEffect()
Return a new flow info that holds the same information as this would after
a call to
unconditionalInits, but leaving
this info unaffected. |
asNegatedCondition, conditional, initial, markNullStatus, mergedOptimizedBranches, mergedOptimizedBranchesIfElse, mergeNullStatus, nullStatus, reachMode, tagBitsToNullStatuspublic static final boolean COVERAGE_TEST_FLAG
public static int CoverageTestId
public long definiteInits
public long potentialInits
public long nullBit1
public long nullBit2
public long nullBit3
public long nullBit4
public long iNBit
public long iNNBit
public static final int extraLength
public long[][] extra
public int maxFieldCount
public static final int BitCacheSize
public static final int IN
public static final int INN
public static UnconditionalFlowInfo fakeInitializedFlowInfo(int localsCount, int maxFieldCount)
public FlowInfo addInitializationsFrom(FlowInfo inits)
FlowInfoaddInitializationsFrom in class FlowInfoinits - other inits to add to thispublic FlowInfo addNullInfoFrom(FlowInfo inits)
FlowInfoaddNullInfoFrom in class FlowInfopublic FlowInfo addPotentialInitializationsFrom(FlowInfo inits)
FlowInfoaddInitializationsFrom.addPotentialInitializationsFrom in class FlowInfoinits - other inits to compose over thispublic UnconditionalFlowInfo addPotentialNullInfoFrom(UnconditionalFlowInfo otherInits)
addInitializationsFrom; moreover,
only the null information is affected.otherInits - other null inits to compose over thispublic final boolean cannotBeDefinitelyNullOrNonNull(LocalVariableBinding local)
FlowInfocannotBeDefinitelyNullOrNonNull in class FlowInfolocal - the variable to checkpublic final boolean cannotBeNull(LocalVariableBinding local)
FlowInfocannotBeNull in class FlowInfolocal - the variable to ckeckpublic final boolean canOnlyBeNull(LocalVariableBinding local)
FlowInfocanOnlyBeNull in class FlowInfolocal - the variable to ckeckpublic FlowInfo copy()
FlowInfopublic UnconditionalFlowInfo discardInitializationInfo()
public UnconditionalFlowInfo discardNonFieldInitializations()
public FlowInfo initsWhenFalse()
FlowInfoConditionalFlowInfo. May have a side effect on subparts of this flow
info (subtrees get merged).initsWhenFalse in class FlowInfopublic FlowInfo initsWhenTrue()
FlowInfoConditionalFlowInfo. May have a side effect on subparts of this flow
info (subtrees get merged).initsWhenTrue in class FlowInfopublic final boolean isDefinitelyAssigned(FieldBinding field)
FlowInfoisDefinitelyAssigned in class FlowInfopublic final boolean isDefinitelyAssigned(LocalVariableBinding local)
FlowInfoisDefinitelyAssigned in class FlowInfopublic final boolean isDefinitelyNonNull(LocalVariableBinding local)
FlowInfoisDefinitelyNonNull in class FlowInfolocal - the variable to ckeckpublic final boolean isDefinitelyNull(LocalVariableBinding local)
FlowInfoisDefinitelyNull in class FlowInfolocal - the variable to ckeckpublic final boolean isDefinitelyUnknown(LocalVariableBinding local)
FlowInfoisDefinitelyUnknown in class FlowInfolocal - the variable to ckeckpublic final boolean hasNullInfoFor(LocalVariableBinding local)
FlowInfohasNullInfoFor in class FlowInfopublic final boolean isPotentiallyAssigned(FieldBinding field)
FlowInfoisPotentiallyAssigned in class FlowInfopublic final boolean isPotentiallyAssigned(LocalVariableBinding local)
FlowInfoisPotentiallyAssigned in class FlowInfopublic final boolean isPotentiallyNonNull(LocalVariableBinding local)
FlowInfoisPotentiallyNonNull in class FlowInfolocal - LocalVariableBinding - the binding for the checked localpublic final boolean isPotentiallyNull(LocalVariableBinding local)
FlowInfoisPotentiallyNull in class FlowInfolocal - LocalVariableBinding - the binding for the checked localpublic final boolean isPotentiallyUnknown(LocalVariableBinding local)
FlowInfoisPotentiallyUnknown in class FlowInfolocal - the local to checkpublic final boolean isProtectedNonNull(LocalVariableBinding local)
FlowInfoisProtectedNonNull in class FlowInfolocal - the local to checkpublic final boolean isProtectedNull(LocalVariableBinding local)
FlowInfoisProtectedNull in class FlowInfolocal - the local to checkprotected static boolean isTrue(boolean expression,
java.lang.String message)
true. If this
is not the case, some kind of unchecked exception is thrown.
The given message is included in that exception, to aid debugging.expression - the outcome of the checkmessage - the message to include in the exceptiontrue if the check passes (does not return
if the check fails)public void markAsComparedEqualToNonNull(LocalVariableBinding local)
FlowInfomarkAsComparedEqualToNonNull in class FlowInfolocal - the checked local variablepublic void markAsComparedEqualToNull(LocalVariableBinding local)
FlowInfomarkAsComparedEqualToNull in class FlowInfolocal - the checked local variablepublic void markAsDefinitelyAssigned(FieldBinding field)
FlowInfomarkAsDefinitelyAssigned in class FlowInfopublic void markAsDefinitelyAssigned(LocalVariableBinding local)
FlowInfomarkAsDefinitelyAssigned in class FlowInfopublic void markAsDefinitelyNonNull(LocalVariableBinding local)
FlowInfomarkAsDefinitelyNonNull in class FlowInfopublic void markAsDefinitelyNull(LocalVariableBinding local)
FlowInfomarkAsDefinitelyNull in class FlowInfopublic void markAsDefinitelyUnknown(LocalVariableBinding local)
markAsDefinitelyUnknown in class FlowInfolocal - the local to markpublic void resetNullInfo(LocalVariableBinding local)
FlowInforesetNullInfo in class FlowInfopublic void markPotentiallyUnknownBit(LocalVariableBinding local)
markPotentiallyUnknownBit in class FlowInfolocal - the local to markpublic void markPotentiallyNullBit(LocalVariableBinding local)
FlowInfomarkPotentiallyNullBit in class FlowInfopublic void markPotentiallyNonNullBit(LocalVariableBinding local)
FlowInfomarkPotentiallyNonNullBit in class FlowInfopublic UnconditionalFlowInfo mergedWith(UnconditionalFlowInfo otherInits)
FlowInfomergedWith in class FlowInfootherInits - the flow info to merge with thispublic UnconditionalFlowInfo nullInfoLessUnconditionalCopy()
FlowInfoDEAD_END is returned unmodified.nullInfoLessUnconditionalCopy in class FlowInfopublic FlowInfo safeInitsWhenTrue()
FlowInfoinitsWhenTrue, but warrantied to be different
from this.safeInitsWhenTrue in class FlowInfopublic FlowInfo setReachMode(int reachMode)
FlowInfosetReachMode in class FlowInforeachMode - one of REACHABLE, UNREACHABLE_OR_DEAD,
UNREACHABLE_BY_NULLANALYSIS or UNREACHABLEpublic UnconditionalFlowInfo unconditionalCopy()
FlowInfounconditionalCopy in class FlowInfopublic UnconditionalFlowInfo unconditionalFieldLessCopy()
FlowInfounconditionalInits followed by the
erasure of fields specific information, but leaving this flow info unaffected.unconditionalFieldLessCopy in class FlowInfopublic UnconditionalFlowInfo unconditionalInits()
FlowInfounconditionalInits in class FlowInfopublic UnconditionalFlowInfo unconditionalInitsWithoutSideEffect()
FlowInfounconditionalInits, but leaving
this info unaffected. Side effects on the result might affect this though
(consider it as read only).unconditionalInitsWithoutSideEffect in class FlowInfopublic UnconditionalFlowInfo mergeDefiniteInitsWith(UnconditionalFlowInfo otherInits)
mergeDefiniteInitsWith in class FlowInfopublic void resetAssignmentInfo(LocalVariableBinding local)
FlowInforesetAssignmentInfo in class FlowInfopublic void resetAssignmentInfo(int position)
public void growSpace(int newLength,
int copyStart,
int copyLength)
public void acceptAllIncomingNullness()