Class PruneInfeasibleExceptionEdges

  • All Implemented Interfaces:
    EdgeTypes

    public class PruneInfeasibleExceptionEdges
    extends java.lang.Object
    implements EdgeTypes
    Prune a CFG to remove infeasible exception edges. In order to determine what kinds of exceptions can be thrown by explicit ATHROW instructions, type analysis must first be performed on the unpruned CFG.
    See Also:
    CFG, TypeAnalysis
    • Field Detail

      • DEBUG

        private static final boolean DEBUG
      • STATS

        private static final boolean STATS
      • numEdgesPruned

        private static int numEdgesPruned
      • cfg

        private final CFG cfg
      • cfgModified

        private boolean cfgModified
    • Constructor Detail

      • PruneInfeasibleExceptionEdges

        public PruneInfeasibleExceptionEdges​(CFG cfg,
                                             org.apache.bcel.generic.MethodGen methodGen,
                                             TypeDataflow typeDataflow)
        Constructor.
        Parameters:
        cfg - the CFG to prune
        methodGen - the method
        typeDataflow - initialized TypeDataflow object for the CFG, indicating the types of all stack locations
    • Method Detail

      • execute

        public void execute()
                     throws java.lang.ClassNotFoundException
        Prune infeasible exception edges from the CFG. If the method returns normally, then the operation was successful, and the CFG should no longer contain infeasible exception edges. If ClassNotFoundException or DataflowAnalysisException are thrown, then the operation was unsuccessful, but the CFG is still valid because it was not modified. If a runtime exception is thrown, then the CFG may be partially modified and should be considered invalid.
        Throws:
        java.lang.ClassNotFoundException
      • wasCFGModified

        public boolean wasCFGModified()
        Returns:
        true if modified