public class LoopingFlowContext extends SwitchFlowContext
TypeConstants.BoundCheckStatus, TypeConstants.CloseMethodRecord| Modifier and Type | Field and Description |
|---|---|
BranchLabel |
continueLabel |
UnconditionalFlowInfo |
initsOnContinue |
breakLabel, initsOnBreakASSIGN_TO_NONNULL, associatedNode, CAN_ONLY_NON_NULL, CAN_ONLY_NULL, CAN_ONLY_NULL_NON_NULL, CHECK_MASK, conditionalLevel, CONTEXT_MASK, DEFER_NULL_DIAGNOSTIC, EXIT_RESOURCE, HIDE_NULL_COMPARISON_WARNING, HIDE_NULL_COMPARISON_WARNING_MASK, IN_ASSIGNMENT, IN_COMPARISON_NON_NULL, IN_COMPARISON_NULL, IN_INSTANCEOF, IN_UNBOXING, initsOnFinally, INSIDE_NEGATION, MAY_NULL, NotContinuableContext, parent, PREEMPT_NULL_DIAGNOSTIC, providedExpectedTypes, tagBitsANNOTATION, 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, AUTOWIRED, BEANS, BOOLEAN, BYTE, CAPTURE18, 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, 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, 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, FRAMEWORK, GETCLASS, GOOGLE, GUAVA_CLOSEABLES, HASHCODE, INIT, INJECT_PACKAGE, INJECT_TYPE, INT, INTERNAL, INVOKE, IO, IS_NOTNULL, IS_TRUE, ITYPEBINDING, JAVA, 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_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_OBJECT, JAVA_LANG_OVERRIDE, JAVA_LANG_REFLECT_CONSTRUCTOR, JAVA_LANG_REFLECT_FIELD, JAVA_LANG_REFLECT_METHOD, 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_COLLECTION, JAVA_UTIL_ITERATOR, JAVA_UTIL_OBJECTS, JAVA_UTIL_ZIP_WRAPPER_CLOSEABLES, JAVAX, JAVAX_ANNOTATION_INJECT_INJECT, JAVAX_RMI_CORBA_STUB, JDT, JUNIT, JUNIT_FRAMEWORK_ASSERT, LAMBDA_TYPE, LANG, LANG3, LENGTH, LONG, LOOKUP, MAIN, 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_SPRING_AUTOWIRED, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, REQUIRE_NON_NULL, REQUIRED, RESOURCE_FREE_CLOSEABLE_STREAM, RUNTIME, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, 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, TYPE, TYPE_PARAMETER_TARGET, TYPE_USE_TARGET, TYPEBINDING, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RUNTIME, UPPER_SOURCE, UTIL, VALIDATE_CLASS, VALUE, VALUEOF, VALUES, 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 |
|---|
LoopingFlowContext(FlowContext parent,
FlowInfo upstreamNullFlowInfo,
ASTNode associatedNode,
BranchLabel breakLabel,
BranchLabel continueLabel,
Scope associatedScope,
boolean isPreTest) |
| Modifier and Type | Method and Description |
|---|---|
void |
complainOnDeferredFinalChecks(BlockScope scope,
FlowInfo flowInfo)
Perform deferred checks relative to final variables duplicate initialization
of lack of initialization.
|
void |
complainOnDeferredNullChecks(BlockScope scope,
FlowInfo callerFlowInfo)
Perform deferred checks relative to the null status of local variables.
|
void |
complainOnDeferredNullChecks(BlockScope scope,
FlowInfo callerFlowInfo,
boolean updateInitsOnBreak) |
BranchLabel |
continueLabel() |
boolean |
hasEscapingExceptions() |
java.lang.String |
individualToString() |
protected boolean |
internalRecordNullityMismatch(Expression expression,
TypeBinding providedType,
FlowInfo flowInfo,
int nullStatus,
TypeBinding expectedType,
int checkType) |
boolean |
isContinuable() |
boolean |
isContinuedTo() |
void |
recordBreakTo(FlowContext targetContext) |
void |
recordCatchContextOfEscapingException(ExceptionHandlingFlowContext catchingContext,
ReferenceBinding caughtException,
FlowInfo exceptionInfo) |
void |
recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo) |
boolean |
recordExitAgainstResource(BlockScope scope,
FlowInfo flowInfo,
FakedTrackingVariable trackingVar,
ASTNode reference)
Record the fact that we see an early exit (in 'reference') while 'trackingVar' is in scope and may be unclosed.
|
protected boolean |
recordFinalAssignment(VariableBinding binding,
Reference finalAssignment) |
protected void |
recordNullReference(LocalVariableBinding local,
ASTNode expression,
int checkType,
FlowInfo nullInfo)
Record a null reference for use by deferred checks.
|
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.
|
void |
simulateThrowAfterLoopBack(FlowInfo flowInfo) |
breakLabel, isBreakable, recordBreakFromcheckExceptionHandlers, checkExceptionHandlers, checkExceptionHandlers, checkUnboxing, expireNullCheckedFieldInfo, extendTimeToLiveForNullCheckedField, getInitializationContext, getInitsForFinalBlankInitializationCheck, getLocalParent, getTargetContextForBreakLabel, getTargetContextForContinueLabel, getTargetContextForDefaultBreak, getTargetContextForDefaultContinue, initsOnBreak, initsOnReturn, isNonReturningContext, isNullcheckedFieldAccess, isSubRoutine, labelName, markFinallyNullStatus, mergeFinallyNullInfo, recordAbruptExit, recordNullCheckedFieldReference, recordNullityMismatch, recordProvidedExpectedTypes, recordReturnFrom, recordSettingFinal, subroutine, toStringpublic BranchLabel continueLabel
public UnconditionalFlowInfo initsOnContinue
public LoopingFlowContext(FlowContext parent, FlowInfo upstreamNullFlowInfo, ASTNode associatedNode, BranchLabel breakLabel, BranchLabel continueLabel, Scope associatedScope, boolean isPreTest)
public void complainOnDeferredFinalChecks(BlockScope scope, FlowInfo flowInfo)
scope - the scope to which this context is associatedflowInfo - the flow info against which checks must be performedpublic void complainOnDeferredNullChecks(BlockScope scope, FlowInfo callerFlowInfo)
scope - the scope to which this context is associatedcallerFlowInfo - the flow info against which checks must be performedpublic void complainOnDeferredNullChecks(BlockScope scope, FlowInfo callerFlowInfo, boolean updateInitsOnBreak)
public BranchLabel continueLabel()
continueLabel in class FlowContextpublic java.lang.String individualToString()
individualToString in class SwitchFlowContextpublic boolean isContinuable()
isContinuable in class FlowContextpublic boolean isContinuedTo()
public void recordBreakTo(FlowContext targetContext)
recordBreakTo in class FlowContextpublic void recordContinueFrom(FlowContext innerFlowContext, FlowInfo flowInfo)
recordContinueFrom in class FlowContextprotected boolean recordFinalAssignment(VariableBinding binding, Reference finalAssignment)
recordFinalAssignment in class FlowContextprotected void recordNullReference(LocalVariableBinding local, ASTNode expression, int checkType, FlowInfo nullInfo)
FlowContextrecordNullReference in class FlowContextlocal - the local variable involved in the checkexpression - 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 FlowContext.IN_COMPARISON_NULL,
FlowContext.IN_COMPARISON_NON_NULL, FlowContext.IN_ASSIGNMENT or FlowContext.IN_INSTANCEOF).
FlowContext.IN_UNBOXING check can e requested.nullInfo - the null flow info observed at this first visit of location.public void recordUnboxing(Scope scope, Expression expression, int nullStatus, FlowInfo flowInfo)
FlowContextrecordUnboxing in class FlowContextnullStatus - the status as we know it so far.public boolean recordExitAgainstResource(BlockScope scope, FlowInfo flowInfo, FakedTrackingVariable trackingVar, ASTNode reference)
recordExitAgainstResource in class FlowContextscope - enclosing scopeflowInfo - flowInfo at the point of the early exittrackingVar - representation of the resourcereference - the return or throw statement marking the early exitpublic void recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo)
FlowContextrecordUsingNullReference in class FlowContextscope - 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 FlowContext.IN_COMPARISON_NULL,
FlowContext.IN_COMPARISON_NON_NULL, FlowContext.IN_ASSIGNMENT or FlowContext.IN_INSTANCEOF)
and a bit to indicate whether the reference is being recorded inside an assert,
FlowContext.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 void simulateThrowAfterLoopBack(FlowInfo flowInfo)
public void recordCatchContextOfEscapingException(ExceptionHandlingFlowContext catchingContext, ReferenceBinding caughtException, FlowInfo exceptionInfo)
public boolean hasEscapingExceptions()
protected boolean internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, TypeBinding expectedType, int checkType)
internalRecordNullityMismatch in class FlowContext