Package com.strobel.decompiler.ast
Class AstOptimizer
- java.lang.Object
-
- com.strobel.decompiler.ast.AstOptimizer
-
public final class AstOptimizer extends java.lang.Object
-
-
Nested Class Summary
-
Field Summary
Fields Modifier and Type Field Description private int_nextLabelIndexprivate static java.util.logging.LoggerLOGprivate static BooleanBoxSCRATCH_BOOLEAN_BOX
-
Constructor Summary
Constructors Constructor Description AstOptimizer()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static booleancanSimplifyLogicalNotArgument(Expression e)private LabelcheckExit(Node node)private 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, java.util.List<Node> body, LockInfo lockInfo)private static booleanintroducePreIncrementForInstanceFields(java.util.List<Node> body, MutableInteger position, Inlining inlining)private static booleanintroducePreIncrementForStaticFields(java.util.List<Node> body, MutableInteger position, Inlining inlining)private static booleanintroducePreIncrementForVariables(java.util.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(java.util.Collection<T> collection, T item)(package private) static voidremoveRedundantCode(Block method, DecompilerSettings settings)(package private) static voidremoveTail(java.util.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 booleansimplifyLogicalNotArgument(Expression e)private voidsplitToMovableBlocks(Block block)
-
-
-
Field Detail
-
LOG
private static final java.util.logging.Logger LOG
-
_nextLabelIndex
private int _nextLabelIndex
-
SCRATCH_BOOLEAN_BOX
private static final BooleanBox SCRATCH_BOOLEAN_BOX
-
-
Method Detail
-
optimize
public static void optimize(DecompilerContext context, Block method)
-
optimize
public static void optimize(DecompilerContext context, Block method, AstOptimizationStep abortBeforeStep)
-
shouldPerformStep
private static boolean shouldPerformStep(AstOptimizationStep abortBeforeStep, AstOptimizationStep nextStep)
-
removeUnreachableBlocks
private static void removeUnreachableBlocks(Block method)
-
cleanUpTryBlocks
private static void cleanUpTryBlocks(Block method)
-
rewriteFinallyBlocks
private static void rewriteFinallyBlocks(Block method)
-
rewriteSynchronized
private static void rewriteSynchronized(Block method)
-
rewriteSynchronizedCore
private static boolean rewriteSynchronizedCore(TryCatchBlock tryCatch, int depth)
-
inlineLockAccess
private static void inlineLockAccess(Node owner, java.util.List<Node> body, LockInfo lockInfo)
-
removeRedundantCode
static void removeRedundantCode(Block method, DecompilerSettings settings)
-
isEmptyTryCatch
private static boolean isEmptyTryCatch(TryCatchBlock tryCatch)
-
introducePreIncrementOptimization
private static void introducePreIncrementOptimization(DecompilerContext context, Block method)
-
introducePreIncrementForVariables
private static boolean introducePreIncrementForVariables(java.util.List<Node> body, MutableInteger position)
-
introducePreIncrementForStaticFields
private static boolean introducePreIncrementForStaticFields(java.util.List<Node> body, MutableInteger position, Inlining inlining)
-
introducePreIncrementForInstanceFields
private static boolean introducePreIncrementForInstanceFields(java.util.List<Node> body, MutableInteger position, Inlining inlining)
-
reduceBranchInstructionSet
private static void reduceBranchInstructionSet(Block block)
-
reduceComparisonInstructionSet
private static void reduceComparisonInstructionSet(Expression expression)
-
splitToMovableBlocks
private void splitToMovableBlocks(Block block)
-
mergeDisparateObjectInitializations
private static boolean mergeDisparateObjectInitializations(DecompilerContext context, Block method)
-
flattenBasicBlocks
private static boolean flattenBasicBlocks(Node node)
-
duplicateReturnStatements
private static void duplicateReturnStatements(Block method)
-
reduceIfNesting
private static void reduceIfNesting(Node node)
-
recombineVariables
private static void recombineVariables(Block method)
-
runOptimization
private static boolean runOptimization(Block block, AstOptimizer.BasicBlockOptimization optimization)
-
runOptimization
private static boolean runOptimization(Block block, AstOptimizer.ExpressionOptimization optimization)
-
replaceVariables
public static void replaceVariables(Node node, Function<Variable,Variable> mapping)
-
removeOrThrow
static <T> void removeOrThrow(java.util.Collection<T> collection, T item)
-
makeLeftAssociativeShortCircuit
static Expression makeLeftAssociativeShortCircuit(AstCode code, Expression left, Expression right)
-
simplifyLogicalNot
static Expression simplifyLogicalNot(Expression expression)
-
simplifyLogicalNot
static Expression simplifyLogicalNot(Expression expression, BooleanBox modified)
-
simplifyLogicalNotArgument
static boolean simplifyLogicalNotArgument(Expression e)
-
negate
private static boolean negate(Expression e)
-
canSimplifyLogicalNotArgument
private static boolean canSimplifyLogicalNotArgument(Expression e)
-
containsMatch
private static boolean containsMatch(Node node, Expression pattern)
-
-