Package jadx.core.utils
Class RegionUtils
java.lang.Object
jadx.core.utils.RegionUtils
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidaddToAll(MethodNode mth, IContainer container, AFlag flag) collectInsns(MethodNode mth, IContainer container) static voidgetAllRegionBlocks(IContainer container, Set<IBlock> blocks) static IContainergetBlockContainer(IContainer container, IBlock block) static List<IContainer> getExcHandlersForRegion(IContainer region) static @Nullable IBlockgetFirstBlock(IContainer container) static @Nullable BlockNodegetFirstBlockNode(IContainer container) private static @Nullable BlockNodegetFirstBlockNode(List<IContainer> containers) static @Nullable InsnNodegetFirstInsn(IContainer container) static intgetFirstSourceLine(IContainer container) private static intgetFirstSourceLine(List<IContainer> containers) static IBlockgetLastBlock(IContainer container) static InsnNodegetLastInsn(IContainer container) static BlockInsnPairgetLastInsnWithBlock(IContainer container) getLoopsStartInRegion(MethodNode mth, IRegion r) static @Nullable IContainergetNextContainer(MethodNode mth, IRegion region) static IContainergetSingleSubBlock(IContainer container) static booleanhasBreakInsn(IContainer container) static booleanhasExitBlock(IContainer container) Return true if last block in region has no successors or jump out insn (return or break)private static booleanhasExitBlock(IContainer rootContainer, IContainer container) static booleanhasExitEdge(IContainer container) static booleanhasPathThroughBlock(BlockNode block, IContainer cont) private static IContainerignoreSimpleRegionWrapper(IContainer container) static intinsnsCount(IContainer container) static booleanisBlocksInSameRegion(MethodNode mth, BlockNode firstBlock, BlockNode secondBlock) Check if two blocks in same region on same level TODO: Add 'region' annotation to all blocks to speed up checksstatic booleanisDominatedBy(BlockNode dom, IContainer cont) static booleanisEmpty(IContainer container) static booleanisExitBlock(MethodNode mth, IContainer container) private static booleanisInsnExitContainer(IContainer rootContainer, IBlock block) static booleanisPathExists(BlockNode block, IContainer container) Check if path exists from block to container start.static booleanisRegionContainsBlock(IContainer container, BlockNode block) private static booleanisRegionContainsExcHandlerRegion(IContainer container, IRegion region) static booleanisRegionContainsRegion(IContainer container, IRegion region) Check ifregioncontains incontainer.static booleannotEmpty(@Nullable IContainer container) protected static StringunknownContainerType(IContainer container) static voidvisitBlockNodes(MethodNode mth, IContainer container, Consumer<BlockNode> visitor) static voidvisitBlocks(MethodNode mth, IContainer container, Consumer<IBlock> visitor) static voidvisitRegions(MethodNode mth, IContainer container, Predicate<IRegion> visitor)
-
Constructor Details
-
RegionUtils
private RegionUtils()
-
-
Method Details
-
hasExitEdge
-
getFirstInsn
-
getFirstBlock
-
getFirstBlockNode
-
getFirstBlockNode
-
getFirstSourceLine
-
getFirstSourceLine
-
getLastInsn
-
getLastInsnWithBlock
-
getLastBlock
-
isExitBlock
-
hasExitBlock
Return true if last block in region has no successors or jump out insn (return or break) -
hasExitBlock
-
isInsnExitContainer
-
hasBreakInsn
-
insnsCount
-
collectInsns
-
isEmpty
-
notEmpty
-
getAllRegionBlocks
-
isRegionContainsBlock
-
getSingleSubBlock
-
ignoreSimpleRegionWrapper
-
getExcHandlersForRegion
-
getLoopsStartInRegion
-
isRegionContainsExcHandlerRegion
-
isRegionContainsRegion
Check ifregioncontains incontainer.
For simple region (not from exception handlers) search in parents otherwise run recursive search because exception handlers can have several parents -
getBlockContainer
-
isBlocksInSameRegion
public static boolean isBlocksInSameRegion(MethodNode mth, BlockNode firstBlock, BlockNode secondBlock) Check if two blocks in same region on same level TODO: Add 'region' annotation to all blocks to speed up checks -
isDominatedBy
-
hasPathThroughBlock
-
isPathExists
Check if path exists from block to container start. Return false if block is inside container. -
unknownContainerType
-
visitBlocks
-
visitBlockNodes
public static void visitBlockNodes(MethodNode mth, IContainer container, Consumer<BlockNode> visitor) -
visitRegions
-
getNextContainer
-
addToAll
-