Class RegionUtils

java.lang.Object
jadx.core.utils.RegionUtils

public class RegionUtils extends Object
  • Constructor Details

    • RegionUtils

      private RegionUtils()
  • Method Details

    • hasExitEdge

      public static boolean hasExitEdge(IContainer container)
    • getFirstInsn

      @Nullable public static @Nullable InsnNode getFirstInsn(IContainer container)
    • getFirstBlock

      @Nullable public static @Nullable IBlock getFirstBlock(IContainer container)
    • getFirstBlockNode

      @Nullable public static @Nullable BlockNode getFirstBlockNode(IContainer container)
    • getFirstBlockNode

      @Nullable private static @Nullable BlockNode getFirstBlockNode(List<IContainer> containers)
    • getFirstSourceLine

      public static int getFirstSourceLine(IContainer container)
    • getFirstSourceLine

      private static int getFirstSourceLine(List<IContainer> containers)
    • getLastInsn

      public static InsnNode getLastInsn(IContainer container)
    • getLastInsnWithBlock

      public static BlockInsnPair getLastInsnWithBlock(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)
    • hasExitBlock

      private static boolean hasExitBlock(IContainer rootContainer, IContainer container)
    • isInsnExitContainer

      private static boolean isInsnExitContainer(IContainer rootContainer, IBlock block)
    • hasBreakInsn

      public static boolean hasBreakInsn(IContainer container)
    • insnsCount

      public static int insnsCount(IContainer container)
    • collectInsns

      public static 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, Set<IBlock> blocks)
    • isRegionContainsBlock

      public static boolean isRegionContainsBlock(IContainer container, BlockNode block)
    • getSingleSubBlock

      public static IContainer getSingleSubBlock(IContainer container)
    • ignoreSimpleRegionWrapper

      private static IContainer ignoreSimpleRegionWrapper(IContainer container)
    • getExcHandlersForRegion

      public static List<IContainer> getExcHandlersForRegion(IContainer region)
    • getLoopsStartInRegion

      public static List<LoopInfo> getLoopsStartInRegion(MethodNode mth, IRegion r)
    • isRegionContainsExcHandlerRegion

      private static boolean isRegionContainsExcHandlerRegion(IContainer container, IRegion region)
    • isRegionContainsRegion

      public static boolean isRegionContainsRegion(IContainer container, IRegion region)
      Check if region contains in container.
      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, IBlock 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)
    • isPathExists

      public static boolean isPathExists(BlockNode block, IContainer container)
      Check if path exists from block to container start. Return false if block is inside container.
    • unknownContainerType

      protected static String unknownContainerType(IContainer container)
    • visitBlocks

      public static void visitBlocks(MethodNode mth, IContainer container, Consumer<IBlock> visitor)
    • visitBlockNodes

      public static void visitBlockNodes(MethodNode mth, IContainer container, Consumer<BlockNode> visitor)
    • visitRegions

      public static void visitRegions(MethodNode mth, IContainer container, Predicate<IRegion> visitor)
    • getNextContainer

      @Nullable public static @Nullable IContainer getNextContainer(MethodNode mth, IRegion region)
    • addToAll

      public static void addToAll(MethodNode mth, IContainer container, AFlag flag)