org.eclipse.jdt.internal.compiler.flow
Class FinallyFlowContext

java.lang.Object
  extended by org.eclipse.jdt.internal.compiler.flow.FlowContext
      extended by org.eclipse.jdt.internal.compiler.flow.FinallyFlowContext
All Implemented Interfaces:
TypeConstants

public class FinallyFlowContext
extends FlowContext

Reflects the context of code analysis, keeping track of enclosing try statements, exception handlers, etc...


Field Summary
 
Fields inherited from class 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, 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, initsOnFinally, MAY_NULL, NotContinuableContext, parent, PREEMPT_NULL_DIAGNOSTIC, providedExpectedTypes, tagBits
 
Fields inherited from interface org.eclipse.jdt.internal.compiler.lookup.TypeConstants
ANNOTATION, ANNOTATION_PREFIX, ANNOTATION_SUFFIX, ANONYM_PREFIX, ANONYM_SUFFIX, BOOLEAN, BYTE, 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, CLINIT, CLONE, CLOSE, CONSTRAINT_EQUAL, CONSTRAINT_EXTENDS, CONSTRAINT_SUPER, CORE, DOUBLE, ECLIPSE, EQUALS, FLOAT, GETCLASS, HASHCODE, INIT, INT, INVOKE, IO, 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_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_ILLEGALARGUMENTEXCEPTION, JAVA_LANG_INTEGER, JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, 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_UTIL_COLLECTION, JAVA_UTIL_ITERATOR, JAVA_UTIL_ZIP_WRAPPER_CLOSEABLES, JAVAX, JAVAX_RMI_CORBA_STUB, LANG, LENGTH, LONG, MAIN, MISMATCH, NULL, OBJECT, OK, ORG, ORG_ECLIPSE_CORE_RUNTIME_ASSERT, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, 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, UNCHECKED, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RUNTIME, UPPER_SOURCE, UTIL, 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
FinallyFlowContext(FlowContext parent, ASTNode associatedNode)
           
 
Method Summary
 void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope)
          Given some contextual initialization info (derived from a try block or a catch block), this code will check that the subroutine context does not also initialize a final variable potentially set redundantly.
 java.lang.String individualToString()
           
protected  boolean internalRecordNullityMismatch(Expression expression, TypeBinding providedType, int nullStatus, TypeBinding expectedType, int checkType)
           
 boolean isSubRoutine()
           
protected  boolean recordFinalAssignment(VariableBinding binding, Reference finalAssignment)
           
protected  void recordNullReference(LocalVariableBinding local, ASTNode expression, int status)
          Record a null reference for use by deferred checks.
 void recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo)
          Record a null reference for use by deferred checks.
 
Methods inherited from class org.eclipse.jdt.internal.compiler.flow.FlowContext
breakLabel, checkExceptionHandlers, checkExceptionHandlers, checkExceptionHandlers, continueLabel, getInitsForFinalBlankInitializationCheck, getLocalParent, getTargetContextForBreakLabel, getTargetContextForContinueLabel, getTargetContextForDefaultBreak, getTargetContextForDefaultContinue, initsOnBreak, initsOnReturn, isBreakable, isContinuable, isNonReturningContext, labelName, recordBreakFrom, recordBreakTo, recordContinueFrom, recordExitAgainstResource, recordNullityMismatch, recordProvidedExpectedTypes, recordReturnFrom, recordSettingFinal, subroutine, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

FinallyFlowContext

public FinallyFlowContext(FlowContext parent,
                          ASTNode associatedNode)
Method Detail

complainOnDeferredChecks

public void complainOnDeferredChecks(FlowInfo flowInfo,
                                     BlockScope scope)
Given some contextual initialization info (derived from a try block or a catch block), this code will check that the subroutine context does not also initialize a final variable potentially set redundantly.


individualToString

public java.lang.String individualToString()
Overrides:
individualToString in class FlowContext

isSubRoutine

public boolean isSubRoutine()
Overrides:
isSubRoutine in class FlowContext

recordFinalAssignment

protected boolean recordFinalAssignment(VariableBinding binding,
                                        Reference finalAssignment)
Overrides:
recordFinalAssignment in class FlowContext

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)

recordNullReference

protected void recordNullReference(LocalVariableBinding local,
                                   ASTNode expression,
                                   int status)
Description copied from class: FlowContext
Record a null reference for use by deferred checks. Only looping or finally contexts really record that information.

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.
status - the status 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)

internalRecordNullityMismatch

protected boolean internalRecordNullityMismatch(Expression expression,
                                                TypeBinding providedType,
                                                int nullStatus,
                                                TypeBinding expectedType,
                                                int checkType)
Overrides:
internalRecordNullityMismatch in class FlowContext