Configuring Soot to run your analysis can be a tough job. We have a fluent interface that can help you.


Soot is a swiss-army knife of a program analysis framework. Its command-line based configuration interface features multiple pages of configuration options that build on each other, depend on each other and also may contradict each other. We developed a fluent interface to counter this problem.

Where can I get it?

Git RepositoryWe maintain the source code of the analysis as a GitHub project. You are invited to use it, build opon it, fork it or contribute to it via pull requests. However, we cannot provide any guarantee whatsoever.

How can I use it?

Configuring the run options

Instead of supplying Soot with an array of strings containing the configuration options like this:

-f n
-p cg 
-p jb use-original-names:true
-p cg all-reachable:true
-p tag.ln enabled:true

You may now use the FluentOptions class to construct an object like this:

public final static FluentOptions standard = new FluentOptions()
      .addPhaseOptions(new CallGraphPhaseOptions().processAllReachable())
          new JimpleBodyCreationPhaseOptions().useOriginalNames())
      .addPhaseOptions(new TagAggregatorOptions().aggregateLineNumber());

Describing the target and running the analysis

Through the AnalysisTarget class you can now target your analysis to a single jar file, a code path, or a class file. If you combine the target and the configuration in a SootRun object and call the perform()-method Soot will run according to your configuration.

AnalysisTarget t = new AnalysisTarget().processPath(
SootRun analysisRun = new SootRun(o, t);