org.aspectj.org.eclipse.jdt.internal.compiler.flow
Class LoopingFlowContext
java.lang.Object
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext
org.aspectj.org.eclipse.jdt.internal.compiler.flow.SwitchFlowContext
org.aspectj.org.eclipse.jdt.internal.compiler.flow.LoopingFlowContext
- All Implemented Interfaces:
- TypeConstants
public class LoopingFlowContext
- extends SwitchFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
| Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext |
ASSIGN_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, tagBits |
| Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants |
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, 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, 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_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, MISMATCH, NOT_NULL, NULL, OBJECT, OK, 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, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, REQUIRE_NON_NULL, RESOURCE_FREE_CLOSEABLE_STREAM, RUNTIME, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, 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, UNCHECKED, 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_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE, ZIP |
|
Method Summary |
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. |
BranchLabel |
continueLabel()
|
boolean |
hasEscapingExceptions()
|
java.lang.String |
individualToString()
|
protected boolean |
internalRecordNullityMismatch(Expression expression,
TypeBinding providedType,
int nullStatus,
TypeBinding expectedType,
int checkType)
|
boolean |
isContinuable()
|
boolean |
isContinuedTo()
|
void |
recordBreakTo(FlowContext targetContext)
|
void |
recordCatchContextOfEscapingException(ExceptionHandlingFlowContext catchingContext,
ReferenceBinding caughtException)
|
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)
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)
|
| Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext |
checkExceptionHandlers, checkExceptionHandlers, checkExceptionHandlers, checkUnboxing, expireNullCheckedFieldInfo, extendTimeToLiveForNullCheckedField, getInitsForFinalBlankInitializationCheck, getLocalParent, getTargetContextForBreakLabel, getTargetContextForContinueLabel, getTargetContextForDefaultBreak, getTargetContextForDefaultContinue, initsOnBreak, initsOnReturn, isNonReturningContext, isNullcheckedFieldAccess, isSubRoutine, labelName, markFinallyNullStatus, mergeFinallyNullInfo, recordAbruptExit, recordNullCheckedFieldReference, recordNullityMismatch, recordProvidedExpectedTypes, recordReturnFrom, recordSettingFinal, subroutine, toString |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
continueLabel
public BranchLabel continueLabel
initsOnContinue
public UnconditionalFlowInfo initsOnContinue
LoopingFlowContext
public LoopingFlowContext(FlowContext parent,
FlowInfo upstreamNullFlowInfo,
ASTNode associatedNode,
BranchLabel breakLabel,
BranchLabel continueLabel,
Scope associatedScope,
boolean isPreTest)
complainOnDeferredFinalChecks
public void complainOnDeferredFinalChecks(BlockScope scope,
FlowInfo flowInfo)
- Perform deferred checks relative to final variables duplicate initialization
of lack of initialization.
- Parameters:
scope - the scope to which this context is associatedflowInfo - the flow info against which checks must be performed
complainOnDeferredNullChecks
public void complainOnDeferredNullChecks(BlockScope scope,
FlowInfo callerFlowInfo)
- Perform deferred checks relative to the null status of local variables.
- Parameters:
scope - the scope to which this context is associatedcallerFlowInfo - the flow info against which checks must be performed
continueLabel
public BranchLabel continueLabel()
- Overrides:
continueLabel in class FlowContext
individualToString
public java.lang.String individualToString()
- Overrides:
individualToString in class SwitchFlowContext
isContinuable
public boolean isContinuable()
- Overrides:
isContinuable in class FlowContext
isContinuedTo
public boolean isContinuedTo()
recordBreakTo
public void recordBreakTo(FlowContext targetContext)
- Overrides:
recordBreakTo in class FlowContext
recordContinueFrom
public void recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo)
- Overrides:
recordContinueFrom in class FlowContext
recordFinalAssignment
protected boolean recordFinalAssignment(VariableBinding binding,
Reference finalAssignment)
- Overrides:
recordFinalAssignment in class FlowContext
recordNullReference
protected void recordNullReference(LocalVariableBinding local,
ASTNode expression,
int checkType)
- Description copied from class:
FlowContext
- Record a null reference for use by deferred checks. Only looping or
finally contexts really record that information. Other contexts
immediately check for unboxing.
- Overrides:
recordNullReference in class FlowContext
- Parameters:
local - 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).
Alternatively, a FlowContext.IN_UNBOXING check can e requested.
recordUnboxing
public void recordUnboxing(Scope scope,
Expression expression,
int nullStatus,
FlowInfo flowInfo)
- Description copied from class:
FlowContext
- Either AST analysis or checking of a child flow context has encountered an unboxing situation.
Record this fact for handling at an appropriate point in time.
- Overrides:
recordUnboxing in class FlowContext
nullStatus - the status as we know it so far.
recordExitAgainstResource
public 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.
- Overrides:
recordExitAgainstResource in class FlowContext
- Parameters:
scope - enclosing scopeflowInfo - flowInfo at the point of the early exittrackingVar - representation of the resourcereference - the return or throw statement marking the early exit
- Returns:
- true if the situation has been handled by this flow context.
recordUsingNullReference
public void recordUsingNullReference(Scope scope,
LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo flowInfo)
- Description copied from class:
FlowContext
- Record a null reference for use by deferred checks. Only looping or
finally contexts really record that information. The context may
emit an error immediately depending on the status of local against
flowInfo and its nature (only looping of finally contexts defer part
of the checks; nonetheless, contexts that are nested into a looping or a
finally context get affected and delegate some checks to their enclosing
context).
- Overrides:
recordUsingNullReference in class FlowContext
- Parameters:
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 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)
simulateThrowAfterLoopBack
public void simulateThrowAfterLoopBack(FlowInfo flowInfo)
recordCatchContextOfEscapingException
public void recordCatchContextOfEscapingException(ExceptionHandlingFlowContext catchingContext,
ReferenceBinding caughtException)
hasEscapingExceptions
public boolean hasEscapingExceptions()
internalRecordNullityMismatch
protected boolean internalRecordNullityMismatch(Expression expression,
TypeBinding providedType,
int nullStatus,
TypeBinding expectedType,
int checkType)
- Overrides:
internalRecordNullityMismatch in class FlowContext