public class RegionUtils
extends java.lang.Object
| Modifier and Type | Method and Description |
|---|---|
static void |
getAllRegionBlocks(IContainer container,
java.util.Set<IBlock> blocks) |
static IContainer |
getBlockContainer(IContainer container,
BlockNode block) |
static java.util.List<IContainer> |
getExcHandlersForRegion(IContainer region) |
static @Nullable InsnNode |
getFirstInsn(IContainer container) |
static int |
getFirstSourceLine(IContainer container) |
static IBlock |
getLastBlock(IContainer container) |
static InsnNode |
getLastInsn(IContainer container) |
static boolean |
hasBreakInsn(IContainer container) |
static boolean |
hasExitBlock(IContainer container)
Return true if last block in region has no successors or jump out insn (return or break)
|
static boolean |
hasExitEdge(IContainer container) |
static boolean |
hasPathThroughBlock(BlockNode block,
IContainer cont) |
static int |
insnsCount(IContainer container) |
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
|
static boolean |
isDominatedBy(BlockNode dom,
IContainer cont) |
static boolean |
isEmpty(IContainer container) |
static boolean |
isExitBlock(MethodNode mth,
IContainer container) |
static boolean |
isRegionContainsBlock(IContainer container,
BlockNode block) |
static boolean |
isRegionContainsRegion(IContainer container,
IRegion region)
Check if
region contains in container. |
static boolean |
notEmpty(@Nullable IContainer container) |
protected static java.lang.String |
unknownContainerType(IContainer container) |
static void |
visitBlocks(MethodNode mth,
IContainer container,
java.util.function.Consumer<IBlock> visitor) |
public static boolean hasExitEdge(IContainer container)
@Nullable public static @Nullable InsnNode getFirstInsn(IContainer container)
public static int getFirstSourceLine(IContainer container)
public static InsnNode getLastInsn(IContainer container)
public static IBlock getLastBlock(IContainer container)
public static boolean isExitBlock(MethodNode mth, IContainer container)
public static boolean hasExitBlock(IContainer container)
public static boolean hasBreakInsn(IContainer container)
public static int insnsCount(IContainer container)
public static boolean isEmpty(IContainer container)
public static boolean notEmpty(@Nullable
@Nullable IContainer container)
public static void getAllRegionBlocks(IContainer container, java.util.Set<IBlock> blocks)
public static boolean isRegionContainsBlock(IContainer container, BlockNode block)
public static java.util.List<IContainer> getExcHandlersForRegion(IContainer region)
public static boolean isRegionContainsRegion(IContainer container, IRegion region)
region contains in container.
public static IContainer getBlockContainer(IContainer container, BlockNode block)
public static boolean isBlocksInSameRegion(MethodNode mth, BlockNode firstBlock, BlockNode secondBlock)
public static boolean isDominatedBy(BlockNode dom, IContainer cont)
public static boolean hasPathThroughBlock(BlockNode block, IContainer cont)
protected static java.lang.String unknownContainerType(IContainer container)
public static void visitBlocks(MethodNode mth, IContainer container, java.util.function.Consumer<IBlock> visitor)