Class AstOptimizer

java.lang.Object
com.strobel.decompiler.ast.AstOptimizer

public final class AstOptimizer extends Object
  • Field Details

    • LOG

      private static final Logger LOG
    • _nextLabelIndex

      private int _nextLabelIndex
    • SCRATCH_BOOLEAN_BOX

      private static final BooleanBox SCRATCH_BOOLEAN_BOX
  • Constructor Details

    • AstOptimizer

      public AstOptimizer()
  • Method Details

    • 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, 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(List<Node> body, MutableInteger position)
    • 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

      private static void reduceBranchInstructionSet(Block block)
    • reduceComparisonInstructionSet

      private static void reduceComparisonInstructionSet(Expression expression)
    • splitToMovableBlocks

      private void splitToMovableBlocks(Block block)
    • checkExit

      private Label checkExit(Node node)
    • 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(Collection<T> collection, T item)
    • removeTail

      static void removeTail(List<Node> body, AstCode... codes)
    • 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)
    • references

      static boolean references(Node node, Variable v)
    • containsMatch

      private static boolean containsMatch(Node node, Expression pattern)