Package com.strobel.decompiler.ast
Class AstOptimizer
java.lang.Object
com.strobel.decompiler.ast.AstOptimizer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
private static class
private static class
private static interface
private static interface
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
private static final class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
private static final Logger
private static final BooleanBox
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static boolean
private Label
private static void
cleanUpTryBlocks
(Block method) private static boolean
containsMatch
(Node node, Expression pattern) private static void
duplicateReturnStatements
(Block method) private static boolean
flattenBasicBlocks
(Node node) private static void
inlineLockAccess
(Node owner, List<Node> body, LockInfo lockInfo) private static boolean
introducePreIncrementForInstanceFields
(List<Node> body, MutableInteger position, Inlining inlining) private static boolean
introducePreIncrementForStaticFields
(List<Node> body, MutableInteger position, Inlining inlining) private static boolean
introducePreIncrementForVariables
(List<Node> body, MutableInteger position) private static void
introducePreIncrementOptimization
(DecompilerContext context, Block method) private static boolean
isEmptyTryCatch
(TryCatchBlock tryCatch) (package private) static Expression
makeLeftAssociativeShortCircuit
(AstCode code, Expression left, Expression right) private static boolean
mergeDisparateObjectInitializations
(DecompilerContext context, Block method) private static boolean
negate
(Expression e) static void
optimize
(DecompilerContext context, Block method) static void
optimize
(DecompilerContext context, Block method, AstOptimizationStep abortBeforeStep) private static void
recombineVariables
(Block method) private static void
reduceBranchInstructionSet
(Block block) private static void
reduceComparisonInstructionSet
(Expression expression) private static void
reduceIfNesting
(Node node) (package private) static boolean
references
(Node node, Variable v) (package private) static <T> void
removeOrThrow
(Collection<T> collection, T item) (package private) static void
removeRedundantCode
(Block method, DecompilerSettings settings) (package private) static void
removeTail
(List<Node> body, AstCode... codes) private static void
removeUnreachableBlocks
(Block method) static void
replaceVariables
(Node node, Function<Variable, Variable> mapping) private static void
rewriteFinallyBlocks
(Block method) private static void
rewriteSynchronized
(Block method) private static boolean
rewriteSynchronizedCore
(TryCatchBlock tryCatch, int depth) private static boolean
runOptimization
(Block block, AstOptimizer.BasicBlockOptimization optimization) private static boolean
runOptimization
(Block block, AstOptimizer.ExpressionOptimization optimization) private static boolean
shouldPerformStep
(AstOptimizationStep abortBeforeStep, AstOptimizationStep nextStep) (package private) static Expression
simplifyLogicalNot
(Expression expression) (package private) static Expression
simplifyLogicalNot
(Expression expression, BooleanBox modified) (package private) static boolean
private void
splitToMovableBlocks
(Block block)
-
Field Details
-
LOG
-
_nextLabelIndex
private int _nextLabelIndex -
SCRATCH_BOOLEAN_BOX
-
-
Constructor Details
-
AstOptimizer
public AstOptimizer()
-
-
Method Details
-
optimize
-
optimize
public static void optimize(DecompilerContext context, Block method, AstOptimizationStep abortBeforeStep) -
shouldPerformStep
private static boolean shouldPerformStep(AstOptimizationStep abortBeforeStep, AstOptimizationStep nextStep) -
removeUnreachableBlocks
-
cleanUpTryBlocks
-
rewriteFinallyBlocks
-
rewriteSynchronized
-
rewriteSynchronizedCore
-
inlineLockAccess
-
removeRedundantCode
-
isEmptyTryCatch
-
introducePreIncrementOptimization
-
introducePreIncrementForVariables
-
introducePreIncrementForStaticFields
private static boolean introducePreIncrementForStaticFields(List<Node> body, MutableInteger position, Inlining inlining) -
introducePreIncrementForInstanceFields
private static boolean introducePreIncrementForInstanceFields(List<Node> body, MutableInteger position, Inlining inlining) -
reduceBranchInstructionSet
-
reduceComparisonInstructionSet
-
splitToMovableBlocks
-
checkExit
-
mergeDisparateObjectInitializations
-
flattenBasicBlocks
-
duplicateReturnStatements
-
reduceIfNesting
-
recombineVariables
-
runOptimization
private static boolean runOptimization(Block block, AstOptimizer.BasicBlockOptimization optimization) -
runOptimization
private static boolean runOptimization(Block block, AstOptimizer.ExpressionOptimization optimization) -
replaceVariables
-
removeOrThrow
-
removeTail
-
makeLeftAssociativeShortCircuit
-
simplifyLogicalNot
-
simplifyLogicalNot
-
simplifyLogicalNotArgument
-
negate
-
canSimplifyLogicalNotArgument
-
references
-
containsMatch
-