Class SynchronizedBlockDuplicator
java.lang.Object
com.ibm.wala.cast.tree.rewrite.CAstRewriter<CAstRewriter.RewriteContext<com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>
com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator
public class SynchronizedBlockDuplicator
extends CAstRewriter<CAstRewriter.RewriteContext<com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>
transforms each synchronized block to execute under a conditional test calling some method m(),
where the block is duplicated in both the if and else branches. The transformation enables a
static analysis to separately analyze the synchronized block for true and false return values
from m().
See "Finding Concurrency-Related Bugs using Random Isolation," Kidd et al., VMCAI'09, Section 3
-
Nested Class Summary
Nested classes/interfaces inherited from class CAstRewriter
CAstRewriter.CopyKey<Self>, CAstRewriter.Rewrite, CAstRewriter.RewriteContext<K> -
Field Summary
Fields inherited from class CAstRewriter
Ast, DEBUG, recursive, rootContext -
Constructor Summary
ConstructorsConstructorDescriptionSynchronizedBlockDuplicator(CAst Ast, boolean recursive, CallSiteReference f) -
Method Summary
Modifier and TypeMethodDescriptionprotected CAstNodecopyNodes(CAstNode n, CAstControlFlowMap cfg, CAstRewriter.RewriteContext<com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey> c, Map<Pair<CAstNode, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, CAstNode> nodeMap) rewrite the CAst rooted at root under some context, returning the node at the root of the rewritten tree.protected CAstNodeflowOutTo(Map<Pair<CAstNode, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, CAstNode> nodeMap, CAstNode oldSource, Object label, CAstNode oldTarget, CAstControlFlowMap orig, CAstSourcePositionMap src) inCAstRewriter.copyFlow(Map, CAstControlFlowMap, CAstSourcePositionMap), if the source of some original CFG edge is replicated, but we find no replica for the target, what node should be the target of the CFG edge in the rewritten AST? By default, just uses the original target.translate(CAstEntity original) Methods inherited from class CAstRewriter
copyChildren, copyChildrenArray, copyChildrenArrayAndTargets, copyFlow, copySource, copySubtreesIntoNewNode, copySubtreesIntoNewNode, copyTypes, rewrite, rewrite
-
Constructor Details
-
SynchronizedBlockDuplicator
-
-
Method Details
-
translate
-
flowOutTo
protected CAstNode flowOutTo(Map<Pair<CAstNode, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, CAstNode> nodeMap, CAstNode oldSource, Object label, CAstNode oldTarget, CAstControlFlowMap orig, CAstSourcePositionMap src) Description copied from class:CAstRewriterinCAstRewriter.copyFlow(Map, CAstControlFlowMap, CAstSourcePositionMap), if the source of some original CFG edge is replicated, but we find no replica for the target, what node should be the target of the CFG edge in the rewritten AST? By default, just uses the original target.- Overrides:
flowOutToin classCAstRewriter<CAstRewriter.RewriteContext<com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>
-
copyNodes
protected CAstNode copyNodes(CAstNode n, CAstControlFlowMap cfg, CAstRewriter.RewriteContext<com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey> c, Map<Pair<CAstNode, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, CAstNode> nodeMap) Description copied from class:CAstRewriterrewrite the CAst rooted at root under some context, returning the node at the root of the rewritten tree. mutate nodeMap in the process, indicating how (original node, copy key) pairs are mapped to nodes in the rewritten tree.- Specified by:
copyNodesin classCAstRewriter<CAstRewriter.RewriteContext<com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>, com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator.UnwindKey>
-