| Package | Description |
|---|---|
| org.eclipse.jdt.internal.compiler.ast | |
| org.eclipse.jdt.internal.compiler.flow | |
| org.eclipse.jdt.internal.compiler.lookup |
| Modifier and Type | Method and Description |
|---|---|
abstract FlowInfo |
Reference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
QualifiedNameReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
SingleNameReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
FieldReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
ThisReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
ArrayReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean compoundAssignment) |
FlowInfo |
ClassLiteralAccess.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
LocalDeclaration.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AND_AND_Expression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Reference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CombinedBinaryExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
abstract FlowInfo |
Statement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedAllocationExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CastExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
LambdaExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedThisReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Block.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
LabeledStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ConditionalExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ArrayInitializer.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
UnaryExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
OR_OR_Expression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
SwitchStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ContinueStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
SingleNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
FieldReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
BinaryExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ArrayAllocationExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
IfStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
DoStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ForStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
WhileStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
SynchronizedStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Expression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ForeachStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AbstractVariableDeclaration.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
MessageSend.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
EqualExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ExplicitConstructorCall.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CompoundAssignment.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ReturnStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
BreakStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Assignment.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
InstanceOfExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AssertStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
TypeDeclaration.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo)
Flow analysis for a local innertype
|
FlowInfo |
ArrayReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CaseStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
TryStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Literal.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AllocationExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ThrowStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
EmptyStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ReferenceExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
TypeReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedThisReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
FlowInfo |
QualifiedNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
FlowInfo |
SingleNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
FlowInfo |
FieldReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
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.
|
FlowInfo |
Initializer.analyseCode(MethodScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
FieldDeclaration.analyseCode(MethodScope initializationScope,
FlowContext flowContext,
FlowInfo flowInfo) |
static FlowInfo |
FakedTrackingVariable.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.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
Statement.analyseArguments(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
MethodBinding methodBinding,
Expression[] arguments)
Analysing arguments of MessageSend, ExplicitConstructorCall, AllocationExpression.
|
abstract FlowInfo |
Reference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
QualifiedNameReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
SingleNameReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
FieldReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
ThisReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean isCompound) |
FlowInfo |
ArrayReference.analyseAssignment(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
Assignment assignment,
boolean compoundAssignment) |
static void |
FakedTrackingVariable.analyseCloseableAllocation(BlockScope scope,
FlowInfo flowInfo,
AllocationExpression allocation)
Compute/assign a tracking variable for a freshly allocated closeable value, using information from our white lists.
|
FlowInfo |
ClassLiteralAccess.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
LocalDeclaration.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AND_AND_Expression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Reference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CombinedBinaryExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
abstract FlowInfo |
Statement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedAllocationExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CastExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
LambdaExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedThisReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Block.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
LabeledStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ConditionalExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ArrayInitializer.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
UnaryExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
OR_OR_Expression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
SwitchStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ContinueStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
SingleNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
FieldReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
BinaryExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ArrayAllocationExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
IfStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
DoStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ForStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
WhileStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
SynchronizedStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Expression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ForeachStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AbstractVariableDeclaration.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
MessageSend.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
EqualExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ExplicitConstructorCall.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CompoundAssignment.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ReturnStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
BreakStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Assignment.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
InstanceOfExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AssertStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
TypeDeclaration.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo)
Flow analysis for a local innertype
|
FlowInfo |
ArrayReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
CaseStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
TryStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
Literal.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
AllocationExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ThrowStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
EmptyStatement.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
ReferenceExpression.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
TypeReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
QualifiedThisReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
FlowInfo |
QualifiedNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
FlowInfo |
SingleNameReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
FlowInfo |
FieldReference.analyseCode(BlockScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo,
boolean valueRequired) |
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.
|
void |
MethodDeclaration.analyseCode(ClassScope classScope,
FlowContext flowContext,
FlowInfo flowInfo) |
void |
TypeDeclaration.analyseCode(ClassScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo)
Flow analysis for a local member innertype
|
void |
Clinit.analyseCode(ClassScope classScope,
InitializationFlowContext staticInitializerFlowContext,
FlowInfo flowInfo) |
void |
ConstructorDeclaration.analyseCode(ClassScope classScope,
InitializationFlowContext initializerFlowContext,
FlowInfo flowInfo,
int initialReachMode)
The flowInfo corresponds to non-static field initialization infos.
|
FlowInfo |
Initializer.analyseCode(MethodScope currentScope,
FlowContext flowContext,
FlowInfo flowInfo) |
FlowInfo |
FieldDeclaration.analyseCode(MethodScope initializationScope,
FlowContext flowContext,
FlowInfo flowInfo) |
protected void |
Statement.checkAgainstNullTypeAnnotation(BlockScope scope,
TypeBinding requiredType,
Expression expression,
FlowContext flowContext,
FlowInfo flowInfo) |
void |
AllocationExpression.checkCapturedLocalInitializationIfNecessary(ReferenceBinding checkedType,
BlockScope currentScope,
FlowInfo flowInfo) |
boolean |
Reference.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
CastExpression.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
ConditionalExpression.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
QualifiedNameReference.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
SingleNameReference.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
FieldReference.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
ThisReference.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
Expression.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo)
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.
|
boolean |
MessageSend.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
boolean |
ArrayReference.checkNPE(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo) |
protected void |
Expression.checkNPEbyUnboxing(BlockScope scope,
FlowContext flowContext,
FlowInfo flowInfo)
If this expression requires unboxing check if that operation can throw NPE.
|
int |
Statement.complainIfUnreachable(FlowInfo flowInfo,
BlockScope scope,
int previousComplaintLevel,
boolean endOfBlock) |
int |
EmptyStatement.complainIfUnreachable(FlowInfo flowInfo,
BlockScope scope,
int complaintLevel,
boolean endOfBlock) |
int |
FakedTrackingVariable.findMostSpecificStatus(FlowInfo flowInfo,
BlockScope currentScope,
BlockScope locationScope) |
static FakedTrackingVariable |
FakedTrackingVariable.getCloseTrackingVariable(Expression expression,
FlowInfo flowInfo,
FlowContext flowContext)
If expression resolves to a value of type AutoCloseable answer the variable that tracks closing of that local.
|
static void |
FakedTrackingVariable.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.
|
boolean |
FakedTrackingVariable.hasDefinitelyNoResource(FlowInfo flowInfo)
Answer true if we know for sure that no resource is bound to this variable
at the point of 'flowInfo'.
|
void |
QualifiedAllocationExpression.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
QualifiedNameReference.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
SingleNameReference.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
TypeDeclaration.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
AllocationExpression.manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
TypeDeclaration.manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope,
FlowInfo flowInfo)
Access emulation for a local member type
force to emulation of access to direct enclosing instance.
|
void |
QualifiedNameReference.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FieldBinding fieldBinding,
int index,
FlowInfo flowInfo)
index is <0 to denote write access emulation
|
void |
MessageSend.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
ExplicitConstructorCall.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
AssertStatement.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
AllocationExpression.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
ReferenceExpression.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo) |
void |
SingleNameReference.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo,
boolean isReadAccess) |
void |
FieldReference.manageSyntheticAccessIfNecessary(BlockScope currentScope,
FlowInfo flowInfo,
boolean isReadAccess) |
void |
FakedTrackingVariable.markClose(FlowInfo flowInfo,
FlowContext flowContext)
Mark that this resource is closed locally.
|
static FlowInfo |
FakedTrackingVariable.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.
|
int |
FunctionalExpression.nullStatus(FlowInfo flowInfo) |
int |
Reference.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
NullLiteral.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
CastExpression.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
ConditionalExpression.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
SingleNameReference.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
ThisReference.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
Expression.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
MessageSend.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
CompoundAssignment.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
int |
Assignment.nullStatus(FlowInfo flowInfo,
FlowContext flowContext) |
static void |
FakedTrackingVariable.preConnectTrackerAcrossAssignment(ASTNode location,
LocalVariableBinding local,
Expression rhs,
FlowInfo flowInfo)
Before analyzing an assignment of this shape:
singleName = new Allocation()
connect any tracking variable of the LHS with the allocation on the RHS. |
| Constructor and Description |
|---|
FakedTrackingVariable(LocalVariableBinding original,
ASTNode location,
FlowInfo flowInfo,
FlowContext flowContext,
int nullStatus) |
| Modifier and Type | Class and Description |
|---|---|
class |
ConditionalFlowInfo
Record conditional initialization status during definite assignment analysis
|
class |
UnconditionalFlowInfo
Record initialization status during definite assignment analysis
No caching of pre-allocated instances.
|
| Modifier and Type | Field and Description |
|---|---|
FlowInfo[] |
InitializationFlowContext.exceptionThrowerFlowInfos |
FlowInfo |
InitializationFlowContext.initsBeforeContext |
FlowInfo |
FlowContext.initsOnFinally |
FlowInfo |
ConditionalFlowInfo.initsWhenFalse |
FlowInfo |
ConditionalFlowInfo.initsWhenTrue |
| Modifier and Type | Method and Description |
|---|---|
FlowInfo |
ConditionalFlowInfo.addInitializationsFrom(FlowInfo otherInits) |
FlowInfo |
UnconditionalFlowInfo.addInitializationsFrom(FlowInfo inits) |
abstract FlowInfo |
FlowInfo.addInitializationsFrom(FlowInfo otherInits)
Add other inits to this flow info, then return this.
|
FlowInfo |
ConditionalFlowInfo.addNullInfoFrom(FlowInfo otherInits) |
FlowInfo |
UnconditionalFlowInfo.addNullInfoFrom(FlowInfo inits) |
abstract FlowInfo |
FlowInfo.addNullInfoFrom(FlowInfo otherInits)
Add all null information from otherInits to this flow info and return this.
|
FlowInfo |
ConditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits) |
FlowInfo |
UnconditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo inits) |
abstract FlowInfo |
FlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits)
Compose other inits over this flow info, then return this.
|
FlowInfo |
ConditionalFlowInfo.asNegatedCondition() |
FlowInfo |
FlowInfo.asNegatedCondition() |
static FlowInfo |
FlowInfo.conditional(FlowInfo initsWhenTrue,
FlowInfo initsWhenFalse) |
FlowInfo |
ConditionalFlowInfo.copy() |
FlowInfo |
UnconditionalFlowInfo.copy() |
abstract FlowInfo |
FlowInfo.copy()
Return a deep copy of the current instance.
|
FlowInfo |
FlowContext.getInitsForFinalBlankInitializationCheck(TypeBinding declaringType,
FlowInfo flowInfo) |
FlowInfo |
FlowContext.initsOnBreak() |
FlowInfo |
ConditionalFlowInfo.initsWhenFalse() |
FlowInfo |
UnconditionalFlowInfo.initsWhenFalse() |
abstract FlowInfo |
FlowInfo.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.
|
FlowInfo |
ConditionalFlowInfo.initsWhenTrue() |
FlowInfo |
UnconditionalFlowInfo.initsWhenTrue() |
abstract FlowInfo |
FlowInfo.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.
|
FlowInfo |
ConditionalFlowInfo.safeInitsWhenTrue() |
FlowInfo |
UnconditionalFlowInfo.safeInitsWhenTrue() |
abstract FlowInfo |
FlowInfo.safeInitsWhenTrue()
Return a flow info that carries the same information as the result of
initsWhenTrue, but warrantied to be different
from this.Caveat: side effects on the result may affect components of this. |
FlowInfo |
ConditionalFlowInfo.setReachMode(int reachMode) |
FlowInfo |
UnconditionalFlowInfo.setReachMode(int reachMode) |
abstract FlowInfo |
FlowInfo.setReachMode(int reachMode)
Set this flow info reach mode and return this.
|
| Modifier and Type | Method and Description |
|---|---|
FlowInfo |
ConditionalFlowInfo.addInitializationsFrom(FlowInfo otherInits) |
FlowInfo |
UnconditionalFlowInfo.addInitializationsFrom(FlowInfo inits) |
abstract FlowInfo |
FlowInfo.addInitializationsFrom(FlowInfo otherInits)
Add other inits to this flow info, then return this.
|
FlowInfo |
ConditionalFlowInfo.addNullInfoFrom(FlowInfo otherInits) |
FlowInfo |
UnconditionalFlowInfo.addNullInfoFrom(FlowInfo inits) |
abstract FlowInfo |
FlowInfo.addNullInfoFrom(FlowInfo otherInits)
Add all null information from otherInits to this flow info and return this.
|
FlowInfo |
ConditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits) |
FlowInfo |
UnconditionalFlowInfo.addPotentialInitializationsFrom(FlowInfo inits) |
abstract FlowInfo |
FlowInfo.addPotentialInitializationsFrom(FlowInfo otherInits)
Compose other inits over this flow info, then return this.
|
void |
FlowContext.checkExceptionHandlers(TypeBinding[] raisedExceptions,
ASTNode location,
FlowInfo flowInfo,
BlockScope scope) |
void |
FlowContext.checkExceptionHandlers(TypeBinding raisedException,
ASTNode location,
FlowInfo flowInfo,
BlockScope scope) |
void |
FlowContext.checkExceptionHandlers(TypeBinding raisedException,
ASTNode location,
FlowInfo flowInfo,
BlockScope scope,
boolean isExceptionOnAutoClose) |
void |
InitializationFlowContext.checkInitializerExceptions(BlockScope currentScope,
FlowContext initializerContext,
FlowInfo flowInfo) |
protected void |
FlowContext.checkUnboxing(Scope scope,
Expression expression,
FlowInfo flowInfo)
During deferred checking re-visit a previously recording unboxing situation.
|
void |
FinallyFlowContext.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.
|
void |
LoopingFlowContext.complainOnDeferredFinalChecks(BlockScope scope,
FlowInfo flowInfo)
Perform deferred checks relative to final variables duplicate initialization
of lack of initialization.
|
void |
LoopingFlowContext.complainOnDeferredNullChecks(BlockScope scope,
FlowInfo callerFlowInfo)
Perform deferred checks relative to the null status of local variables.
|
static FlowInfo |
FlowInfo.conditional(FlowInfo initsWhenTrue,
FlowInfo initsWhenFalse) |
FlowInfo |
FlowContext.getInitsForFinalBlankInitializationCheck(TypeBinding declaringType,
FlowInfo flowInfo) |
static UnconditionalFlowInfo |
FlowInfo.mergedOptimizedBranches(FlowInfo initsWhenTrue,
boolean isOptimizedTrue,
FlowInfo initsWhenFalse,
boolean isOptimizedFalse,
boolean allowFakeDeadBranch)
Merge branches using optimized boolean conditions
|
static UnconditionalFlowInfo |
FlowInfo.mergedOptimizedBranchesIfElse(FlowInfo initsWhenTrue,
boolean isOptimizedTrue,
FlowInfo initsWhenFalse,
boolean isOptimizedFalse,
boolean allowFakeDeadBranch,
FlowInfo flowInfo,
IfStatement ifStatement,
boolean reportDeadCodeInKnownPattern)
Merge if-else branches using optimized boolean conditions
|
void |
TryFlowContext.mergeFinallyNullInfo(FlowInfo flowInfo) |
void |
FlowContext.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 |
SwitchFlowContext.recordBreakFrom(FlowInfo flowInfo) |
void |
FlowContext.recordBreakFrom(FlowInfo flowInfo) |
void |
LoopingFlowContext.recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo) |
void |
FlowContext.recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo) |
boolean |
LoopingFlowContext.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.
|
boolean |
FlowContext.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.
|
void |
FlowContext.recordSettingFinal(VariableBinding variable,
Reference finalReference,
FlowInfo flowInfo) |
void |
LoopingFlowContext.recordUnboxing(Scope scope,
Expression expression,
int nullStatus,
FlowInfo flowInfo) |
void |
FinallyFlowContext.recordUnboxing(Scope scope,
Expression expression,
int nullStatus,
FlowInfo flowInfo) |
void |
FlowContext.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 |
LoopingFlowContext.recordUsingNullReference(Scope scope,
LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo flowInfo) |
void |
FinallyFlowContext.recordUsingNullReference(Scope scope,
LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo flowInfo) |
void |
FlowContext.recordUsingNullReference(Scope scope,
LocalVariableBinding local,
ASTNode location,
int checkType,
FlowInfo flowInfo)
Record a null reference for use by deferred checks.
|
void |
LoopingFlowContext.simulateThrowAfterLoopBack(FlowInfo flowInfo) |
| Constructor and Description |
|---|
ExceptionHandlingFlowContext(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) |
| Modifier and Type | Field and Description |
|---|---|
FlowInfo |
BlockScope.finallyInfo
Used only during analyseCode and only for checking if a resource was closed in a finallyBlock.
|
| Modifier and Type | Method and Description |
|---|---|
void |
BlockScope.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.
|
void |
BlockScope.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.
|
int |
MethodScope.recordInitializationStates(FlowInfo flowInfo) |
Copyright © 2015. All rights reserved.