Class FlowContext
java.lang.Object
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext
- All Implemented Interfaces:
TypeConstants
- Direct Known Subclasses:
ExceptionHandlingFlowContext
,SwitchFlowContext
,TryFlowContext
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
Modifier and TypeFieldDescriptionstatic final int
static final int
static final int
static final int
static final int
int
Used to record whether effects in a try block affect the finally-block conditionally or unconditionally.static final int
static final int
static final int
static final int
used to hide null comparison related warnings inside assert statementsstatic final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final FlowContext
static final FlowContext
static final int
TypeBinding[][]
int
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
ConstructorDescriptionFlowContext
(FlowContext parent, ASTNode associatedNode, boolean inheritNullFieldChecks) -
Method Summary
Modifier and TypeMethodDescriptionvoid
checkExceptionHandlers
(TypeBinding[] raisedExceptions, ASTNode location, FlowInfo flowInfo, BlockScope scope) void
checkExceptionHandlers
(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope) void
checkExceptionHandlers
(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope, boolean isExceptionOnAutoClose) protected void
checkUnboxing
(Scope scope, Expression expression, FlowInfo flowInfo) During deferred checking re-visit a previously recording unboxing situation.void
void
Forget any information about fields that were previously known to be non-null.void
If a null checked field has been recorded recently, increase its time to live.Answer flow context that corresponds to initialization.getInitsForFinalBlankInitializationCheck
(TypeBinding declaringType, FlowInfo flowInfo) Answer the parent flow context but be careful not to cross the boundary of a nested type, or null if no such parent exists.getTargetContextForBreakLabel
(char[] labelName) getTargetContextForContinueLabel
(char[] labelName) getTargetContextForYield
(boolean requireExpression) protected boolean
internalRecordNullityMismatch
(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType) boolean
boolean
boolean
boolean
isNullcheckedFieldAccess
(Reference reference) Is the given field reference equivalent to a reference that is freshly known to be non-null? Can only return true if CompilerOptions.enableSyntacticNullAnalysisForFields (implicitly by guards before calls torecordNullCheckedFieldReference(Reference, int)
).boolean
char[]
void
markFinallyNullStatus
(LocalVariableBinding local, int nullStatus) Record a given null status of a given local variable as it will be seen in the finally block.void
mergeFinallyNullInfo
(FlowInfo flowInfo) Merge the effect of a statement presumably contained in a try-block, i.e., record how the collected info will affect the corresponding finally-block.void
Record the fact that an abrupt exit has been observed, one of: - potential exception (incl.void
recordBreakFrom
(FlowInfo flowInfo) void
recordBreakTo
(FlowContext targetContext) void
recordContinueFrom
(FlowContext innerFlowContext, FlowInfo flowInfo) boolean
recordExitAgainstResource
(BlockScope scope, FlowInfo flowInfo, FakedTrackingVariable trackingVar, ASTNode reference) Record that we found an early exit from a method while a resource is in scope.protected boolean
recordFinalAssignment
(VariableBinding variable, Reference finalReference) void
recordNullCheckedFieldReference
(Reference reference, int timeToLive) Record that a reference to a field has been seen in a non-null state.void
recordNullityMismatch
(BlockScope currentScope, Expression expression, TypeBinding providedType, TypeBinding expectedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching annotationStatus) Record that a nullity mismatch was detected against an annotated type reference.protected final void
recordNullReference
(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo) Record a null reference for use by deferred checks.protected void
recordNullReferenceWithAnnotationStatus
(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) Record a null reference for use by deferred checks.protected void
recordProvidedExpectedTypes
(TypeBinding providedType, TypeBinding expectedType, int nullCount) void
recordReturnFrom
(UnconditionalFlowInfo flowInfo) void
recordSettingFinal
(VariableBinding variable, Reference finalReference, FlowInfo flowInfo) 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.toString()
-
Field Details
-
NotContinuableContext
-
NonLocalGotoThroughSwitchContext
-
associatedNode
-
parent
-
initsOnFinally
-
conditionalLevel
public int conditionalLevelUsed to record whether effects in a try block affect the finally-block conditionally or unconditionally. -1 means: no effect, 0 means: unconditional effect, > 0 means levels of nested conditional structures. -
tagBits
public int tagBits -
providedExpectedTypes
-
DEFER_NULL_DIAGNOSTIC
public static final int DEFER_NULL_DIAGNOSTIC- See Also:
-
PREEMPT_NULL_DIAGNOSTIC
public static final int PREEMPT_NULL_DIAGNOSTIC- See Also:
-
INSIDE_NEGATION
public static final int INSIDE_NEGATION- See Also:
-
HIDE_NULL_COMPARISON_WARNING
public static final int HIDE_NULL_COMPARISON_WARNINGused to hide null comparison related warnings inside assert statements- See Also:
-
HIDE_NULL_COMPARISON_WARNING_MASK
public static final int HIDE_NULL_COMPARISON_WARNING_MASK- See Also:
-
CAN_ONLY_NULL_NON_NULL
public static final int CAN_ONLY_NULL_NON_NULL- See Also:
-
CAN_ONLY_NULL
public static final int CAN_ONLY_NULL- See Also:
-
CAN_ONLY_NON_NULL
public static final int CAN_ONLY_NON_NULL- See Also:
-
MAY_NULL
public static final int MAY_NULL- See Also:
-
ASSIGN_TO_NONNULL
public static final int ASSIGN_TO_NONNULL- See Also:
-
IN_UNBOXING
public static final int IN_UNBOXING- See Also:
-
EXIT_RESOURCE
public static final int EXIT_RESOURCE- See Also:
-
CHECK_MASK
public static final int CHECK_MASK- See Also:
-
IN_COMPARISON_NULL
public static final int IN_COMPARISON_NULL- See Also:
-
IN_COMPARISON_NON_NULL
public static final int IN_COMPARISON_NON_NULL- See Also:
-
IN_ASSIGNMENT
public static final int IN_ASSIGNMENT- See Also:
-
IN_INSTANCEOF
public static final int IN_INSTANCEOF- See Also:
-
CONTEXT_MASK
public static final int CONTEXT_MASK- See Also:
-
-
Constructor Details
-
FlowContext
-
-
Method Details
-
copyNullCheckedFieldsFrom
-
recordNullCheckedFieldReference
Record that a reference to a field has been seen in a non-null state.- Parameters:
reference
- Can be a SingleNameReference, a FieldReference or a QualifiedNameReference resolving to a fieldtimeToLive
- control how many expire events are needed to expire this information
-
nullCheckedFields
-
extendTimeToLiveForNullCheckedField
public void extendTimeToLiveForNullCheckedField(int t) If a null checked field has been recorded recently, increase its time to live. -
expireNullCheckedFieldInfo
public void expireNullCheckedFieldInfo()Forget any information about fields that were previously known to be non-null. Will only cause any effect if CompilerOptions.enableSyntacticNullAnalysisForFields (implicitly by guards before calls torecordNullCheckedFieldReference(Reference, int)
). -
isNullcheckedFieldAccess
Is the given field reference equivalent to a reference that is freshly known to be non-null? Can only return true if CompilerOptions.enableSyntacticNullAnalysisForFields (implicitly by guards before calls torecordNullCheckedFieldReference(Reference, int)
). -
breakLabel
-
checkExceptionHandlers
public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope) -
checkExceptionHandlers
public void checkExceptionHandlers(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope, boolean isExceptionOnAutoClose) - Parameters:
isExceptionOnAutoClose
- This is for checking exception handlers for exceptions raised during the auto close of resources inside a try with resources statement. (Relevant for source levels 1.7 and above only)
-
checkExceptionHandlers
public void checkExceptionHandlers(TypeBinding[] raisedExceptions, ASTNode location, FlowInfo flowInfo, BlockScope scope) -
continueLabel
-
getInitsForFinalBlankInitializationCheck
public FlowInfo getInitsForFinalBlankInitializationCheck(TypeBinding declaringType, FlowInfo flowInfo) -
getTargetContextForBreakLabel
-
getTargetContextForContinueLabel
-
getTargetContextForDefaultBreak
-
getTargetContextForYield
-
getTargetContextForDefaultContinue
-
getInitializationContext
Answer flow context that corresponds to initialization. Suitably override in subtypes. -
getLocalParent
Answer the parent flow context but be careful not to cross the boundary of a nested type, or null if no such parent exists. -
individualToString
-
initsOnBreak
-
initsOnReturn
-
isBreakable
public boolean isBreakable() -
isContinuable
public boolean isContinuable() -
isNonReturningContext
public boolean isNonReturningContext() -
isSubRoutine
public boolean isSubRoutine() -
labelName
public char[] labelName() -
markFinallyNullStatus
Record a given null status of a given local variable as it will be seen in the finally block.- Parameters:
local
- the local variable being observednullStatus
- the null status of local at the current point in the flow
-
mergeFinallyNullInfo
Merge the effect of a statement presumably contained in a try-block, i.e., record how the collected info will affect the corresponding finally-block. Precondition: caller has checked that initsOnFinally != null.- Parameters:
flowInfo
- info after executing a statement of the try-block.
-
recordAbruptExit
public void recordAbruptExit()Record the fact that an abrupt exit has been observed, one of: - potential exception (incl. unchecked exceptions) - break - continue - return -
recordBreakFrom
-
recordBreakTo
-
recordContinueFrom
-
recordExitAgainstResource
public boolean recordExitAgainstResource(BlockScope scope, FlowInfo flowInfo, FakedTrackingVariable trackingVar, ASTNode reference) Record that we found an early exit from a method while a resource is in scope.- 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.
-
recordProvidedExpectedTypes
protected void recordProvidedExpectedTypes(TypeBinding providedType, TypeBinding expectedType, int nullCount) -
recordFinalAssignment
-
recordNullReference
protected final void recordNullReference(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo) Record a null reference for use by deferred checks. Only looping or finally contexts really record that information. Other contexts immediately check for unboxing.- Parameters:
local
- 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 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 ofIN_COMPARISON_NULL
,IN_COMPARISON_NON_NULL
,IN_ASSIGNMENT
orIN_INSTANCEOF
).
Alternatively, aIN_UNBOXING
check can e requested.nullInfo
- the null flow info observed at this first visit of location.
-
recordNullReferenceWithAnnotationStatus
protected void recordNullReferenceWithAnnotationStatus(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) Record a null reference for use by deferred checks. Only looping or finally contexts really record that information. Other contexts immediately check for unboxing.- Parameters:
local
- 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 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 ofIN_COMPARISON_NULL
,IN_COMPARISON_NON_NULL
,IN_ASSIGNMENT
orIN_INSTANCEOF
).
Alternatively, aIN_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
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.- Parameters:
nullStatus
- the status as we know it so far.
-
checkUnboxing
During deferred checking re-visit a previously recording unboxing situation. -
recordReturnFrom
-
recordSettingFinal
public void recordSettingFinal(VariableBinding variable, Reference finalReference, FlowInfo flowInfo) -
recordUsingNullReference
public void recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo) 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).- 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 ofIN_COMPARISON_NULL
,IN_COMPARISON_NON_NULL
,IN_ASSIGNMENT
orIN_INSTANCEOF
) and a bit to indicate whether the reference is being recorded inside an assert,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)
-
subroutine
-
toString
-
recordNullityMismatch
public void recordNullityMismatch(BlockScope currentScope, Expression expression, TypeBinding providedType, TypeBinding expectedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching annotationStatus) Record that a nullity mismatch was detected against an annotated type reference.- Parameters:
currentScope
- scope for error reportingexpression
- the expression violating the specificationprovidedType
- the type of the provided value, i.e., either expression or an element thereof (in ForeachStatements)expectedType
- the declared type of the spec'ed variable, for error reporting.flowInfo
- the flowInfo observed when visiting expressionnullStatus
- the null status of expression at the current locationannotationStatus
- status from type annotation analysis, or null
-
internalRecordNullityMismatch
protected boolean internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType)
-