Uses of Class
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowInfo
Packages that use FlowInfo
Package
Description
-
Uses of FlowInfo in org.aspectj.ajdt.internal.compiler.ast
Methods in org.aspectj.ajdt.internal.compiler.ast with parameters of type FlowInfoModifier and TypeMethodDescriptionvoidDeclareAnnotationDeclaration.analyseCode(ClassScope classScope, FlowContext flowContext, FlowInfo flowInfo) voidInterTypeMethodDeclaration.analyseCode(ClassScope classScope, FlowContext flowContext, FlowInfo flowInfo) -
Uses of FlowInfo in org.aspectj.org.eclipse.jdt.internal.codeassist.complete
Methods in org.aspectj.org.eclipse.jdt.internal.codeassist.complete that return FlowInfoModifier and TypeMethodDescriptionCompletionOnBreakStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CompletionOnContinueStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Methods in org.aspectj.org.eclipse.jdt.internal.codeassist.complete with parameters of type FlowInfoModifier and TypeMethodDescriptionCompletionOnBreakStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CompletionOnContinueStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) -
Uses of FlowInfo in org.aspectj.org.eclipse.jdt.internal.compiler.ast
Methods in org.aspectj.org.eclipse.jdt.internal.compiler.ast that return FlowInfoModifier and TypeMethodDescriptionArrayReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean compoundAssignment) FieldReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) QualifiedNameReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) abstract FlowInfoReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) SingleNameReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) ThisReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) static FlowInfoFakedTrackingVariable.analyseCloseableAcquisition(BlockScope scope, FlowInfo flowInfo, FlowContext flowContext, MessageSend acquisition) Check if a message send acquires a closeable from its receiver, see: Bug 463320 - [compiler][resource] potential "resource leak" problem disappears when local variable inlinedAbstractVariableDeclaration.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) AllocationExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) AND_AND_Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ArrayAllocationExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ArrayInitializer.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ArrayReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) AssertStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Assignment.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) BinaryExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Block.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) BreakStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CaseStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CastExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ClassLiteralAccess.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CombinedBinaryExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CompoundAssignment.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ConditionalExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ContinueStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) DoStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) EitherOrMultiPattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) EmptyStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) EqualExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ExplicitConstructorCall.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) More sophisticated for of the flow analysis used for analyzing expressions, and be able to optimize out portions of expressions where no actual value is required.FieldDeclaration.analyseCode(MethodScope initializationScope, FlowContext flowContext, FlowInfo flowInfo) FieldReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) FieldReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) ForeachStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ForStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) GuardedPattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) IfStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Initializer.analyseCode(MethodScope currentScope, FlowContext flowContext, FlowInfo flowInfo) InstanceOfExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) LabeledStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) LambdaExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Literal.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) LocalDeclaration.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) MessageSend.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) OR_OR_Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedAllocationExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) QualifiedThisReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedThisReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) RecordComponent.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) RecordPattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Reference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ReferenceExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ReturnStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SingleNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SingleNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) abstract FlowInfoStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) StringTemplate.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SwitchExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SwitchStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SynchronizedStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TemplateExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ThrowStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TryStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TypeDeclaration.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Flow analysis for a local innertypeTypePattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TypeReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) UnaryExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) WhileStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) YieldStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) default FlowInfoInvocation.handleResourcePassedToInvocation(BlockScope currentScope, MethodBinding methodBinding, Expression argument, int rank, FlowContext flowContext, FlowInfo flowInfo) Resource leak analysis: track the case that a resource is passed as an argument to an invocation.static FlowInfoFakedTrackingVariable.markPassedToOutside(BlockScope scope, Expression expression, FlowInfo flowInfo, FlowContext flowContext, boolean owned) Mark that this resource is passed to some outside code (as argument to a method/ctor call or as a return value from the current method), and thus should be considered as potentially closed.Methods in org.aspectj.org.eclipse.jdt.internal.compiler.ast with parameters of type FlowInfoModifier and TypeMethodDescriptionprotected voidStatement.analyseArguments(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, MethodBinding methodBinding, Expression[] arguments) Analysing arguments of MessageSend, ExplicitConstructorCall, AllocationExpression.ArrayReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean compoundAssignment) FieldReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) QualifiedNameReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) abstract FlowInfoReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) SingleNameReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) ThisReference.analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) static FlowInfoFakedTrackingVariable.analyseCloseableAcquisition(BlockScope scope, FlowInfo flowInfo, FlowContext flowContext, MessageSend acquisition) Check if a message send acquires a closeable from its receiver, see: Bug 463320 - [compiler][resource] potential "resource leak" problem disappears when local variable inlinedstatic voidFakedTrackingVariable.analyseCloseableAllocation(BlockScope scope, FlowInfo flowInfo, FlowContext flowContext, AllocationExpression allocation) Compute/assign a tracking variable for a freshly allocated closeable value, using information from our white lists.AbstractVariableDeclaration.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) AllocationExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) AND_AND_Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ArrayAllocationExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ArrayInitializer.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ArrayReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) AssertStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Assignment.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) BinaryExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Block.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) BreakStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CaseStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) CastExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ClassLiteralAccess.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) voidClinit.analyseCode(ClassScope classScope, InitializationFlowContext staticInitializerFlowContext, FlowInfo flowInfo) CombinedBinaryExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) voidCompactConstructorDeclaration.analyseCode(ClassScope classScope, InitializationFlowContext initializerFlowContext, FlowInfo flowInfo, int initialReachMode) CompoundAssignment.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ConditionalExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) voidConstructorDeclaration.analyseCode(ClassScope classScope, InitializationFlowContext initializerFlowContext, FlowInfo flowInfo, int initialReachMode) The flowInfo corresponds to non-static field initialization infos.ContinueStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) DoStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) EitherOrMultiPattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) EmptyStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) EqualExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ExplicitConstructorCall.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) More sophisticated for of the flow analysis used for analyzing expressions, and be able to optimize out portions of expressions where no actual value is required.FieldDeclaration.analyseCode(MethodScope initializationScope, FlowContext flowContext, FlowInfo flowInfo) FieldReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) FieldReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) ForeachStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ForStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) GuardedPattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) IfStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Initializer.analyseCode(MethodScope currentScope, FlowContext flowContext, FlowInfo flowInfo) InstanceOfExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) LabeledStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) LambdaExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Literal.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) LocalDeclaration.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) MessageSend.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) voidMethodDeclaration.analyseCode(ClassScope classScope, FlowContext flowContext, FlowInfo flowInfo) OR_OR_Expression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedAllocationExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) QualifiedThisReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) QualifiedThisReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) RecordComponent.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) RecordPattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Reference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ReferenceExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ReturnStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SingleNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SingleNameReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) abstract FlowInfoStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) StringTemplate.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SwitchExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SwitchStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) SynchronizedStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TemplateExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) ThrowStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TryStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TypeDeclaration.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Flow analysis for a local innertypevoidTypeDeclaration.analyseCode(ClassScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Flow analysis for a local member innertypeTypePattern.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) TypeReference.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) UnaryExpression.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) WhileStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) YieldStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) protected voidStatement.checkAgainstNullTypeAnnotation(BlockScope scope, TypeBinding requiredType, Expression expression, FlowContext flowContext, FlowInfo flowInfo) protected voidCompactConstructorDeclaration.checkAndGenerateFieldAssignment(FlowContext flowContext, FlowInfo flowInfo, FieldBinding[] fields) protected voidConstructorDeclaration.checkAndGenerateFieldAssignment(FlowContext flowContext, FlowInfo flowInfo, FieldBinding[] fields) static intNullAnnotationMatching.checkAssignment(BlockScope currentScope, FlowContext flowContext, VariableBinding var, FlowInfo flowInfo, int nullStatus, Expression expression, TypeBinding providedType) Check null-ness of 'var' against a possible null annotationvoidAllocationExpression.checkCapturedLocalInitializationIfNecessary(ReferenceBinding checkedType, BlockScope currentScope, FlowInfo flowInfo) booleanArrayReference.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanCastExpression.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanConditionalExpression.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanExpression.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo) booleanExpression.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) Check this expression against potential NPEs, which may occur: if the expression is the receiver in a field access, qualified allocation, array reference or message send incl.booleanFieldReference.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanMessageSend.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanQualifiedNameReference.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanReference.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanSingleNameReference.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanSwitchExpression.checkNPE(BlockScope skope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) booleanThisReference.checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck) protected voidExpression.checkNPEbyUnboxing(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo) If this expression requires unboxing check if that operation can throw NPE.static voidFakedTrackingVariable.cleanUpUnassigned(BlockScope scope, ASTNode location, FlowInfo flowInfo, boolean returnMissingOwning) Unassigned closeables are not visible beyond their enclosing statement, immediately report and remove after each statement.intEmptyStatement.complainIfUnreachable(FlowInfo flowInfo, BlockScope scope, int complaintLevel, boolean endOfBlock) intStatement.complainIfUnreachable(FlowInfo flowInfo, BlockScope scope, int previousComplaintLevel, boolean endOfBlock) protected voidCompactConstructorDeclaration.doFieldReachAnalysis(FlowInfo flowInfo, FieldBinding[] fields) protected voidConstructorDeclaration.doFieldReachAnalysis(FlowInfo flowInfo, FieldBinding[] fields) intFakedTrackingVariable.findMostSpecificStatus(FlowInfo flowInfo, BlockScope currentScope, BlockScope locationScope) static FakedTrackingVariableFakedTrackingVariable.getCloseTrackingVariable(Expression expression, FlowInfo flowInfo, FlowContext flowContext, boolean useAnnotations) If expression resolves to a value of type AutoCloseable answer the variable that tracks closing of that local.static voidFakedTrackingVariable.handleResourceAssignment(BlockScope scope, FlowInfo upstreamInfo, FlowInfo flowInfo, FlowContext flowContext, ASTNode location, Expression rhs, LocalVariableBinding local) Given the rhs of an assignment or local declaration has a (Auto)Closeable type (or null), setup for leak analysis now: Create or re-use a tracking variable, and wire and initialize everything.static voidFakedTrackingVariable.handleResourceFieldAssignment(BlockScope scope, FlowInfo flowInfo, FlowContext flowContext, ASTNode location, Expression rhs) When assigning an rhs of an (Auto)Closeable type (or null) to a field, inspect annotations to find out if the assignment assigns ownership to the instance (rather than current method).default FlowInfoInvocation.handleResourcePassedToInvocation(BlockScope currentScope, MethodBinding methodBinding, Expression argument, int rank, FlowContext flowContext, FlowInfo flowInfo) Resource leak analysis: track the case that a resource is passed as an argument to an invocation.booleanFakedTrackingVariable.hasDefinitelyNoResource(FlowInfo flowInfo) Answer true if we know for sure that no resource is bound to this variable at the point of 'flowInfo'.voidAllocationExpression.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidQualifiedAllocationExpression.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidQualifiedNameReference.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidSingleNameReference.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidTypeDeclaration.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidTypeDeclaration.manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope, FlowInfo flowInfo) Access emulation for a local member type force to emulation of access to direct enclosing instance.voidAllocationExpression.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidAssertStatement.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidExplicitConstructorCall.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidFieldReference.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess) voidMessageSend.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidQualifiedNameReference.manageSyntheticAccessIfNecessary(BlockScope currentScope, FieldBinding fieldBinding, int index, FlowInfo flowInfo) index is less then 0 to denote write access emulationvoidReferenceExpression.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidSingleNameReference.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess) voidFakedTrackingVariable.markClose(FlowInfo flowInfo, FlowContext flowContext) Mark that this resource is closed locally.voidFakedTrackingVariable.markNullStatus(FlowInfo flowInfo, FlowContext flowContext, int status) voidFakedTrackingVariable.markOwnedByOutside(FlowInfo flowInfo, FlowContext flowContext) static FlowInfoFakedTrackingVariable.markPassedToOutside(BlockScope scope, Expression expression, FlowInfo flowInfo, FlowContext flowContext, boolean owned) Mark that this resource is passed to some outside code (as argument to a method/ctor call or as a return value from the current method), and thus should be considered as potentially closed.intArrayReference.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intAssignment.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intCastExpression.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intCompoundAssignment.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intConditionalExpression.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intExpression.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intFunctionalExpression.nullStatus(FlowInfo flowInfo) intMessageSend.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intNullLiteral.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intReference.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intSingleNameReference.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intSwitchExpression.nullStatus(FlowInfo flowInfo, FlowContext flowContext) intThisReference.nullStatus(FlowInfo flowInfo, FlowContext flowContext) static FakedTrackingVariableFakedTrackingVariable.preConnectTrackerAcrossAssignment(ASTNode location, LocalVariableBinding local, Expression rhs, FlowInfo flowInfo, boolean useAnnotations) Before analyzing an assignment of this shape:singleName = new Allocation()connect any tracking variable of the LHS with the allocation on the RHS.intFakedTrackingVariable.riskyNullStatusAt(FlowInfo info) voidEqualExpression.syntacticFieldAnalysisForFalseBranch(FlowInfo flowInfo, FlowContext flowContext) protected voidBinaryExpression.updateFlowOnBooleanResult(FlowInfo flowInfo, boolean result) protected voidExpression.updateFlowOnBooleanResult(FlowInfo flowInfo, boolean result) Back-propagation of flow info: before analysing a branch where a given condition is known to hold true/false respectively, ask the condition to contribute its information to the given flowInfo.protected voidMessageSend.updateFlowOnBooleanResult(FlowInfo flowInfo, boolean result) protected voidUnaryExpression.updateFlowOnBooleanResult(FlowInfo flowInfo, boolean result) Constructors in org.aspectj.org.eclipse.jdt.internal.compiler.ast with parameters of type FlowInfoModifierConstructorDescriptionFakedTrackingVariable(FieldBinding original, BlockScope scope, ASTNode location, FlowInfo flowInfo, FlowContext flowContext, int nullStatus, boolean useAnnotations) FakedTrackingVariable(LocalVariableBinding original, ASTNode location, FlowInfo flowInfo, FlowContext flowContext, int nullStatus, boolean useAnnotations) FakedTrackingVariable(LocalVariableBinding original, BlockScope scope, ASTNode location, FlowInfo flowInfo, FlowContext flowContext, int nullStatus, boolean useAnnotations) -
Uses of FlowInfo in org.aspectj.org.eclipse.jdt.internal.compiler.flow
Subclasses of FlowInfo in org.aspectj.org.eclipse.jdt.internal.compiler.flowModifier and TypeClassDescriptionclassRecord conditional initialization status during definite assignment analysisclassRecord initialization status during definite assignment analysis No caching of pre-allocated instances.Fields in org.aspectj.org.eclipse.jdt.internal.compiler.flow declared as FlowInfoModifier and TypeFieldDescriptionFlowInfo[]InitializationFlowContext.exceptionThrowerFlowInfosInitializationFlowContext.initsBeforeContextFlowContext.initsOnFinallyConditionalFlowInfo.initsWhenFalseConditionalFlowInfo.initsWhenTrueMethods in org.aspectj.org.eclipse.jdt.internal.compiler.flow that return FlowInfoModifier and TypeMethodDescriptionConditionalFlowInfo.addInitializationsFrom(FlowInfo otherInits) abstract FlowInfoFlowInfo.addInitializationsFrom(FlowInfo otherInits) Add other inits to this flow info, then return this.UnconditionalFlowInfo.addInitializationsFrom(FlowInfo inits) ConditionalFlowInfo.addNullInfoFrom(FlowInfo otherInits) abstract FlowInfoFlowInfo.addNullInfoFrom(FlowInfo otherInits) Add all null information from otherInits to this flow info and return this.UnconditionalFlowInfo.addNullInfoFrom(FlowInfo inits) ConditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits) abstract FlowInfoFlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits) Compose other inits over this flow info, then return this.UnconditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo inits) ConditionalFlowInfo.asNegatedCondition()FlowInfo.asNegatedCondition()static FlowInfoFlowInfo.conditional(FlowInfo initsWhenTrue, FlowInfo initsWhenFalse) ConditionalFlowInfo.copy()abstract FlowInfoFlowInfo.copy()Return a deep copy of the current instance.UnconditionalFlowInfo.copy()FlowContext.getInitsForFinalBlankInitializationCheck(TypeBinding declaringType, FlowInfo flowInfo) FlowContext.initsOnBreak()ConditionalFlowInfo.initsWhenFalse()abstract FlowInfoFlowInfo.initsWhenFalse()Return the flow info that would result from the path associated to the value false for the condition expression that generated this flow info.UnconditionalFlowInfo.initsWhenFalse()ConditionalFlowInfo.initsWhenTrue()abstract FlowInfoFlowInfo.initsWhenTrue()Return the flow info that would result from the path associated to the value true for the condition expression that generated this flow info.UnconditionalFlowInfo.initsWhenTrue()ConditionalFlowInfo.safeInitsWhenTrue()abstract FlowInfoFlowInfo.safeInitsWhenTrue()Return a flow info that carries the same information as the result ofinitsWhenTrue, but warrantied to be different from this.
Caveat: side effects on the result may affect components of this.UnconditionalFlowInfo.safeInitsWhenTrue()ConditionalFlowInfo.setReachMode(int reachMode) abstract FlowInfoFlowInfo.setReachMode(int reachMode) Set this flow info reach mode and return this.UnconditionalFlowInfo.setReachMode(int reachMode) Methods in org.aspectj.org.eclipse.jdt.internal.compiler.flow with parameters of type FlowInfoModifier and TypeMethodDescriptionConditionalFlowInfo.addInitializationsFrom(FlowInfo otherInits) abstract FlowInfoFlowInfo.addInitializationsFrom(FlowInfo otherInits) Add other inits to this flow info, then return this.UnconditionalFlowInfo.addInitializationsFrom(FlowInfo inits) ConditionalFlowInfo.addNullInfoFrom(FlowInfo otherInits) abstract FlowInfoFlowInfo.addNullInfoFrom(FlowInfo otherInits) Add all null information from otherInits to this flow info and return this.UnconditionalFlowInfo.addNullInfoFrom(FlowInfo inits) ConditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits) abstract FlowInfoFlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits) Compose other inits over this flow info, then return this.UnconditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo inits) voidFlowContext.checkExceptionHandlers(TypeBinding[] raisedExceptions, ASTNode location, FlowInfo flowInfo, BlockScope scope) voidFlowContext.checkExceptionHandlers(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope) voidFlowContext.checkExceptionHandlers(TypeBinding raisedException, ASTNode location, FlowInfo flowInfo, BlockScope scope, boolean isExceptionOnAutoClose) voidInitializationFlowContext.checkInitializerExceptions(BlockScope currentScope, FlowContext initializerContext, FlowInfo flowInfo) protected voidFlowContext.checkUnboxing(Scope scope, Expression expression, FlowInfo flowInfo) During deferred checking re-visit a previously recording unboxing situation.voidFinallyFlowContext.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.voidLoopingFlowContext.complainOnDeferredFinalChecks(BlockScope scope, FlowInfo flowInfo) Perform deferred checks relative to final variables duplicate initialization of lack of initialization.voidLoopingFlowContext.complainOnDeferredNullChecks(BlockScope scope, FlowInfo callerFlowInfo) Perform deferred checks relative to the null status of local variables.voidLoopingFlowContext.complainOnDeferredNullChecks(BlockScope scope, FlowInfo callerFlowInfo, boolean updateInitsOnBreak) static FlowInfoFlowInfo.conditional(FlowInfo initsWhenTrue, FlowInfo initsWhenFalse) FlowContext.getInitsForFinalBlankInitializationCheck(TypeBinding declaringType, FlowInfo flowInfo) protected booleanFinallyFlowContext.internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType) protected booleanFlowContext.internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType) protected booleanLoopingFlowContext.internalRecordNullityMismatch(Expression expression, TypeBinding providedType, FlowInfo flowInfo, int nullStatus, NullAnnotationMatching nullAnnotationStatus, TypeBinding expectedType, int checkType) static UnconditionalFlowInfoFlowInfo.mergedOptimizedBranches(FlowInfo initsWhenTrue, boolean isOptimizedTrue, FlowInfo initsWhenFalse, boolean isOptimizedFalse, boolean allowFakeDeadBranch) Merge branches using optimized boolean conditionsstatic UnconditionalFlowInfoFlowInfo.mergedOptimizedBranchesIfElse(FlowInfo initsWhenTrue, boolean isOptimizedTrue, FlowInfo initsWhenFalse, boolean isOptimizedFalse, boolean allowFakeDeadBranch, FlowInfo flowInfo, IfStatement ifStatement, boolean reportDeadCodeInKnownPattern) Merge if-else branches using optimized boolean conditionsvoidFlowContext.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.voidTryFlowContext.mergeFinallyNullInfo(FlowInfo flowInfo) voidFlowContext.recordBreakFrom(FlowInfo flowInfo) voidSwitchFlowContext.recordBreakFrom(FlowInfo flowInfo) voidLoopingFlowContext.recordCatchContextOfEscapingException(ExceptionHandlingFlowContext catchingContext, ReferenceBinding caughtException, FlowInfo exceptionInfo) voidFlowContext.recordContinueFrom(FlowContext innerFlowContext, FlowInfo flowInfo) voidLoopingFlowContext.recordContinueFrom(FlowContext innerFlowContext, FlowInfo flowInfo) booleanFlowContext.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.booleanLoopingFlowContext.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.voidFlowContext.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 voidFlowContext.recordNullReference(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo) Record a null reference for use by deferred checks.protected voidFinallyFlowContext.recordNullReferenceWithAnnotationStatus(LocalVariableBinding local, ASTNode expression, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) protected voidFlowContext.recordNullReferenceWithAnnotationStatus(LocalVariableBinding local, ASTNode location, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) Record a null reference for use by deferred checks.protected voidLoopingFlowContext.recordNullReferenceWithAnnotationStatus(LocalVariableBinding local, ASTNode expression, int checkType, FlowInfo nullInfo, NullAnnotationMatching nullAnnotationStatus) voidFlowContext.recordSettingFinal(VariableBinding variable, Reference finalReference, FlowInfo flowInfo) voidFinallyFlowContext.recordUnboxing(Scope scope, Expression expression, int nullStatus, FlowInfo flowInfo) voidFlowContext.recordUnboxing(Scope scope, Expression expression, int nullStatus, FlowInfo flowInfo) Either AST analysis or checking of a child flow context has encountered an unboxing situation.voidLoopingFlowContext.recordUnboxing(Scope scope, Expression expression, int nullStatus, FlowInfo flowInfo) voidFinallyFlowContext.recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo) voidFlowContext.recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo) Record a null reference for use by deferred checks.voidLoopingFlowContext.recordUsingNullReference(Scope scope, LocalVariableBinding local, ASTNode location, int checkType, FlowInfo flowInfo) voidLoopingFlowContext.simulateThrowAfterLoopBack(FlowInfo flowInfo) Constructors in org.aspectj.org.eclipse.jdt.internal.compiler.flow with parameters of type FlowInfoModifierConstructorDescriptionExceptionHandlingFlowContext(FlowContext parent, TryStatement tryStatement, ReferenceBinding[] handledExceptions, int[] exceptionToCatchBlockMap, FlowContext initializationParent, BlockScope scope, FlowInfo flowInfo) InitializationFlowContext(FlowContext parent, ASTNode associatedNode, FlowInfo initsBeforeContext, FlowContext initializationParent, BlockScope scope) LoopingFlowContext(FlowContext parent, FlowInfo upstreamNullFlowInfo, ASTNode associatedNode, BranchLabel breakLabel, BranchLabel continueLabel, Scope associatedScope, boolean isPreTest) -
Uses of FlowInfo in org.aspectj.org.eclipse.jdt.internal.compiler.lookup
Fields in org.aspectj.org.eclipse.jdt.internal.compiler.lookup declared as FlowInfoModifier and TypeFieldDescriptionBlockScope.finallyInfoUsed only during analyseCode and only for checking if a resource was closed in a finallyBlock.Methods in org.aspectj.org.eclipse.jdt.internal.compiler.lookup with parameters of type FlowInfoModifier and TypeMethodDescriptionvoidBlockScope.checkUnclosedCloseables(FlowInfo flowInfo, FlowContext flowContext, ASTNode location, BlockScope locationScope) At the end of a block check the closing-status of all tracked closeables that are declared in this block.voidBlockScope.correlateTrackingVarsIfElse(FlowInfo thenFlowInfo, FlowInfo elseFlowInfo) If one branch of an if-else closes any AutoCloseable resource, and if the same resource is known to be null on the other branch mark it as closed, too, so that merging both branches indicates that the resource is always closed.final intMethodScope.recordInitializationStates(FlowInfo flowInfo) -
Uses of FlowInfo in org.aspectj.org.eclipse.jdt.internal.eval
Methods in org.aspectj.org.eclipse.jdt.internal.eval that return FlowInfoModifier and TypeMethodDescriptionCodeSnippetReturnStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) Methods in org.aspectj.org.eclipse.jdt.internal.eval with parameters of type FlowInfoModifier and TypeMethodDescriptionCodeSnippetReturnStatement.analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) voidCodeSnippetAllocationExpression.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidCodeSnippetAllocationExpression.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidCodeSnippetFieldReference.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess) voidCodeSnippetMessageSend.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) voidCodeSnippetQualifiedNameReference.manageSyntheticAccessIfNecessary(BlockScope currentScope, FieldBinding fieldBinding, int index, FlowInfo flowInfo) index is<0to denote write access emulationvoidCodeSnippetSingleNameReference.manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess)