Package jadx.core.utils
Class RegionUtils
- java.lang.Object
-
- jadx.core.utils.RegionUtils
-
public class RegionUtils extends java.lang.Object
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.util.List<InsnNode>collectInsns(MethodNode mth, IContainer container)static voidgetAllRegionBlocks(IContainer container, java.util.Set<IBlock> blocks)static IContainergetBlockContainer(IContainer container, BlockNode block)static java.util.List<IContainer>getExcHandlersForRegion(IContainer region)static @Nullable InsnNodegetFirstInsn(IContainer container)static intgetFirstSourceLine(IContainer container)static IBlockgetLastBlock(IContainer container)static InsnNodegetLastInsn(IContainer container)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)static booleanhasExitEdge(IContainer container)static booleanhasPathThroughBlock(BlockNode block, IContainer cont)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)static booleanisRegionContainsBlock(IContainer container, BlockNode block)static booleanisRegionContainsRegion(IContainer container, IRegion region)Check ifregioncontains incontainer.static booleannotEmpty(@Nullable IContainer container)protected static java.lang.StringunknownContainerType(IContainer container)static voidvisitBlocks(MethodNode mth, IContainer container, java.util.function.Consumer<IBlock> visitor)static voidvisitRegions(MethodNode mth, IContainer container, java.util.function.Predicate<IRegion> visitor)
-
-
-
Method Detail
-
hasExitEdge
public static boolean hasExitEdge(IContainer container)
-
getFirstInsn
@Nullable public static @Nullable InsnNode getFirstInsn(IContainer container)
-
getFirstSourceLine
public static int getFirstSourceLine(IContainer container)
-
getLastInsn
public static InsnNode getLastInsn(IContainer container)
-
getLastBlock
public static IBlock getLastBlock(IContainer container)
-
isExitBlock
public static boolean isExitBlock(MethodNode mth, IContainer container)
-
hasExitBlock
public static boolean hasExitBlock(IContainer container)
Return true if last block in region has no successors or jump out insn (return or break)
-
hasBreakInsn
public static boolean hasBreakInsn(IContainer container)
-
insnsCount
public static int insnsCount(IContainer container)
-
collectInsns
public static java.util.List<InsnNode> collectInsns(MethodNode mth, IContainer container)
-
isEmpty
public static boolean isEmpty(IContainer container)
-
notEmpty
public static boolean notEmpty(@Nullable @Nullable IContainer container)
-
getAllRegionBlocks
public static void getAllRegionBlocks(IContainer container, java.util.Set<IBlock> blocks)
-
isRegionContainsBlock
public static boolean isRegionContainsBlock(IContainer container, BlockNode block)
-
getSingleSubBlock
public static IContainer getSingleSubBlock(IContainer container)
-
getExcHandlersForRegion
public static java.util.List<IContainer> getExcHandlersForRegion(IContainer region)
-
isRegionContainsRegion
public static boolean isRegionContainsRegion(IContainer container, IRegion region)
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
public static IContainer getBlockContainer(IContainer container, BlockNode block)
-
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
public static boolean isDominatedBy(BlockNode dom, IContainer cont)
-
hasPathThroughBlock
public static boolean hasPathThroughBlock(BlockNode block, IContainer cont)
-
unknownContainerType
protected static java.lang.String unknownContainerType(IContainer container)
-
visitBlocks
public static void visitBlocks(MethodNode mth, IContainer container, java.util.function.Consumer<IBlock> visitor)
-
visitRegions
public static void visitRegions(MethodNode mth, IContainer container, java.util.function.Predicate<IRegion> visitor)
-
getNextContainer
@Nullable public static @Nullable IContainer getNextContainer(MethodNode mth, IRegion region)
-
-