soot.options
Class CGOptions

java.lang.Object
  extended by soot.options.CGOptions

public class CGOptions
extends Object

Option parser for Call Graph Constructor.


Constructor Summary
CGOptions(Map options)
           
 
Method Summary
 boolean all_reachable()
          All Application Class Methods Reachable -- Assume all methods of application classes are reachable..
 boolean enabled()
          Enabled -- .
 boolean implicit_entry()
          Implicit Entry Points -- Include methods called implicitly by the VM as entry points.
 int jdkver()
          JDK version -- JDK version for native methods.
 boolean safe_forname()
          Safe forName -- Handle Class.forName() calls conservatively.
 boolean safe_newinstance()
          Safe newInstance -- Handle Class.newInstance() calls conservatively.
 boolean trim_clinit()
          Trim Static Initializer Edges -- Removes redundant static initializer calls.
 boolean verbose()
          Verbose -- Print warnings about where the call graph may be incomplete.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CGOptions

public CGOptions(Map options)
Method Detail

enabled

public boolean enabled()
Enabled -- .


safe_forname

public boolean safe_forname()
Safe forName -- Handle Class.forName() calls conservatively. When a program calls Class.forName(), the named class is resolved, and its static initializer executed. In many cases, it cannot be determined statically which class will be loaded, and which static initializer executed. When this option is set to true, Soot will conservatively assume that any static initializer could be executed. This may make the call graph very large. When this option is set to false, any calls to Class.forName() for which the class cannot be determined statically are assumed to call no static initializers.


safe_newinstance

public boolean safe_newinstance()
Safe newInstance -- Handle Class.newInstance() calls conservatively. When a program calls Class.newInstance(), a new object is created and its constructor executed. Soot does not determine statically which type of object will be created, and which constructor executed. When this option is set to true, Soot will conservatively assume that any constructor could be executed. This may make the call graph very large. When this option is set to false, any calls to Class.newInstance() are assumed not to call the constructor of the created object.


verbose

public boolean verbose()
Verbose -- Print warnings about where the call graph may be incomplete. Due to the effects of native methods and reflection, it may not always be possible to construct a fully conservative call graph. Setting this option to true causes Soot to point out the parts of the call graph that may be incomplete, so that they can be checked by hand.


all_reachable

public boolean all_reachable()
All Application Class Methods Reachable -- Assume all methods of application classes are reachable.. When this option is false, the call graph is built starting at a set of entry points, and only methods reachable from those entry points are processed. Unreachable methods will not have any call graph edges generated out of them. Setting this option to true makes Soot consider all methods of application classes to be reachable, so call edges are generated for all of them. This leads to a larger call graph. For program visualization purposes, it is sometimes desirable to include edges from unreachable methods; although these methods are unreachable in the version being analyzed, they may become reachable if the program is modified.


implicit_entry

public boolean implicit_entry()
Implicit Entry Points -- Include methods called implicitly by the VM as entry points. When this option is true, methods that are called implicitly by the VM are considered entry points of the call graph. When it is false, these methods are not considered entry points, leading to a possibly incomplete call graph.


trim_clinit

public boolean trim_clinit()
Trim Static Initializer Edges -- Removes redundant static initializer calls. The call graph contains an edge from each statement that could trigger execution of a static initializer to that static initializer. However, each static initializer is triggered only once. When this option is enabled, after the call graph is built, an intra-procedural analysis is performed to detect static initializer edges leading to methods that must have already been executed. Since these static initializers cannot be executed again, the corresponding call graph edges are removed from the call graph.


jdkver

public int jdkver()
JDK version -- JDK version for native methods. This option sets the JDK version of the standard library being analyzed so that Soot can simulate the native methods in the specific version of the library. The default, 3, refers to Java 1.3.x.