Class RegionUtils


  • public class RegionUtils
    extends java.lang.Object
    • 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)
      • 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)
      • 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)
      • getExcHandlersForRegion

        public static java.util.List<IContainer> getExcHandlersForRegion​(IContainer 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
      • 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
      • 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)