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
_nextLabelIndex
private static java.util.logging.Logger
LOG
private static BooleanBox
SCRATCH_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 boolean
canSimplifyLogicalNotArgument(Expression e)
private Label
checkExit(Node node)
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, java.util.List<Node> body, LockInfo lockInfo)
private static boolean
introducePreIncrementForInstanceFields(java.util.List<Node> body, MutableInteger position, Inlining inlining)
private static boolean
introducePreIncrementForStaticFields(java.util.List<Node> body, MutableInteger position, Inlining inlining)
private static boolean
introducePreIncrementForVariables(java.util.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(java.util.Collection<T> collection, T item)
(package private) static void
removeRedundantCode(Block method, DecompilerSettings settings)
(package private) static void
removeTail(java.util.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
simplifyLogicalNotArgument(Expression e)
private void
splitToMovableBlocks(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)
-
-