Class UnconditionalFlowInfo
java.lang.Object
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowInfo
org.aspectj.org.eclipse.jdt.internal.compiler.flow.UnconditionalFlowInfo
Record initialization status during definite assignment analysis
No caching of pre-allocated instances.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classException raised when unexpected behavior is detected. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final booleanstatic intstatic final intlongstatic final intlong[][]static final intlonglongstatic final intlongstatic final intlongintlonglonglonglonglongFields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowInfo
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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidIf current info sits within a loop and where (non)nullness is known to reach this point, then corresponding (non)nullness from other should override existing state.addInitializationsFrom(FlowInfo inits) Add other inits to this flow info, then return this.addNullInfoFrom(FlowInfo inits) Add all null information from otherInits to this flow info and return this.Compose other inits over this flow info, then return this.addPotentialNullInfoFrom(UnconditionalFlowInfo otherInits) Compose other inits over this flow info, then return this.final booleanCheck 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.final booleancannotBeNull(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.final booleanCheck whether a given local variable is known to be null, either because it is definitely null, or because is has been tested against null.copy()Return a deep copy of the current instance.Discard definite inits and potential inits from this, then return this.Remove local variables information from this flow info and return this.static UnconditionalFlowInfofakeInitializedFlowInfo(int localsCount, int maxFieldCount) voidgrowSpace(int newLength, int copyStart, int copyLength) final booleanCheck if any null info has been recorded for a given local variable.Return the flow info that would result from the path associated to the value false for the condition expression that generated this flow info.Return the flow info that would result from the path associated to the value true for the condition expression that generated this flow info.final booleanisDefinitelyAssigned(FieldBinding field) Check status of definite assignment for a field.final booleanCheck status of definite assignment for a local.final booleanCheck status of definite non-null value for a given local variable.final booleanCheck status of definite null value for a given local variable.final booleanCheck status of definite unknown value for a given local variable.final booleanCheck status of potential assignment for a field.final booleanCheck status of potential assignment for a local variable.final booleanCheck status of potential null assignment for a local.final booleanCheck status of potential null assignment for a local.final booleanReturn true if the given local may have been assigned to an unknown value.final booleanReturn true if the given local is protected by a test against a non null value.final booleanReturn true if the given local is protected by a test against null.protected static booleanAsserts that the given boolean istrue.voidRecord that a local variable got checked to be non null.voidRecord that a local variable got checked to be null.voidRecord a field got definitely assigned.voidRecord a local got definitely assigned.voidRecord a local got definitely assigned to a non-null value.voidRecord a local got definitely assigned to null.voidMark a local as having been assigned to an unknown value.voidRecord a local may have got assigned to non-null (set the bit on existing info).voidRecord a local may have got assigned to null (set the bit on existing info).voidMark a local as potentially having been assigned to an unknown value.mergeDefiniteInitsWith(UnconditionalFlowInfo otherInits) 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).Return a copy of this unconditional flow info, deprived from its null info.voidresetAssignmentInfo(int position) voidResets the definite and potential initialization info for the given local variablevoidReset all null-information about a given local.Return a flow info that carries the same information as the result ofinitsWhenTrue, but warrantied to be different from this.
Caveat: side effects on the result may affect components of this.setReachMode(int reachMode) Set this flow info reach mode and return this.toString()Return a new flow info that holds the same information as this would after a call to unconditionalInits, but leaving this info unaffected.Return a new flow info that holds the same information as this would after a call tounconditionalInitsfollowed by the erasure of fields specific information, but leaving this flow info unaffected.Return a flow info that merges the possible paths of execution described by this flow info.Return a new flow info that holds the same information as this would after a call tounconditionalInits, but leaving this info unaffected.Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowInfo
asNegatedCondition, conditional, initial, markNullStatus, mergedOptimizedBranches, mergedOptimizedBranchesIfElse, mergeNullStatus, nullStatus, reachMode, tagBitsToNullStatus
-
Field Details
-
COVERAGE_TEST_FLAG
public static final boolean COVERAGE_TEST_FLAG- See Also:
-
CoverageTestId
public static int CoverageTestId -
definiteInits
public long definiteInits -
potentialInits
public long potentialInits -
nullBit1
public long nullBit1 -
nullBit2
public long nullBit2 -
nullBit3
public long nullBit3 -
nullBit4
public long nullBit4 -
iNBit
public long iNBit -
iNNBit
public long iNNBit -
iDefNBit
public long iDefNBit -
iDefNNBit
public long iDefNNBit -
extraLength
public static final int extraLength- See Also:
-
extra
public long[][] extra -
maxFieldCount
public int maxFieldCount -
BitCacheSize
public static final int BitCacheSize- See Also:
-
IN
public static final int IN- See Also:
-
INN
public static final int INN- See Also:
-
DEFIN
public static final int DEFIN- See Also:
-
DEFINN
public static final int DEFINN- See Also:
-
-
Constructor Details
-
UnconditionalFlowInfo
public UnconditionalFlowInfo()
-
-
Method Details
-
fakeInitializedFlowInfo
-
addInitializationsFrom
Description copied from class:FlowInfoAdd other inits to this flow info, then return this. The operation semantics are to match as closely as possible the application to this flow info of all the operations that resulted into otherInits.- Specified by:
addInitializationsFromin classFlowInfo- Parameters:
inits- other inits to add to this- Returns:
- this, modified according to otherInits information
-
addNullInfoFrom
Description copied from class:FlowInfoAdd all null information from otherInits to this flow info and return this. The operation models the effect of an unconditional sequence of this flow info and otherInits.- Specified by:
addNullInfoFromin classFlowInfo
-
addPotentialInitializationsFrom
Description copied from class:FlowInfoCompose other inits over this flow info, then return this. The operation semantics are to wave into this flow info the consequences of a possible path into the operations that resulted into otherInits. The fact that this path may be left unexecuted under peculiar conditions results into less specific results thanaddInitializationsFrom.- Specified by:
addPotentialInitializationsFromin classFlowInfo- Parameters:
inits- other inits to compose over this- Returns:
- this, modified according to otherInits information
-
addPotentialNullInfoFrom
Compose other inits over this flow info, then return this. The operation semantics are to wave into this flow info the consequences upon null information of a possible path into the operations that resulted into otherInits. The fact that this path may be left unexecuted under peculiar conditions results into less specific results thanaddInitializationsFrom; moreover, only the null information is affected.- Parameters:
otherInits- other null inits to compose over this- Returns:
- this, modified according to otherInits information
-
acceptIncomingNullnessFrom
If current info sits within a loop and where (non)nullness is known to reach this point, then corresponding (non)nullness from other should override existing state. -
cannotBeDefinitelyNullOrNonNull
Description copied from class:FlowInfoCheck 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. The semantics are that if the current flow info marks the variable as potentially unknown or else as being both potentially null and potentially non null, then it won't ever be promoted as definitely null or definitely non null. (It could still get promoted to definite unknown).- Overrides:
cannotBeDefinitelyNullOrNonNullin classFlowInfo- Parameters:
local- the variable to check- Returns:
- true iff this flow info prevents local from being promoted to definite non null or definite null against an enclosing flow info
-
cannotBeNull
Description copied from class:FlowInfoCheck 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.- Overrides:
cannotBeNullin classFlowInfo- Parameters:
local- the variable to ckeck- Returns:
- true iff local cannot be null for this flow info
-
canOnlyBeNull
Description copied from class:FlowInfoCheck whether a given local variable is known to be null, either because it is definitely null, or because is has been tested against null.- Overrides:
canOnlyBeNullin classFlowInfo- Parameters:
local- the variable to ckeck- Returns:
- true iff local can only be null for this flow info
-
copy
-
discardInitializationInfo
Discard definite inits and potential inits from this, then return this. The returned flow info only holds null related information.- Returns:
- this flow info, minus definite inits and potential inits
-
discardNonFieldInitializations
Remove local variables information from this flow info and return this.- Returns:
- this, deprived from any local variable information
-
initsWhenFalse
Description copied from class:FlowInfoReturn the flow info that would result from the path associated to the value false for the condition expression that generated this flow info. May be this flow info if it is not an instance ofConditionalFlowInfo. May have a side effect on subparts of this flow info (subtrees get merged).- Specified by:
initsWhenFalsein classFlowInfo- Returns:
- the flow info associated to the false branch of the condition that generated this flow info
-
initsWhenTrue
Description copied from class:FlowInfoReturn the flow info that would result from the path associated to the value true for the condition expression that generated this flow info. May be this flow info if it is not an instance ofConditionalFlowInfo. May have a side effect on subparts of this flow info (subtrees get merged).- Specified by:
initsWhenTruein classFlowInfo- Returns:
- the flow info associated to the true branch of the condition that generated this flow info
-
isDefinitelyAssigned
Description copied from class:FlowInfoCheck status of definite assignment for a field.- Specified by:
isDefinitelyAssignedin classFlowInfo
-
isDefinitelyAssigned
Description copied from class:FlowInfoCheck status of definite assignment for a local.- Specified by:
isDefinitelyAssignedin classFlowInfo
-
isDefinitelyNonNull
Description copied from class:FlowInfoCheck status of definite non-null value for a given local variable.- Specified by:
isDefinitelyNonNullin classFlowInfo- Parameters:
local- the variable to ckeck- Returns:
- true iff local is definitely non null for this flow info
-
isDefinitelyNull
Description copied from class:FlowInfoCheck status of definite null value for a given local variable.- Specified by:
isDefinitelyNullin classFlowInfo- Parameters:
local- the variable to ckeck- Returns:
- true iff local is definitely null for this flow info
-
isDefinitelyUnknown
Description copied from class:FlowInfoCheck status of definite unknown value for a given local variable.- Specified by:
isDefinitelyUnknownin classFlowInfo- Parameters:
local- the variable to ckeck- Returns:
- true iff local is definitely unknown for this flow info
-
hasNullInfoFor
Description copied from class:FlowInfoCheck if any null info has been recorded for a given local variable. Here even recording of 'UNKNOWN' is considered as null info.- Specified by:
hasNullInfoForin classFlowInfo
-
isPotentiallyAssigned
Description copied from class:FlowInfoCheck status of potential assignment for a field.- Specified by:
isPotentiallyAssignedin classFlowInfo
-
isPotentiallyAssigned
Description copied from class:FlowInfoCheck status of potential assignment for a local variable.- Specified by:
isPotentiallyAssignedin classFlowInfo
-
isPotentiallyNonNull
Description copied from class:FlowInfoCheck status of potential null assignment for a local. Return true if there is a reasonable expectation that the variable be non null at this point.- Specified by:
isPotentiallyNonNullin classFlowInfo- Parameters:
local- LocalVariableBinding - the binding for the checked local- Returns:
- true if there is a reasonable expectation that local be non null at this point
-
isPotentiallyNull
Description copied from class:FlowInfoCheck status of potential null assignment for a local. Return true if there is a reasonable expectation that the variable be null at this point. This includes the protected null case, so as to augment diagnostics, but does not really check that someone deliberately assigned to null on any specific path- Specified by:
isPotentiallyNullin classFlowInfo- Parameters:
local- LocalVariableBinding - the binding for the checked local- Returns:
- true if there is a reasonable expectation that local be null at this point
-
isPotentiallyUnknown
Description copied from class:FlowInfoReturn true if the given local may have been assigned to an unknown value.- Specified by:
isPotentiallyUnknownin classFlowInfo- Parameters:
local- the local to check- Returns:
- true if the given local may have been assigned to an unknown value
-
isProtectedNonNull
Description copied from class:FlowInfoReturn true if the given local is protected by a test against a non null value.- Specified by:
isProtectedNonNullin classFlowInfo- Parameters:
local- the local to check- Returns:
- true if the given local is protected by a test against a non null
-
isProtectedNull
Description copied from class:FlowInfoReturn true if the given local is protected by a test against null.- Specified by:
isProtectedNullin classFlowInfo- Parameters:
local- the local to check- Returns:
- true if the given local is protected by a test against null
-
isTrue
Asserts that the given boolean istrue. If this is not the case, some kind of unchecked exception is thrown. The given message is included in that exception, to aid debugging.- Parameters:
expression- the outcome of the checkmessage- the message to include in the exception- Returns:
trueif the check passes (does not return if the check fails)
-
markAsComparedEqualToNonNull
Description copied from class:FlowInfoRecord that a local variable got checked to be non null.- Specified by:
markAsComparedEqualToNonNullin classFlowInfo- Parameters:
local- the checked local variable
-
markAsComparedEqualToNull
Description copied from class:FlowInfoRecord that a local variable got checked to be null.- Specified by:
markAsComparedEqualToNullin classFlowInfo- Parameters:
local- the checked local variable
-
markAsDefinitelyAssigned
Description copied from class:FlowInfoRecord a field got definitely assigned.- Specified by:
markAsDefinitelyAssignedin classFlowInfo
-
markAsDefinitelyAssigned
Description copied from class:FlowInfoRecord a local got definitely assigned.- Specified by:
markAsDefinitelyAssignedin classFlowInfo
-
markAsDefinitelyNonNull
Description copied from class:FlowInfoRecord a local got definitely assigned to a non-null value.- Specified by:
markAsDefinitelyNonNullin classFlowInfo
-
markAsDefinitelyNull
Description copied from class:FlowInfoRecord a local got definitely assigned to null.- Specified by:
markAsDefinitelyNullin classFlowInfo
-
markAsDefinitelyUnknown
Mark a local as having been assigned to an unknown value.- Specified by:
markAsDefinitelyUnknownin classFlowInfo- Parameters:
local- the local to mark
-
resetNullInfo
Description copied from class:FlowInfoReset all null-information about a given local.- Specified by:
resetNullInfoin classFlowInfo
-
markPotentiallyUnknownBit
Mark a local as potentially having been assigned to an unknown value.- Specified by:
markPotentiallyUnknownBitin classFlowInfo- Parameters:
local- the local to mark
-
markPotentiallyNullBit
Description copied from class:FlowInfoRecord a local may have got assigned to null (set the bit on existing info).- Specified by:
markPotentiallyNullBitin classFlowInfo
-
markPotentiallyNonNullBit
Description copied from class:FlowInfoRecord a local may have got assigned to non-null (set the bit on existing info).- Specified by:
markPotentiallyNonNullBitin classFlowInfo
-
mergedWith
Description copied from class:FlowInfoReturn 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.
- Specified by:
mergedWithin classFlowInfo- Parameters:
otherInits- the flow info to merge with this- Returns:
- the intersection of this and otherInits.
- the receiver updated in the following way:
-
nullInfoLessUnconditionalCopy
Description copied from class:FlowInfoReturn a copy of this unconditional flow info, deprived from its null info.DEAD_ENDis returned unmodified.- Specified by:
nullInfoLessUnconditionalCopyin classFlowInfo- Returns:
- a copy of this unconditional flow info deprived from its null info
-
safeInitsWhenTrue
Description copied from class:FlowInfoReturn a flow info that carries the same information as the result ofinitsWhenTrue, but warrantied to be different from this.
Caveat: side effects on the result may affect components of this.- Specified by:
safeInitsWhenTruein classFlowInfo- Returns:
- the result of initsWhenTrue or a copy of it
-
setReachMode
Description copied from class:FlowInfoSet this flow info reach mode and return this.- Specified by:
setReachModein classFlowInfo- Parameters:
reachMode- one ofREACHABLE,UNREACHABLE_OR_DEAD,UNREACHABLE_BY_NULLANALYSISorUNREACHABLE- Returns:
- this, with the reach mode set to reachMode
-
toString
-
unconditionalCopy
Description copied from class:FlowInfoReturn a new flow info that holds the same information as this would after a call to unconditionalInits, but leaving this info unaffected. Moreover, the result can be modified without affecting this.- Specified by:
unconditionalCopyin classFlowInfo- Returns:
- a new flow info carrying this unconditional flow info
-
unconditionalFieldLessCopy
Description copied from class:FlowInfoReturn a new flow info that holds the same information as this would after a call tounconditionalInitsfollowed by the erasure of fields specific information, but leaving this flow info unaffected.- Specified by:
unconditionalFieldLessCopyin classFlowInfo- Returns:
- a new flow info carrying the unconditional flow info for local variables
-
unconditionalInits
Description copied from class:FlowInfoReturn a flow info that merges the possible paths of execution described by this flow info. In case of an unconditional flow info, return this. In case of a conditional flow info, merge branches recursively. Caveat: this may be affected, and modifying the result may affect this.- Specified by:
unconditionalInitsin classFlowInfo- Returns:
- a flow info that merges the possible paths of execution described by this
-
unconditionalInitsWithoutSideEffect
Description copied from class:FlowInfoReturn a new flow info that holds the same information as this would after a call tounconditionalInits, but leaving this info unaffected. Side effects on the result might affect this though (consider it as read only).- Specified by:
unconditionalInitsWithoutSideEffectin classFlowInfo- Returns:
- a flow info carrying this unconditional flow info
-
mergeDefiniteInitsWith
- Specified by:
mergeDefiniteInitsWithin classFlowInfo
-
resetAssignmentInfo
Description copied from class:FlowInfoResets the definite and potential initialization info for the given local variable- Specified by:
resetAssignmentInfoin classFlowInfo
-
resetAssignmentInfo
public void resetAssignmentInfo(int position) -
growSpace
public void growSpace(int newLength, int copyStart, int copyLength) -
acceptAllIncomingNullness
public void acceptAllIncomingNullness()
-