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

soot.options.SIOptions Maven / Gradle / Ivy

There is a newer version: 1.12.0
Show newest version

/* Soot - a J*va Optimization Framework
 * Copyright (C) 2003 Ondrej Lhotak
 *
 * This library 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 library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

/* THIS FILE IS AUTO-GENERATED FROM soot_options.xml. DO NOT MODIFY. */

package soot.options;
import java.util.*;

/** Option parser for Static Inliner. */
public class SIOptions
{
    private Map options;

    public SIOptions( Map options ) {
        this.options = options;
    }
    
    /** Enabled --
    
     * .
    
     * 
     */
    public boolean enabled() {
        return soot.PhaseOptions.getBoolean( options, "enabled" );
    }
    
    /** 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. 
     */
    public boolean rerun_jb() {
        return soot.PhaseOptions.getBoolean( options, "rerun-jb" );
    }
    
    /** 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. 
     */
    public boolean insert_null_checks() {
        return soot.PhaseOptions.getBoolean( options, "insert-null-checks" );
    }
    
    /** 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().
     */
    public boolean insert_redundant_casts() {
        return soot.PhaseOptions.getBoolean( options, "insert-redundant-casts" );
    }
    
    /** 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. 
     * 
     */
    public int max_container_size() {
        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. 
     * 
     */
    public int max_inlinee_size() {
        return soot.PhaseOptions.getInt( options, "max-inlinee-size" );
    }
    
    /** 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 
     * Expansion Factor. 
     */
    public float expansion_factor() {
        return soot.PhaseOptions.getFloat( options, "expansion-factor" );
    }
    
    public static final int allowed_modifier_changes_unsafe = 1;
    public static final int allowed_modifier_changes_safe = 2;
    public static final int allowed_modifier_changes_none = 3;
    /** Allowed Modifier Changes --
    
     * .
    
     * Specify which changes in visibility modifiers are allowed. 
     */
    public int allowed_modifier_changes() {
        String s = soot.PhaseOptions.getString( options, "allowed-modifier-changes" );
        
        if( s.equalsIgnoreCase( "unsafe" ) )
            return allowed_modifier_changes_unsafe;
        
        if( s.equalsIgnoreCase( "safe" ) )
            return allowed_modifier_changes_safe;
        
        if( s.equalsIgnoreCase( "none" ) )
            return allowed_modifier_changes_none;
        
        throw new RuntimeException( "Invalid value "+s+" of phase option allowed-modifier-changes" );
    }
    
}
        




© 2015 - 2024 Weber Informatics LLC | Privacy Policy