Class LoopRegionMaker
java.lang.Object
jadx.core.dex.visitors.regions.maker.LoopRegionMaker
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final IfRegionMakerprivate final MethodNodeprivate final RegionMaker -
Constructor Summary
ConstructorsConstructorDescriptionLoopRegionMaker(MethodNode mth, RegionMaker regionMaker, IfRegionMaker ifMaker) -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddBreakLabel(BlockNode blockOnLoop, BlockNode exit, InsnNode breakInsn) private booleancanInsertBreak(BlockNode exit) private static booleancanInsertContinue(BlockNode pred, List<BlockNode> predecessors, BlockNode loopEnd, Set<BlockNode> loopExitNodes) private booleancheckLoopExits(LoopInfo loop, BlockNode mainExitBlock) private booleaninExceptionHandlerBlocks(BlockNode loopEnd) private static voidinsertContinue(LoopInfo loop) private booleaninsertLoopBreak(RegionStack stack, LoopInfo loop, BlockNode loopExit, BlockNode blockOnLoop, Edge exitEdge) private static booleanisDominatedOnBlocks(BlockNode dom, List<BlockNode> blocks) private static booleanisExitAtLoopEnd(BlockNode exit, LoopInfo loop) private booleanisNestedIfCross(BlockNode crossing, Queue<Edge> edgesToCheck) private booleanisOuterOutblock(BlockNode crossing, LoopInfo loop) private BlockNodemakeEndlessLoop(IRegion curRegion, RegionStack stack, LoopInfo loop, BlockNode loopStart) private LoopRegionmakeLoopRegion(IRegion curRegion, LoopInfo loop, List<BlockNode> exitBlocks) Select loop exit and construct LoopRegionprivate booleannoWorkBeforeEnd(BlockNode firstInstructionBlock, BlockNode outBlock) private booleanoneBlockOfWorkBeforeEnd(BlockNode firstInstructionBlock, BlockNode outBlock) (package private) BlockNodeprocess(IRegion curRegion, LoopInfo loop, RegionStack stack) private BooleanvalidOutBlock(BlockNode outBlock, LoopInfo loop) private booleanviaValidUncleanSuccessor(BlockNode exitBlock, BlockNode crossing, LoopInfo loop)
-
Field Details
-
mth
-
regionMaker
-
ifMaker
-
-
Constructor Details
-
LoopRegionMaker
LoopRegionMaker(MethodNode mth, RegionMaker regionMaker, IfRegionMaker ifMaker)
-
-
Method Details
-
process
-
makeLoopRegion
Select loop exit and construct LoopRegion -
isExitAtLoopEnd
-
checkLoopExits
-
validOutBlock
-
viaValidUncleanSuccessor
-
noWorkBeforeEnd
-
oneBlockOfWorkBeforeEnd
-
isNestedIfCross
-
isOuterOutblock
-
makeEndlessLoop
private BlockNode makeEndlessLoop(IRegion curRegion, RegionStack stack, LoopInfo loop, BlockNode loopStart) -
inExceptionHandlerBlocks
-
canInsertBreak
-
insertLoopBreak
private boolean insertLoopBreak(RegionStack stack, LoopInfo loop, BlockNode loopExit, BlockNode blockOnLoop, Edge exitEdge) -
addBreakLabel
-
insertContinue
-
canInsertContinue
-
isDominatedOnBlocks
-