org.aspectj.org.eclipse.jdt.internal.compiler.flow
Class LoopingFlowContext

java.lang.Object
  extended by org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext
      extended by org.aspectj.org.eclipse.jdt.internal.compiler.flow.SwitchFlowContext
          extended by 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...


Nested Class Summary
 
Nested classes/interfaces inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants
TypeConstants.CloseMethodRecord
 
Field Summary
 BranchLabel continueLabel
           
 UnconditionalFlowInfo initsOnContinue
           
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.SwitchFlowContext
breakLabel, initsOnBreak
 
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
 
Constructor Summary
LoopingFlowContext(FlowContext parent, FlowInfo upstreamNullFlowInfo, ASTNode associatedNode, BranchLabel breakLabel, BranchLabel continueLabel, Scope associatedScope, boolean isPreTest)
           
 
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.SwitchFlowContext
breakLabel, isBreakable, recordBreakFrom
 
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
 

Field Detail

continueLabel

public BranchLabel continueLabel

initsOnContinue

public UnconditionalFlowInfo initsOnContinue
Constructor Detail

LoopingFlowContext

public LoopingFlowContext(FlowContext parent,
                          FlowInfo upstreamNullFlowInfo,
                          ASTNode associatedNode,
                          BranchLabel breakLabel,
                          BranchLabel continueLabel,
                          Scope associatedScope,
                          boolean isPreTest)
Method Detail

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 associated
flowInfo - 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 associated
callerFlowInfo - 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 check
expression - 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 scope
flowInfo - flowInfo at the point of the early exit
trackingVar - representation of the resource
reference - 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 performed
local - the local variable involved in the check
location - 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_WARNING
flowInfo - 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