Option parser for Static Inliner.
Reconstruct Jimple body after inlining --
When a method with array parameters is inlined, its variables
may need to be assigned different types than they had in the
original method to produce compilable code. When this option is
set, Soot re-runs the Jimple Body pack on each method body which
has had another method inlined into it so that the typing
algorithm can reassign the types.
Insert Null Checks --
Insert, before the inlined body of the target method, a check
that throws a NullPointerException if the receiver object is
null. This ensures that inlining will not eliminate exceptions
which would have occurred in its absence.
Insert Redundant Casts --
Insert extra casts for the Java bytecode verifier. The
verifier may complain if the inlined method uses this and the
declared type of the receiver of the call being inlined is
different from the type implementing the target method being
inlined. Say, for example, that Singer is an interface declaring
the sing() method and that the call graph shows that all
receiver objects at a particular call site, singer.sing() (with
singer declared as a Singer) are in fact Bird objects (Bird
being a class that implements Singer). The implementation of
Bird.sing() may perform operations on this which are only
allowed on Birds, rather than Singers. The Insert Redundant
Casts option ensures that this cannot lead to verification
errors, by inserting a cast of bird to the Bird type before
inlining the body of Bird.sing().
Max Container Size --
Determines the maximum number of Jimple statements for a
container method. If a method has more than this number of
Jimple statements, then no methods will be inlined into it.
return soot.PhaseOptions.getInt( options, "max-container-size" );
Max Inlinee Size --
Determines the maximum number of Jimple statements for an
inlinee method. If a method has more than this number of Jimple
statements, then it will not be inlined into other methods.
Expansion Factor --
Determines the maximum allowed expansion of a method. Inlining
will cause the method to grow by a factor of no more than the
Allowed Modifier Changes --
Specify which changes in visibility modifiers are allowed.
throw new RuntimeException( "Invalid value "+s+" of phase option allowed-modifier-changes" );