Class IfRegionMaker

java.lang.Object
jadx.core.dex.visitors.regions.maker.IfRegionMaker

final class IfRegionMaker extends Object
  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • mth

      private final MethodNode mth
    • regionMaker

      private final RegionMaker regionMaker
  • Constructor Details

  • Method Details

    • process

      @Nullable @Nullable BlockNode process(IRegion currentRegion, BlockNode block, IfNode ifnode, RegionStack stack)
    • buildIfInfo

      @NotNull @NotNull IfInfo buildIfInfo(LoopRegion loopRegion)
    • makeIfInfo

      @Nullable static @Nullable IfInfo makeIfInfo(MethodNode mth, BlockNode ifBlock)
    • searchNestedIf

      static IfInfo searchNestedIf(IfInfo info)
    • restructureIf

      IfInfo restructureIf(BlockNode block, IfInfo info)
    • findOutBlock

      @Nullable static @Nullable BlockNode findOutBlock(MethodNode mth, BlockNode thenBlock, BlockNode elseBlock)
    • isCandidateForOutBlock

      static boolean isCandidateForOutBlock(MethodNode mth, BlockNode thenBlock, BlockNode elseBlock, BlockNode candidate)
    • isBadBranchBlock

      private static boolean isBadBranchBlock(IfInfo info, BlockNode block)
    • allPathsFromIf

      private static boolean allPathsFromIf(BlockNode block, IfInfo info)
    • findScopeOutBlock

      @Nullable private @Nullable BlockNode findScopeOutBlock(BlockNode startBlock)
      if startBlock is in a (try) scope, find the scope end as outBlock
    • mergeNestedIfNodes

      static IfInfo mergeNestedIfNodes(IfInfo currentIf)
    • checkForTernaryInCondition

      private static IfInfo checkForTernaryInCondition(IfInfo currentIf)
    • mergeTernaryConditions

      private static IfInfo mergeTernaryConditions(IfInfo currentIf, IfInfo nextThen, IfInfo nextElse)
    • isInversionNeeded

      private static boolean isInversionNeeded(IfInfo currentIf, IfInfo nextIf)
    • canMerge

      private static boolean canMerge(IfInfo a, IfInfo b, boolean followThenBranch)
    • checkConditionBranches

      private static boolean checkConditionBranches(BlockNode from, BlockNode to)
    • mergeIfInfo

      static IfInfo mergeIfInfo(IfInfo first, IfInfo second, boolean followThenBranch)
    • getBranchBlock

      private static BlockNode getBranchBlock(BlockNode first, BlockNode second, Set<BlockNode> skipBlocks, MethodNode mth)
    • confirmMerge

      static void confirmMerge(IfInfo info)
    • getNextIf

      private static IfInfo getNextIf(IfInfo info, BlockNode block)
    • canSelectNext

      private static boolean canSelectNext(IfInfo info, BlockNode block)
    • getNextIfNodeInfo

      private static IfInfo getNextIfNodeInfo(IfInfo info, BlockNode block)
    • getNextBlockInIfSuccessorChain

      @Nullable private static @Nullable BlockNode getNextBlockInIfSuccessorChain(BlockNode block)
      Allow singular successor to block or 2 successors where one is a EXC_BOTTOM_SPLITTER
    • checkInsnsInline

      private static boolean checkInsnsInline(BlockNode block, BlockNode next, List<InsnNode> forceInlineInsns)
      Check that all instructions can be inlined