All Downloads are FREE. Search and download functionalities are using the official Maven repository.

soot.toolkits.graph.CompleteUnitGraph Maven / Gradle / Ivy

package soot.toolkits.graph;

/*-
 * #%L
 * Soot - a J*va Optimization Framework
 * %%
 * Copyright (C) 1999 Patrice Pominville, Raja Vallee-Rai
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 2.1 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */

import soot.Body;
import soot.toolkits.exceptions.PedanticThrowAnalysis;

/**
 * 

* Represents a CFG for a {@link Body} instance where the nodes are {@link soot.Unit} instances, and where control flow * associated with exceptions is taken into account. In a CompleteUnitGraph, every Unit covered by * a {@link soot.Trap} is considered to have the potential to throw an exception caught by the Trap, so there * are edges to the Trap's handler from every trapped Unit , as well as from all the predecessors * of the trapped Units. * *

* This implementation of CompleteUnitGraph is included for backwards compatibility (new code should use * {@link ExceptionalUnitGraph}), but the graphs it produces are not necessarily identical to the graphs produced by the * implementation of CompleteUnitGraph provided by versions of Soot up to and including release 2.1.0. The known * differences include: * *

    * *
  • If a Body includes Units which branch into the middle of the region protected by a * Trap this implementation of CompleteUnitGraph will include edges from those branching * Units to the Trap's handler (since the branches are predecessors of an instruction which may * throw an exception caught by the Trap). The 2.1.0 implementation of CompleteUnitGraph mistakenly * omitted these edges.
  • * *
  • If the initial Unit in the Body might throw an exception caught by a Trap * within the body, this implementation will include the initial handler Unit in the list returned by * getHeads() (since the handler unit might be the first Unit in the method to execute to completion). The 2.1.0 * implementation of CompleteUnitGraph mistakenly omitted the handler from the set of heads.
  • * *
*

*/ public class CompleteUnitGraph extends ExceptionalUnitGraph { public CompleteUnitGraph(Body b) { super(b, PedanticThrowAnalysis.v(), false); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy