Package jadx.core.dex.visitors.blocks
Class BlockSplitter
java.lang.Object
jadx.core.dex.visitors.AbstractVisitor
jadx.core.dex.visitors.blocks.BlockSplitter
- All Implemented Interfaces:
IDexTreeVisitor
-
Field Summary
FieldsModifier and TypeFieldDescriptionLeave these instructions alone in the block nodeSplit without connecting to the next block -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static voidaddTempConnectionsForExcHandlers(MethodNode mth, Map<Integer, BlockNode> blocksMap) Connect exception handlers to the throw block.(package private) static BlockNodeblockSplitTop(MethodNode mth, BlockNode block) private static booleancanRemoveBlock(BlockNode block) (package private) static voidcollectSuccessors(BlockNode startBlock, BlockNode methodEnterBlock, Set<BlockNode> toRemove) static void(package private) static BlockNodeconnectNewBlock(MethodNode mth, BlockNode block, int offset) (package private) static voidcopyBlockData(BlockNode from, BlockNode to) copyBlocksTree(MethodNode mth, List<BlockNode> blocks) (package private) static voiddetachBlock(BlockNode block) static voidprivate static voidprivate static BlockNodeprivate static BlockNodegetNewBlock(BlockNode block, Map<BlockNode, BlockNode> map) private static voidInit 'then' and 'else' blocks for 'if' instruction.static BlockNodeinsertBlockBetween(MethodNode mth, BlockNode source, BlockNode target) private static booleanstatic booleanisSeparate(InsnType insnType) private static booleanisSplitByJump(InsnNode prevInsn, InsnNode currentInsn) static voidremoveConnection(BlockNode from, BlockNode to) (package private) static booleanremoveEmptyBlock(BlockNode block) (package private) static booleanprivate static voidremoveInsns(MethodNode mth) private static voidremoveJumpAttr(MethodNode mth) static voidremovePredecessors(BlockNode block) static voidreplaceConnection(BlockNode source, BlockNode oldDest, BlockNode newDest) (package private) static voidreplaceTarget(BlockNode source, BlockNode oldTarget, BlockNode newTarget) private static voidsetupConnectionsFromJumps(MethodNode mth, Map<Integer, BlockNode> blocksMap) private static void(package private) static BlockNodestartNewBlock(MethodNode mth, int offset) voidvisit(MethodNode mth) Visit methodMethods inherited from class jadx.core.dex.visitors.AbstractVisitor
getName, init, toString, visit
-
Field Details
-
SEPARATE_INSNS
Leave these instructions alone in the block node -
SPLIT_WITHOUT_CONNECT
Split without connecting to the next block
-
-
Constructor Details
-
BlockSplitter
public BlockSplitter()
-
-
Method Details
-
isSeparate
-
visit
Description copied from interface:IDexTreeVisitorVisit method- Specified by:
visitin interfaceIDexTreeVisitor- Overrides:
visitin classAbstractVisitor
-
splitBasicBlocks
-
initBlocksInTargetNodes
Init 'then' and 'else' blocks for 'if' instruction. -
connectNewBlock
-
startNewBlock
-
connect
-
removeConnection
-
removePredecessors
-
replaceConnection
-
insertBlockBetween
-
blockSplitTop
-
copyBlockData
-
copyBlocksTree
-
getNewBlock
-
replaceTarget
-
setupConnectionsFromJumps
-
addTempConnectionsForExcHandlers
private static void addTempConnectionsForExcHandlers(MethodNode mth, Map<Integer, BlockNode> blocksMap) Connect exception handlers to the throw block. This temporary connection is necessary to build close to a final dominator tree. Will be used and removed injadx.core.dex.visitors.blocks.BlockExceptionHandler -
setupExitConnections
-
isSplitByJump
-
isDoWhile
-
getBlock
-
expandMoveMulti
-
removeJumpAttr
-
removeInsns
-
detachMarkedBlocks
-
removeEmptyDetachedBlocks
-
removeEmptyBlock
-
canRemoveBlock
-
collectSuccessors
-
detachBlock
-