Class IfRegionMaker
java.lang.Object
jadx.core.dex.visitors.regions.maker.IfRegionMaker
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final org.slf4j.Loggerprivate final MethodNodeprivate final RegionMaker -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static booleanallPathsFromIf(BlockNode block, IfInfo info) (package private) @NotNull IfInfobuildIfInfo(LoopRegion loopRegion) private static booleanprivate static booleancanSelectNext(IfInfo info, BlockNode block) private static booleancheckConditionBranches(BlockNode from, BlockNode to) private static IfInfocheckForTernaryInCondition(IfInfo currentIf) private static booleancheckInsnsInline(BlockNode block, BlockNode next, List<InsnNode> forceInlineInsns) Check that all instructions can be inlined(package private) static voidconfirmMerge(IfInfo info) (package private) static @Nullable BlockNodefindOutBlock(MethodNode mth, BlockNode thenBlock, BlockNode elseBlock) private @Nullable BlockNodefindScopeOutBlock(BlockNode startBlock) if startBlock is in a (try) scope, find the scope end as outBlockprivate static BlockNodegetBranchBlock(BlockNode first, BlockNode second, Set<BlockNode> skipBlocks, MethodNode mth) private static @Nullable BlockNodeAllow singular successor to block or 2 successors where one is a EXC_BOTTOM_SPLITTERprivate static IfInfoprivate static IfInfogetNextIfNodeInfo(IfInfo info, BlockNode block) private static booleanisBadBranchBlock(IfInfo info, BlockNode block) (package private) static booleanisCandidateForOutBlock(MethodNode mth, BlockNode thenBlock, BlockNode elseBlock, BlockNode candidate) private static booleanisInversionNeeded(IfInfo currentIf, IfInfo nextIf) (package private) static @Nullable IfInfomakeIfInfo(MethodNode mth, BlockNode ifBlock) (package private) static IfInfomergeIfInfo(IfInfo first, IfInfo second, boolean followThenBranch) (package private) static IfInfomergeNestedIfNodes(IfInfo currentIf) private static IfInfomergeTernaryConditions(IfInfo currentIf, IfInfo nextThen, IfInfo nextElse) (package private) @Nullable BlockNodeprocess(IRegion currentRegion, BlockNode block, IfNode ifnode, RegionStack stack) (package private) IfInforestructureIf(BlockNode block, IfInfo info) (package private) static IfInfosearchNestedIf(IfInfo info)
-
Field Details
-
LOG
private static final org.slf4j.Logger LOG -
mth
-
regionMaker
-
-
Constructor Details
-
IfRegionMaker
IfRegionMaker(MethodNode mth, RegionMaker regionMaker)
-
-
Method Details
-
process
@Nullable @Nullable BlockNode process(IRegion currentRegion, BlockNode block, IfNode ifnode, RegionStack stack) -
buildIfInfo
-
makeIfInfo
-
searchNestedIf
-
restructureIf
-
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
-
allPathsFromIf
-
findScopeOutBlock
if startBlock is in a (try) scope, find the scope end as outBlock -
mergeNestedIfNodes
-
checkForTernaryInCondition
-
mergeTernaryConditions
-
isInversionNeeded
-
canMerge
-
checkConditionBranches
-
mergeIfInfo
-
getBranchBlock
-
confirmMerge
-
getNextIf
-
canSelectNext
-
getNextIfNodeInfo
-
getNextBlockInIfSuccessorChain
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
-