public final class SideEffectAnalysis extends com.sun.source.util.TreeScanner<Void,Void>
hasSideEffect(ExpressionTree)
method.
A side-effect is what that would change the state of the program. Here are examples of expressions that could possibly change the state of a program.
Everything besides the above examples is considered side-effect free.
The analysis in this class initially assumes that the expression is side-effect free and then tries to prove it wrong.
Modifier and Type | Method and Description |
---|---|
static boolean |
hasSideEffect(com.sun.source.tree.ExpressionTree expression)
Tries to establish whether
expression is side-effect free. |
Void |
visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree tree,
Void unused) |
Void |
visitMethodInvocation(com.sun.source.tree.MethodInvocationTree tree,
Void unused) |
Void |
visitNewClass(com.sun.source.tree.NewClassTree tree,
Void unused) |
Void |
visitUnary(com.sun.source.tree.UnaryTree tree,
Void unused) |
reduce, scan, scan, visitAnnotatedType, visitAnnotation, visitArrayAccess, visitArrayType, visitAssert, visitAssignment, visitBinary, visitBlock, visitBreak, visitCase, visitCatch, visitClass, visitCompilationUnit, visitConditionalExpression, visitContinue, visitDoWhileLoop, visitEmptyStatement, visitEnhancedForLoop, visitErroneous, visitExports, visitExpressionStatement, visitForLoop, visitIdentifier, visitIf, visitImport, visitInstanceOf, visitIntersectionType, visitLabeledStatement, visitLambdaExpression, visitLiteral, visitMemberReference, visitMemberSelect, visitMethod, visitModifiers, visitModule, visitNewArray, visitOpens, visitOther, visitPackage, visitParameterizedType, visitParenthesized, visitPrimitiveType, visitProvides, visitRequires, visitReturn, visitSwitch, visitSynchronized, visitThrow, visitTry, visitTypeCast, visitTypeParameter, visitUnionType, visitUses, visitVariable, visitWhileLoop, visitWildcard
public static boolean hasSideEffect(com.sun.source.tree.ExpressionTree expression)
expression
is side-effect free. The heuristics here are very
conservative.public Void visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree tree, Void unused)
public Void visitMethodInvocation(com.sun.source.tree.MethodInvocationTree tree, Void unused)
Copyright © 2021 Google LLC. All rights reserved.