Class AstOptimizer
java.lang.Object
com.strobel.decompiler.ast.AstOptimizer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classprivate static classprivate static classprivate static interfaceprivate static interfaceprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final classprivate static final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate intprivate static final Loggerprivate static final BooleanBox -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static booleanprivate Labelprivate static voidcleanUpTryBlocks(Block method) private static booleancontainsMatch(Node node, Expression pattern) private static voidduplicateReturnStatements(Block method) private static booleanflattenBasicBlocks(Node node) private static voidinlineLockAccess(Node owner, List<Node> body, LockInfo lockInfo) private static booleanintroducePreIncrementForInstanceFields(List<Node> body, MutableInteger position, Inlining inlining) private static booleanintroducePreIncrementForStaticFields(List<Node> body, MutableInteger position, Inlining inlining) private static booleanintroducePreIncrementForVariables(List<Node> body, MutableInteger position) private static voidintroducePreIncrementOptimization(DecompilerContext context, Block method) private static booleanisEmptyTryCatch(TryCatchBlock tryCatch) (package private) static ExpressionmakeLeftAssociativeShortCircuit(AstCode code, Expression left, Expression right) private static booleanmergeDisparateObjectInitializations(DecompilerContext context, Block method) private static booleannegate(Expression e) static voidoptimize(DecompilerContext context, Block method) static voidoptimize(DecompilerContext context, Block method, AstOptimizationStep abortBeforeStep) private static voidrecombineVariables(Block method) private static voidreduceBranchInstructionSet(Block block) private static voidreduceComparisonInstructionSet(Expression expression) private static voidreduceIfNesting(Node node) (package private) static booleanreferences(Node node, Variable v) (package private) static <T> voidremoveOrThrow(Collection<T> collection, T item) (package private) static voidremoveRedundantCode(Block method, DecompilerSettings settings) (package private) static voidremoveTail(List<Node> body, AstCode... codes) private static voidremoveUnreachableBlocks(Block method) static voidreplaceVariables(Node node, Function<Variable, Variable> mapping) private static voidrewriteFinallyBlocks(Block method) private static voidrewriteSynchronized(Block method) private static booleanrewriteSynchronizedCore(TryCatchBlock tryCatch, int depth) private static booleanrunOptimization(Block block, AstOptimizer.BasicBlockOptimization optimization) private static booleanrunOptimization(Block block, AstOptimizer.ExpressionOptimization optimization) private static booleanshouldPerformStep(AstOptimizationStep abortBeforeStep, AstOptimizationStep nextStep) (package private) static ExpressionsimplifyLogicalNot(Expression expression) (package private) static ExpressionsimplifyLogicalNot(Expression expression, BooleanBox modified) (package private) static booleanprivate voidsplitToMovableBlocks(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
-