Class FinallyFlowContext
java.lang.Object
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext
org.aspectj.org.eclipse.jdt.internal.compiler.flow.TryFlowContext
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FinallyFlowContext
- All Implemented Interfaces:
TypeConstants
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.BoundCheckStatus, TypeConstants.CloseMethodRecord, TypeConstants.DangerousMethod
-
Field Summary
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.TryFlowContext
outerTryContext
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, NonLocalGotoThroughSwitchContext, 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, API, ASSERT_CLASS, ASSERT_FALSE, ASSERT_NOTNULL, ASSERT_NULL, ASSERT_TRUE, ASSERTIONS_CLASS, 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, ESSENTIAL_API, FACTORY, FILTER, FLOAT, FLUENT_RESOURCE_CLASSES, FOR_REMOVAL, FRAMEWORK, GET, GETCLASS, GOOGLE, GUAVA_CLOSEABLES, HASHCODE, IMPLEMENTS, INDEX_OF, INIT, INJECT_PACKAGE, INJECT_TYPE, INT, INTERNAL, INVOKE, IO, IS_INSTANCE, IS_NOTNULL, IS_NULL, IS_TRUE, ITYPEBINDING, JAKARTA, JAKARTA_ANNOTATION_INJECT_INJECT, 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_CONSTANT_CLASSDESC, JAVA_LANG_DEPRECATED, JAVA_LANG_DOUBLE, JAVA_LANG_ENUM, JAVA_LANG_ENUM_ENUMDESC, 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_CONSTANTBOOTSTRAP, JAVA_LANG_INVOKE_LAMBDAMETAFACTORY, JAVA_LANG_INVOKE_METHODHANDLE, JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLES, JAVA_LANG_INVOKE_SERIALIZEDLAMBDA, JAVA_LANG_INVOKE_STRING_CONCAT_FACTORY, JAVA_LANG_INVOKE_VARHANDLE, 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_RUNTIME_SWITCHBOOTSTRAPS, JAVA_LANG_RUNTIME_TEMPLATERUNTIME, JAVA_LANG_RUNTIMEEXCEPTION, JAVA_LANG_SAFEVARARGS, JAVA_LANG_SHORT, JAVA_LANG_STRING, JAVA_LANG_STRING_TEMPLATE_STR, JAVA_LANG_STRINGBUFFER, JAVA_LANG_STRINGBUILDER, JAVA_LANG_STRINGTEMPLATE, JAVA_LANG_STRINGTEMPLATE_PROCESSOR, 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_STREAM__STREAM, JAVA_UTIL_ZIP_WRAPPER_CLOSEABLES, JAVAC, JAVAX, JAVAX_ANNOTATION_INJECT_INJECT, JAVAX_RMI_CORBA_STUB, JDK, JDK_INTERNAL_JAVAC_PREVIEW_FEATURE, JDK_INTERNAL_PREVIEW_FEATURE, JDK_INTERNAL_VALUEBASED, JDT, JUNIT, JUNIT_FRAMEWORK_ASSERT, JUPITER, KEYWORD_EXTENDS, 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, NEXT, NIO, NON_NULL, NOT_NULL, NULL, OBJECT, ONE_UTIL_STREAMEX, 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_JUPITER_API_ASSERTIONS, ORG_JUNIT_METHOD_SOURCE, ORG_SPRING_AUTOWIRED, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, PARAMS, PERMITS, PROVIDER, READOBJECT, READRESOLVE, RECORD_CLASS, RECORD_RESTRICTED_IDENTIFIER, REFLECT, REMOVE, REMOVE_ALL, REQUIRE_NON_NULL, REQUIRED, RESOURCE_FREE_CLOSEABLE_J_U_STREAMS, RESOURCE_FREE_CLOSEABLE_STREAMEX, RETAIN_ALL, RUNTIME, SEALED, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, SINCE, SPRING, STRING_CONCAT_MARKER_1, 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, YIELD, ZIP
-
Constructor Summary
ConstructorDescriptionFinallyFlowContext
(FlowContext parent, ASTNode associatedNode, ExceptionHandlingFlowContext tryContext) -
Method Summary
Modifier and TypeMethodDescriptionvoid
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.protected boolean
internalRecordNullityMismatch
(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType) boolean
protected boolean
recordFinalAssignment
(VariableBinding binding, Reference finalAssignment) protected void
recordNullReferenceWithAnnotationStatus
(LocalVariableBinding local, ASTNode expression, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) 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.Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.TryFlowContext
markFinallyNullStatus, mergeFinallyNullInfo
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext
breakLabel, checkExceptionHandlers, checkExceptionHandlers, checkExceptionHandlers, checkUnboxing, continueLabel, copyNullCheckedFieldsFrom, expireNullCheckedFieldInfo, extendTimeToLiveForNullCheckedField, getInitializationContext, getInitsForFinalBlankInitializationCheck, getLocalParent, getTargetContextForBreakLabel, getTargetContextForContinueLabel, getTargetContextForDefaultBreak, getTargetContextForDefaultContinue, getTargetContextForYield, initsOnBreak, initsOnReturn, isBreakable, isContinuable, isNonReturningContext, isNullcheckedFieldAccess, labelName, nullCheckedFields, recordAbruptExit, recordBreakFrom, recordBreakTo, recordContinueFrom, recordExitAgainstResource, recordNullCheckedFieldReference, recordNullityMismatch, recordNullReference, recordProvidedExpectedTypes, recordReturnFrom, recordSettingFinal, subroutine, toString
-
Field Details
-
tryContext
-
-
Constructor Details
-
FinallyFlowContext
public FinallyFlowContext(FlowContext parent, ASTNode associatedNode, ExceptionHandlingFlowContext tryContext)
-
-
Method Details
-
complainOnDeferredChecks
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
- Overrides:
individualToString
in classFlowContext
-
isSubRoutine
public boolean isSubRoutine()- Overrides:
isSubRoutine
in classFlowContext
-
recordFinalAssignment
- Overrides:
recordFinalAssignment
in classFlowContext
-
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 classFlowContext
- 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 ofCAN_ONLY_NULL
,CAN_ONLY_NULL_NON_NULL
,MAY_NULL
, potentially combined with a context indicator (one ofFlowContext.IN_COMPARISON_NULL
,FlowContext.IN_COMPARISON_NON_NULL
,FlowContext.IN_ASSIGNMENT
orFlowContext.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)
-
recordNullReferenceWithAnnotationStatus
protected void recordNullReferenceWithAnnotationStatus(LocalVariableBinding local, ASTNode expression, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) 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:
recordNullReferenceWithAnnotationStatus
in classFlowContext
- 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 ofCAN_ONLY_NULL
,CAN_ONLY_NULL_NON_NULL
,MAY_NULL
,CAN_ONLY_NON_NULL
, potentially combined with a context indicator (one ofFlowContext.IN_COMPARISON_NULL
,FlowContext.IN_COMPARISON_NON_NULL
,FlowContext.IN_ASSIGNMENT
orFlowContext.IN_INSTANCEOF
).
Alternatively, aFlowContext.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 benull
-
recordUnboxing
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 classFlowContext
- Parameters:
nullStatus
- the status as we know it so far.
-
internalRecordNullityMismatch
protected boolean internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType) - Overrides:
internalRecordNullityMismatch
in classFlowContext
-