| 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 |
|---|---|
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) |
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
|
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) |
static int |
NullAnnotationMatching.checkAssignment(BlockScope currentScope,
FlowContext flowContext,
VariableBinding var,
int nullStatus,
Expression expression,
TypeBinding providedType)
Check null-ness of 'var' against a possible null annotation
|
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.
|
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.
|
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 |
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) |
| Constructor and Description |
|---|
FakedTrackingVariable(LocalVariableBinding original,
ASTNode location,
FlowInfo flowInfo,
FlowContext flowContext,
int nullStatus) |
| Modifier and Type | Class and Description |
|---|---|
class |
ExceptionHandlingFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
FinallyFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
InitializationFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
InsideSubRoutineFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
LabelFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
LoopingFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
SwitchFlowContext
Reflects the context of code analysis, keeping track of enclosing
try statements, exception handlers, etc...
|
class |
TryFlowContext
Shared implementation for try-statement-related flow contexts.
|
| Modifier and Type | Field and Description |
|---|---|
FlowContext |
ExceptionHandlingFlowContext.initializationParent |
static FlowContext |
FlowContext.NotContinuableContext |
FlowContext |
TryFlowContext.outerTryContext
For a try statement nested inside a finally block this reference
points to the flow context of the outer try block, for access to its initsOnFinally.
|
FlowContext |
FlowContext.parent |
FlowContext |
FinallyFlowContext.tryContext |
| Modifier and Type | Method and Description |
|---|---|
FlowContext |
InitializationFlowContext.getInitializationContext() |
FlowContext |
ExceptionHandlingFlowContext.getInitializationContext() |
FlowContext |
FlowContext.getInitializationContext()
Answer flow context that corresponds to initialization.
|
FlowContext |
FlowContext.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.
|
FlowContext |
FlowContext.getTargetContextForBreakLabel(char[] labelName) |
FlowContext |
FlowContext.getTargetContextForContinueLabel(char[] labelName) |
FlowContext |
FlowContext.getTargetContextForDefaultBreak() |
FlowContext |
FlowContext.getTargetContextForDefaultContinue() |
| Modifier and Type | Method and Description |
|---|---|
void |
InitializationFlowContext.checkInitializerExceptions(BlockScope currentScope,
FlowContext initializerContext,
FlowInfo flowInfo) |
void |
LoopingFlowContext.recordBreakTo(FlowContext targetContext) |
void |
FlowContext.recordBreakTo(FlowContext targetContext) |
void |
LoopingFlowContext.recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo) |
void |
FlowContext.recordContinueFrom(FlowContext innerFlowContext,
FlowInfo flowInfo) |
| Constructor and Description |
|---|
ExceptionHandlingFlowContext(FlowContext parent,
ASTNode associatedNode,
ReferenceBinding[] handledExceptions,
FlowContext initializationParent,
BlockScope scope,
UnconditionalFlowInfo flowInfo) |
ExceptionHandlingFlowContext(FlowContext parent,
TryStatement tryStatement,
ReferenceBinding[] handledExceptions,
int[] exceptionToCatchBlockMap,
FlowContext initializationParent,
BlockScope scope,
FlowInfo flowInfo) |
FinallyFlowContext(FlowContext parent,
ASTNode associatedNode,
ExceptionHandlingFlowContext tryContext) |
FlowContext(FlowContext parent,
ASTNode associatedNode) |
InitializationFlowContext(FlowContext parent,
ASTNode associatedNode,
FlowInfo initsBeforeContext,
FlowContext initializationParent,
BlockScope scope) |
InsideSubRoutineFlowContext(FlowContext parent,
ASTNode associatedNode) |
LabelFlowContext(FlowContext parent,
ASTNode associatedNode,
char[] labelName,
BranchLabel breakLabel,
BlockScope scope) |
LoopingFlowContext(FlowContext parent,
FlowInfo upstreamNullFlowInfo,
ASTNode associatedNode,
BranchLabel breakLabel,
BranchLabel continueLabel,
Scope associatedScope,
boolean isPreTest) |
SwitchFlowContext(FlowContext parent,
ASTNode associatedNode,
BranchLabel breakLabel,
boolean isPreTest) |
TryFlowContext(FlowContext parent,
ASTNode associatedNode) |
| 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.
|
Copyright © 2015. All rights reserved.