public class FlowContext extends java.lang.Object implements TypeConstants
TypeConstants.BoundCheckStatus, TypeConstants.CloseMethodRecord, TypeConstants.DangerousMethod| Modifier and Type | Field and Description |
|---|---|
static int |
ASSIGN_TO_NONNULL |
ASTNode |
associatedNode |
static int |
CAN_ONLY_NON_NULL |
static int |
CAN_ONLY_NULL |
static int |
CAN_ONLY_NULL_NON_NULL |
static int |
CHECK_MASK |
int |
conditionalLevel
Used to record whether effects in a try block affect the finally-block
conditionally or unconditionally.
|
static int |
CONTEXT_MASK |
static int |
DEFER_NULL_DIAGNOSTIC |
static int |
EXIT_RESOURCE |
static int |
HIDE_NULL_COMPARISON_WARNING
used to hide null comparison related warnings inside assert statements
|
static int |
HIDE_NULL_COMPARISON_WARNING_MASK |
static int |
IN_ASSIGNMENT |
static int |
IN_COMPARISON_NON_NULL |
static int |
IN_COMPARISON_NULL |
static int |
IN_INSTANCEOF |
static int |
IN_UNBOXING |
FlowInfo |
initsOnFinally |
static int |
INSIDE_NEGATION |
static int |
MAY_NULL |
static FlowContext |
NotContinuableContext |
FlowContext |
parent |
static int |
PREEMPT_NULL_DIAGNOSTIC |
TypeBinding[][] |
providedExpectedTypes |
int |
tagBits |
ANNOTATION, ANNOTATION_PREFIX, ANNOTATION_SUFFIX, ANONYM_PREFIX, ANONYM_SUFFIX, ANONYMOUS_METHOD, APACHE, APACHE_DBUTILS, APACHE_IOUTILS, ASSERT_CLASS, ASSERT_FALSE, ASSERT_NOTNULL, ASSERT_NULL, ASSERT_TRUE, AUTOMATIC_MODULE_NAME, AUTOWIRED, BEANS, BOOLEAN, BYTE, CAPTURE18, CHANNELS, CHAR, CharArray_JAVA_IO_OBJECTINPUTSTREAM, CharArray_JAVA_IO_OBJECTOUTPUTSTREAM, CharArray_JAVA_IO_OBJECTSTREAMFIELD, CharArray_JAVA_LANG_ANNOTATION_ANNOTATION, CharArray_JAVA_LANG_ENUM, CharArray_JAVA_LANG_OBJECT, CharArray_JAVA_LANG_RECORD, CharArray_JAVA_LANG_RECORD_SLASH, CHECK_ARGUMENT, CHECK_NOT_NULL, CHECK_STATE, CLINIT, CLONE, CLOSE, CLOSE_QUIETLY, closeMethods, COM, COM_GOOGLE_COMMON_BASE_PRECONDITIONS, COM_GOOGLE_INJECT_INJECT, COMMONS, COMPILER, CONSTRAINT_EQUAL, CONSTRAINT_EXTENDS, CONSTRAINT_SUPER, CONTAINS, CONTAINS_ALL, CONTAINS_KEY, CONTAINS_VALUE, CORE, DEFAULT_LOCATION__ARRAY_CONTENTS, DEFAULT_LOCATION__FIELD, DEFAULT_LOCATION__PARAMETER, DEFAULT_LOCATION__RETURN_TYPE, DEFAULT_LOCATION__TYPE_ARGUMENT, DEFAULT_LOCATION__TYPE_BOUND, DEFAULT_LOCATION__TYPE_PARAMETER, DESERIALIZE_LAMBDA, DOM, DOUBLE, ECLIPSE, EQUALS, FACTORY, FLOAT, FLUENT_RESOURCE_CLASSES, FOR_REMOVAL, FRAMEWORK, GET, GETCLASS, GOOGLE, GUAVA_CLOSEABLES, HASHCODE, INDEX_OF, INIT, INJECT_PACKAGE, INJECT_TYPE, INT, INTERNAL, INVOKE, IO, IS_INSTANCE, IS_NOTNULL, IS_NULL, IS_TRUE, ITYPEBINDING, JAVA, JAVA_BASE, JAVA_IO, JAVA_IO_CLOSEABLE, JAVA_IO_EXTERNALIZABLE, JAVA_IO_IOEXCEPTION, JAVA_IO_OBJECTINPUTSTREAM, JAVA_IO_OBJECTOUTPUTSTREAM, JAVA_IO_OBJECTSTREAMEXCEPTION, JAVA_IO_PRINTSTREAM, JAVA_IO_RESOURCE_FREE_CLOSEABLES, JAVA_IO_SERIALIZABLE, JAVA_IO_WRAPPER_CLOSEABLES, JAVA_LANG, JAVA_LANG_ANNOTATION, JAVA_LANG_ANNOTATION_ANNOTATION, JAVA_LANG_ANNOTATION_DOCUMENTED, JAVA_LANG_ANNOTATION_ELEMENTTYPE, JAVA_LANG_ANNOTATION_INHERITED, JAVA_LANG_ANNOTATION_REPEATABLE, JAVA_LANG_ANNOTATION_RETENTION, JAVA_LANG_ANNOTATION_RETENTIONPOLICY, JAVA_LANG_ANNOTATION_TARGET, JAVA_LANG_ASSERTIONERROR, JAVA_LANG_AUTOCLOSEABLE, JAVA_LANG_BOOLEAN, JAVA_LANG_BYTE, JAVA_LANG_CHARACTER, JAVA_LANG_CLASS, JAVA_LANG_CLASSNOTFOUNDEXCEPTION, JAVA_LANG_CLONEABLE, JAVA_LANG_DEPRECATED, JAVA_LANG_DOUBLE, JAVA_LANG_ENUM, JAVA_LANG_ERROR, JAVA_LANG_EXCEPTION, JAVA_LANG_FLOAT, JAVA_LANG_FUNCTIONAL_INTERFACE, JAVA_LANG_ILLEGALARGUMENTEXCEPTION, JAVA_LANG_INCOMPATIBLECLASSCHANGEERROR, JAVA_LANG_INTEGER, JAVA_LANG_INVOKE_LAMBDAMETAFACTORY, JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLES, JAVA_LANG_INVOKE_SERIALIZEDLAMBDA, JAVA_LANG_ITERABLE, JAVA_LANG_LONG, JAVA_LANG_NOCLASSDEFERROR, JAVA_LANG_NOSUCHFIELDERROR, JAVA_LANG_OBJECT, JAVA_LANG_OVERRIDE, JAVA_LANG_RECORD, JAVA_LANG_REFLECT_CONSTRUCTOR, JAVA_LANG_REFLECT_FIELD, JAVA_LANG_REFLECT_METHOD, JAVA_LANG_RUNTIME_OBJECTMETHODS, JAVA_LANG_RUNTIMEEXCEPTION, JAVA_LANG_SAFEVARARGS, JAVA_LANG_SHORT, JAVA_LANG_STRING, JAVA_LANG_STRINGBUFFER, JAVA_LANG_STRINGBUILDER, JAVA_LANG_SUPPRESSWARNINGS, JAVA_LANG_SYSTEM, JAVA_LANG_THROWABLE, JAVA_LANG_VOID, JAVA_NIO_FILE_FILES, JAVA_UTIL_ARRAYS, JAVA_UTIL_COLLECTION, JAVA_UTIL_ITERATOR, JAVA_UTIL_LIST, JAVA_UTIL_MAP, JAVA_UTIL_OBJECTS, JAVA_UTIL_STREAM, JAVA_UTIL_ZIP_WRAPPER_CLOSEABLES, JAVAX, JAVAX_ANNOTATION_INJECT_INJECT, JAVAX_RMI_CORBA_STUB, JDT, JUNIT, JUNIT_FRAMEWORK_ASSERT, JUPITER, LAMBDA_TYPE, LANG, LANG3, LAST_INDEX_OF, LENGTH, LONG, LOOKUP, MAIN, META_INF_MANIFEST_MF, METHOD_SOURCE, MODULE_INFO_CLASS_NAME, MODULE_INFO_CLASS_NAME_STRING, MODULE_INFO_FILE_NAME, MODULE_INFO_FILE_NAME_STRING, MODULE_INFO_NAME, MODULE_INFO_NAME_STRING, NIO, NON_NULL, NOT_NULL, NULL, OBJECT, OPTIONAL, ORG, ORG_APACHE_COMMONS_LANG_VALIDATE, ORG_APACHE_COMMONS_LANG3_VALIDATE, ORG_ECLIPSE_CORE_RUNTIME_ASSERT, ORG_ECLIPSE_JDT_CORE_DOM_ITYPEBINDING, ORG_ECLIPSE_JDT_INTERNAL_COMPILER_LOOKUP_TYPEBINDING, ORG_JUNIT_ASSERT, ORG_JUNIT_METHOD_SOURCE, ORG_SPRING_AUTOWIRED, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, PARAMS, PROVIDER, READOBJECT, READRESOLVE, RECORD_CLASS, RECORD_RESTRICTED_IDENTIFIER, REFLECT, REMOVE, REMOVE_ALL, REQUIRE_NON_NULL, REQUIRED, RESOURCE_FREE_CLOSEABLE_J_U_STREAMS, RETAIN_ALL, RUNTIME, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, SINCE, SPRING, SYNTHETIC_ACCESS_METHOD_PREFIX, SYNTHETIC_ASSERT_DISABLED, SYNTHETIC_CLASS, SYNTHETIC_ENCLOSING_INSTANCE_PREFIX, SYNTHETIC_ENUM_CONSTANT_INITIALIZATION_METHOD_PREFIX, SYNTHETIC_ENUM_VALUES, SYNTHETIC_OUTER_LOCAL_PREFIX, SYNTHETIC_STATIC_FACTORY, SYNTHETIC_SWITCH_ENUM_TABLE, TOSTRING, TYPE, TYPE_PARAMETER_TARGET, TYPE_USE_TARGET, TYPEBINDING, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_MODULE, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RECORD_COMPONENT, UPPER_RUNTIME, UPPER_SOURCE, UTIL, VALIDATE_CLASS, VALUE, VALUEOF, VALUES, VAR, VOID, WILDCARD_CAPTURE, WILDCARD_CAPTURE_NAME_PREFIX, WILDCARD_CAPTURE_NAME_SUFFIX, WILDCARD_CAPTURE_SIGNABLE_NAME_SUFFIX, WILDCARD_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE, ZIP| Constructor and Description |
|---|
FlowContext(FlowContext parent,
ASTNode associatedNode,
boolean inheritNullFieldChecks) |
| Modifier and Type | Method and Description |
|---|---|
BranchLabel |
breakLabel() |
void |
checkExceptionHandlers(TypeBinding[] raisedExceptions,
ASTNode location,
FlowInfo flowInfo,
BlockScope scope) |
void |
checkExceptionHandlers(TypeBinding raisedException,
ASTNode location,
FlowInfo flowInfo,
BlockScope scope) |
void |
checkExceptionHandlers(TypeBinding raisedException,
ASTNode location,
FlowInfo flowInfo,
BlockScope scope,
boolean isExceptionOnAutoClose) |
protected void |
checkUnboxing(Scope scope,
Expression expression,
FlowInfo flowInfo)
During deferred checking re-visit a previously recording unboxing situation.
|
BranchLabel |
continueLabel() |
void |
copyNullCheckedFieldsFrom(FlowContext other) |
void |
expireNullCheckedFieldInfo()
Forget any information about fields that were previously known to be non-null.
|
void |
extendTimeToLiveForNullCheckedField(int t)
If a null checked field has been recorded recently, increase its time to live.
|
FlowContext |
getInitializationContext()
Answer flow context that corresponds to initialization.
|
FlowInfo |
getInitsForFinalBlankInitializationCheck(TypeBinding declaringType,
FlowInfo flowInfo) |
FlowContext |
getLocalParent()
Answer the parent flow context but be careful not to cross the boundary of a nested type,
or null if no such parent exists.
|
FlowContext |
getTargetContextForBreakLabel(char[] labelName) |
FlowContext |
getTargetContextForContinueLabel(char[] labelName) |
FlowContext |
getTargetContextForDefaultBreak() |
FlowContext |
getTargetContextForDefaultContinue() |
FlowContext |
getTargetContextForDefaultYield() |
java.lang.String |
individualToString() |
FlowInfo |
initsOnBreak() |
UnconditionalFlowInfo |
initsOnReturn() |
protected boolean |
internalRecordNullityMismatch(Expression expression,
TypeBinding providedType,
FlowInfo flowInfo,
int nullStatus,
NullAnnotationMatching nullAnnotationStatus,
TypeBinding expectedType,
int checkType) |
boolean |
isBreakable() |
boolean |
isContinuable() |
boolean |
isNonReturningContext() |
boolean |
isNullcheckedFieldAccess(Reference reference)
Is the given field reference equivalent to a reference that is freshly known to be non-null?
Can only return true if CompilerOptions.enableSyntacticNullAnalysisForFields
(implicitly by guards before calls to
recordNullCheckedFieldReference(Reference, int)). |
boolean |
isSubRoutine() |
char[] |
labelName() |
void |
markFinallyNullStatus(LocalVariableBinding local,
int nullStatus)
Record a given null status of a given local variable as it will be seen in the finally block.
|
void |
mergeFinallyNullInfo(FlowInfo flowInfo)
Merge the effect of a statement presumably contained in a try-block,
i.e., record how the collected info will affect the corresponding finally-block.
|
void |
recordAbruptExit()
Record the fact that an abrupt exit has been observed, one of:
- potential exception (incl.
|
void |
recordBreakFrom(FlowInfo flowInfo) |
void |
recordBreakTo(FlowContext targetContext) |
void |
recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo) |
boolean |
recordExitAgainstResource(BlockScope scope,
FlowInfo flowInfo,
FakedTrackingVariable trackingVar,
ASTNode reference)
Record that we found an early exit from a method while a resource is in scope.
|
protected boolean |
recordFinalAssignment(VariableBinding variable,
Reference finalReference) |
void |
recordNullCheckedFieldReference(Reference reference,
int timeToLive)
Record that a reference to a field has been seen in a non-null state.
|
void |
recordNullityMismatch(BlockScope currentScope,
Expression expression,
TypeBinding providedType,
TypeBinding expectedType,
FlowInfo flowInfo,
int nullStatus,
NullAnnotationMatching annotationStatus)
Record that a nullity mismatch was detected against an annotated type reference.
|
protected void |
recordNullReference(LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo nullInfo)
Record a null reference for use by deferred checks.
|
protected void |
recordNullReferenceWithAnnotationStatus(LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo nullInfo,
NullAnnotationMatching nullAnnotationStatus)
Record a null reference for use by deferred checks.
|
protected void |
recordProvidedExpectedTypes(TypeBinding providedType,
TypeBinding expectedType,
int nullCount) |
void |
recordReturnFrom(UnconditionalFlowInfo flowInfo) |
void |
recordSettingFinal(VariableBinding variable,
Reference finalReference,
FlowInfo flowInfo) |
void |
recordUnboxing(Scope scope,
Expression expression,
int nullStatus,
FlowInfo flowInfo)
Either AST analysis or checking of a child flow context has encountered an unboxing situation.
|
void |
recordUsingNullReference(Scope scope,
LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo flowInfo)
Record a null reference for use by deferred checks.
|
SubRoutineStatement |
subroutine() |
java.lang.String |
toString() |
public static final FlowContext NotContinuableContext
public ASTNode associatedNode
public FlowContext parent
public FlowInfo initsOnFinally
public int conditionalLevel
public int tagBits
public TypeBinding[][] providedExpectedTypes
public static final int DEFER_NULL_DIAGNOSTIC
public static final int PREEMPT_NULL_DIAGNOSTIC
public static final int INSIDE_NEGATION
public static final int HIDE_NULL_COMPARISON_WARNING
public static final int HIDE_NULL_COMPARISON_WARNING_MASK
public static final int CAN_ONLY_NULL_NON_NULL
public static final int CAN_ONLY_NULL
public static final int CAN_ONLY_NON_NULL
public static final int MAY_NULL
public static final int ASSIGN_TO_NONNULL
public static final int IN_UNBOXING
public static final int EXIT_RESOURCE
public static final int CHECK_MASK
public static final int IN_COMPARISON_NULL
public static final int IN_COMPARISON_NON_NULL
public static final int IN_ASSIGNMENT
public static final int IN_INSTANCEOF
public static final int CONTEXT_MASK
public FlowContext(FlowContext parent, ASTNode associatedNode, boolean inheritNullFieldChecks)
public void copyNullCheckedFieldsFrom(FlowContext other)
public void recordNullCheckedFieldReference(Reference reference, int timeToLive)
reference - Can be a SingleNameReference, a FieldReference or a QualifiedNameReference resolving to a fieldtimeToLive - control how many expire events are needed to expire this informationpublic void extendTimeToLiveForNullCheckedField(int t)
public void expireNullCheckedFieldInfo()
recordNullCheckedFieldReference(Reference, int)).public boolean isNullcheckedFieldAccess(Reference reference)
recordNullCheckedFieldReference(Reference, int)).public BranchLabel breakLabel()
public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope)
public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope, boolean isExceptionOnAutoClose)
isExceptionOnAutoClose - This is for checking exception handlers for exceptions raised during the
auto close of resources inside a try with resources statement. (Relevant for
source levels 1.7 and above only)public void checkExceptionHandlers(TypeBinding[] raisedExceptions, ASTNode location, FlowInfo flowInfo, BlockScope scope)
public BranchLabel continueLabel()
public FlowInfo getInitsForFinalBlankInitializationCheck(TypeBinding declaringType, FlowInfo flowInfo)
public FlowContext getTargetContextForBreakLabel(char[] labelName)
public FlowContext getTargetContextForContinueLabel(char[] labelName)
public FlowContext getTargetContextForDefaultBreak()
public FlowContext getTargetContextForDefaultYield()
public FlowContext getTargetContextForDefaultContinue()
public FlowContext getInitializationContext()
public FlowContext getLocalParent()
public java.lang.String individualToString()
public FlowInfo initsOnBreak()
public UnconditionalFlowInfo initsOnReturn()
public boolean isBreakable()
public boolean isContinuable()
public boolean isNonReturningContext()
public boolean isSubRoutine()
public char[] labelName()
public void markFinallyNullStatus(LocalVariableBinding local, int nullStatus)
local - the local variable being observednullStatus - the null status of local at the current point in the flowpublic void mergeFinallyNullInfo(FlowInfo flowInfo)
flowInfo - info after executing a statement of the try-block.public void recordAbruptExit()
public void recordBreakFrom(FlowInfo flowInfo)
public void recordBreakTo(FlowContext targetContext)
public void recordContinueFrom(FlowContext innerFlowContext, FlowInfo flowInfo)
public boolean recordExitAgainstResource(BlockScope scope, FlowInfo flowInfo, FakedTrackingVariable trackingVar, ASTNode reference)
scope - enclosing scopeflowInfo - flowInfo at the point of the early exittrackingVar - representation of the resourcereference - the return or throw statement marking the early exitprotected void recordProvidedExpectedTypes(TypeBinding providedType, TypeBinding expectedType, int nullCount)
protected boolean recordFinalAssignment(VariableBinding variable, Reference finalReference)
protected final void recordNullReference(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo)
local - the local variable involved in the checklocation - the location triggering the analysis, for normal null dereference
this is an expression resolving to 'local', for resource leaks it is an
early exit statement.checkType - the checkType against which the check must be performed; one of
CAN_ONLY_NULL, CAN_ONLY_NULL_NON_NULL, MAY_NULL,
CAN_ONLY_NON_NULL, potentially
combined with a context indicator (one of IN_COMPARISON_NULL,
IN_COMPARISON_NON_NULL, IN_ASSIGNMENT or IN_INSTANCEOF).
IN_UNBOXING check can e requested.nullInfo - the null flow info observed at this first visit of location.protected void recordNullReferenceWithAnnotationStatus(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus)
local - the local variable involved in the checklocation - the location triggering the analysis, for normal null dereference
this is an expression resolving to 'local', for resource leaks it is an
early exit statement.checkType - the checkType against which the check must be performed; one of
CAN_ONLY_NULL, CAN_ONLY_NULL_NON_NULL, MAY_NULL,
CAN_ONLY_NON_NULL, potentially
combined with a context indicator (one of IN_COMPARISON_NULL,
IN_COMPARISON_NON_NULL, IN_ASSIGNMENT or IN_INSTANCEOF).
IN_UNBOXING check can e requested.nullInfo - the null flow info observed at this first visit of location.nullAnnotationStatus - if null annotations are analysed this may hold more information
about the exact kind of problem, can be nullpublic void recordUnboxing(Scope scope, Expression expression, int nullStatus, FlowInfo flowInfo)
nullStatus - the status as we know it so far.protected void checkUnboxing(Scope scope, Expression expression, FlowInfo flowInfo)
public void recordReturnFrom(UnconditionalFlowInfo flowInfo)
public void recordSettingFinal(VariableBinding variable, Reference finalReference, FlowInfo flowInfo)
public void recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo)
scope - the scope into which the check is performedlocal - the local variable involved in the checklocation - the location triggering the analysis, for normal null dereference
this is an expression resolving to 'local', for resource leaks it is an
early exit statement.checkType - the status against which the check must be performed; one
of CAN_ONLY_NULL, CAN_ONLY_NULL_NON_NULL, MAY_NULL, potentially
combined with a context indicator (one of IN_COMPARISON_NULL,
IN_COMPARISON_NON_NULL, IN_ASSIGNMENT or IN_INSTANCEOF)
and a bit to indicate whether the reference is being recorded inside an assert,
HIDE_NULL_COMPARISON_WARNINGflowInfo - the flow info at the check point; deferring contexts will
perform supplementary checks against flow info instances that cannot
be known at the time of calling this method (they are influenced by
code that follows the current point)public SubRoutineStatement subroutine()
public java.lang.String toString()
toString in class java.lang.Objectpublic void recordNullityMismatch(BlockScope currentScope, Expression expression, TypeBinding providedType, TypeBinding expectedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching annotationStatus)
currentScope - scope for error reportingexpression - the expression violating the specificationprovidedType - the type of the provided value, i.e., either expression or an element thereof (in ForeachStatements)expectedType - the declared type of the spec'ed variable, for error reporting.flowInfo - the flowInfo observed when visiting expressionnullStatus - the null status of expression at the current locationannotationStatus - status from type annotation analysis, or nullprotected boolean internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType)