Package jadx.core.dex.visitors.blocks
Class BlockExceptionHandler
java.lang.Object
jadx.core.dex.visitors.blocks.BlockExceptionHandler
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static BlockNodeadjustTopBlock(BlockNode topBlock) private static voidcheckForMultiCatch(MethodNode mth, List<TryCatchBlockAttr> tryBlocks) private static booleancheckTryCatchRelation(List<TryCatchBlockAttr> tryBlocks, TryCatchBlockAttr outerTryBlock, TryCatchBlockAttr innerTryBlock) private static voidclearTryBlocks(MethodNode mth, List<TryCatchBlockAttr> tryBlocks) private static booleancombineTryCatchBlocks(List<TryCatchBlockAttr> tryBlocks) private static intcompareByTypeAndName(Comparator<ArgType> comparator, ClassInfo first, ClassInfo second) private static voidconnectExcHandlers(MethodNode mth, List<TryCatchBlockAttr> tryBlocks) Wrap try blocks with top/bottom splitter and connect them to handler block.private static voidconnectSplittersAndHandlers(TryCatchBlockAttr tryCatchBlock, BlockNode topSplitterBlock, @Nullable BlockNode bottomSplitterBlock) private static voidfixMoveExceptionInsn(BlockNode block, ExcHandlerAttr excHandlerAttr) private static @Nullable CatchAttrgetCommonCatchAttr(BlockNode block) private static BlockNodegetTopSplitterBlock(MethodNode mth, BlockNode top) private static voidisHandlersIntersects(TryCatchBlockAttr outerTryBlock) private static booleanmergeMultiCatch(MethodNode mth, TryCatchBlockAttr tryCatch) private static List<TryCatchBlockAttr> static booleanprocess(MethodNode mth) private static voidprivate static voidremoveExcHandler(MethodNode mth, ExceptionHandler excHandler) private static voidremoveMonitorExitFromExcHandler(MethodNode mth, ExceptionHandler excHandler) private static voidremoveTmpConnection(BlockNode block) private static voidremoveUnusedExcHandlers(MethodNode mth, List<TryCatchBlockAttr> tryBlocks, BlockSet blocks) Remove excHandlers that were not used when connecting.private static @Nullable BlockNodesearchBottomBlock(MethodNode mth, List<BlockNode> blocks) private static BlockNodesearchTopBlock(MethodNode mth, List<BlockNode> blocks) private static voidsortHandlers(MethodNode mth, List<TryCatchBlockAttr> tryBlocks) private static booleanwrapBlocksWithTryCatch(MethodNode mth, TryCatchBlockAttr tryCatchBlock)
-
Field Details
-
LOG
private static final org.slf4j.Logger LOG
-
-
Constructor Details
-
BlockExceptionHandler
public BlockExceptionHandler()
-
-
Method Details
-
process
-
connectExcHandlers
Wrap try blocks with top/bottom splitter and connect them to handler block. Sometimes try block can be handler block itself and should be connected before wrapping. Use queue for postpone try blocks not ready for wrap. -
processCatchAttr
-
getCommonCatchAttr
-
initExcHandlers
-
removeTmpConnection
-
prepareTryBlocks
-
clearTryBlocks
-
combineTryCatchBlocks
-
checkTryCatchRelation
private static boolean checkTryCatchRelation(List<TryCatchBlockAttr> tryBlocks, TryCatchBlockAttr outerTryBlock, TryCatchBlockAttr innerTryBlock) -
isHandlersIntersects
@NotNull private static @NotNull Predicate<BlockNode> isHandlersIntersects(TryCatchBlockAttr outerTryBlock) -
removeExcHandler
-
wrapBlocksWithTryCatch
-
getTopSplitterBlock
-
searchTopBlock
-
adjustTopBlock
-
searchBottomBlock
@Nullable private static @Nullable BlockNode searchBottomBlock(MethodNode mth, List<BlockNode> blocks) -
connectSplittersAndHandlers
private static void connectSplittersAndHandlers(TryCatchBlockAttr tryCatchBlock, BlockNode topSplitterBlock, @Nullable @Nullable BlockNode bottomSplitterBlock) -
fixMoveExceptionInsn
-
removeMonitorExitFromExcHandler
-
checkForMultiCatch
-
mergeMultiCatch
-
sortHandlers
-
compareByTypeAndName
private static int compareByTypeAndName(Comparator<ArgType> comparator, ClassInfo first, ClassInfo second) -
removeUnusedExcHandlers
private static void removeUnusedExcHandlers(MethodNode mth, List<TryCatchBlockAttr> tryBlocks, BlockSet blocks) Remove excHandlers that were not used when connecting. Check first if the blocks are unreachable.
-