Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* 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.
  */
 
 package soot;
 import java.util.*;

Manages the phase options of the various soot phases.
 
 public class PhaseOptions {
    
Needed for preventing infinite recursion in constructor. Termination is assured: each constructor is called exactly once. Here is a case analysis. a. PackManager used first. Then its constructor needs PhaseOptions, which also needs a PackManager; OK because we store the PackManager being initialized in a field. b. PhaseOptions used first. Then getPM() calls PackManager.v(), which calls the constr, which sets the .pm field here, uses PhaseOptions (which uses PackManager), and returns. OK.
 
     private PackManager pm;
     public void setPackManager(PackManager m) { this. = m; }
     PackManager getPM()
     {
         if ( == null)
             PackManager.v();
         return ;
     }
 
     public PhaseOptionsSingletons.Global g ) { }
     public static PhaseOptions v() { return G.v().soot_PhaseOptions(); }
 
     private final Map<HasPhaseOptionsMapphaseToOptionMap = new HashMap<HasPhaseOptionsMap>();
 
     public Map getPhaseOptions(String phaseName) {
         return getPhaseOptions(getPM().getPhase(phaseName));
     }
 
     public Map getPhaseOptions(HasPhaseOptions phase) {
         Map ret = .get(phase);
         ifret == null ) ret = new HashMap();
         else ret = new HashMapret );
         StringTokenizer st = new StringTokenizerphase.getDefaultOptions() );
         whilest.hasMoreTokens() ) {
             String opt = st.nextToken();
             String key = getKeyopt );
             String value = getValueopt );
             if( !ret.containsKeykey ) ) ret.putkeyvalue );
         }
         return Collections.unmodifiableMap(ret);
     }
 
     public boolean processPhaseOptions(String phaseNameString option) {
         StringTokenizer st = new StringTokenizer(option",");
         while (st.hasMoreTokens()) {
             if( !setPhaseOptionphaseNamest.nextToken() ) ) {
                 return false;
             }
         }
         return true;
     }

    
This method returns true iff key "name" is in options and maps to "true".
 
     public static boolean getBoolean(Map optionsString name)
     {
         return options.containsKey(name) &&
             options.get(name).equals("true");
     }



    
This method returns the value of "name" in options or "" if "name" is not found.
 
     public static String getString(Map optionsString name)
     {
         return options.containsKey(name) ?
             (String)options.get(name) : "";
     }



    
This method returns the float value of "name" in options or 1.0 if "name" is not found.
 
     public static float getFloat(Map optionsString name)
     {
        return options.containsKey(name) ?
            new Float((String)options.get(name)).floatValue() : 1.0f;
    }



    
This method returns the integer value of "name" in options or 0 if "name" is not found.
    public static int getInt(Map optionsString name)
    {
        return options.containsKey(name) ?
            new Integer((String)options.get(name)).intValue() : 0;
    }
    private Map<StringStringmapForPhaseString phaseName ) {
        HasPhaseOptions phase = getPM().getPhasephaseName );
        ifphase == null ) return null;
        return mapForPhasephase );
    }
    private Map<StringStringmapForPhaseHasPhaseOptions phase ) {
        Map<StringStringoptionMap = .getphase );
        ifoptionMap == null ) {
            .putphaseoptionMap = new HashMap<StringString>() );
        }
        return optionMap;
    }
    private String getKeyString option ) {
        int delimLoc = option.indexOf(":");
        if (delimLoc < 0) {
            ifoption.equals("on") || option.equals("off") ) return "enabled";
            return option;
        } else {
            return option.substring(0, delimLoc);
        }
    }
    private String getValueString option ) {
        int delimLoc = option.indexOf(":");
        if (delimLoc < 0) {
            ifoption.equals("off") ) return "false";
            return "true";
        } else {
            return option.substring(delimLoc+1);
        }
    }
    private void resetRadioPackString phaseName ) {
        for (Pack p : getPM().allPacks()) {
            if( !(p instanceof RadioScenePack) ) continue;
            ifp.get(phaseName) == null ) continue;
            forIterator tIt = p.iterator(); tIt.hasNext(); ) {
                final Transform t = (TransformtIt.next();
                setPhaseOptiont.getPhaseName(), "enabled:false" );
            }
        }
    }
    private boolean checkParentEnabledString phaseName ) {
        iftrue ) return true;
        for (Pack p : getPM().allPacks()) {
            ifgetBooleangetPhaseOptionsp ), "enabled" ) ) continue;
            forIterator tIt = p.iterator(); tIt.hasNext(); ) {
                final Transform t = (TransformtIt.next();
                ift.getPhaseName().equalsphaseName ) ) {
                    G.v()..println"Attempt to set option for phase "+phaseName+" of disabled pack "+p.getPhaseName() );
                    return false;
                }
            }
        }
        return true;
    }
    public boolean setPhaseOptionString phaseNameString option ) {
        HasPhaseOptions phase = getPM().getPhasephaseName );
        ifphase == null ) {
            G.v()..println"Option "+option+" given for nonexistent"
                    +" phase "+phaseName );
            return false;
        }
        return setPhaseOptionphaseoption );
    }
    public boolean setPhaseOptionHasPhaseOptions phaseString option ) {
        Map<StringStringoptionMap = mapForPhasephase );
        if( !checkParentEnabledphase.getPhaseName() ) ) return false;
        ifoptionMap == null ) {
            G.v()..println"Option "+option+" given for nonexistent"
                    +" phase "+phase.getPhaseName() );
            return false;
        }
        String key = getKeyoption );
        ifkey.equals"enabled" ) && getValueoption ).equals"true" ) ) {
            resetRadioPackphase.getPhaseName() );
        }
        ifdeclaresOptionphasekey ) ) {
            optionMap.putkeygetValueoption ) );
            return true;
        }
        G.v()..println"Invalid option "+option+" for phase "+phase.getPhaseName() );
        return false;
    }
    private boolean declaresOptionString phaseNameString option ) {
        HasPhaseOptions phase = getPM().getPhasephaseName );
        return declaresOptionphaseoption );
    }
    private boolean declaresOptionHasPhaseOptions phaseString option ) {
        String declareds = phase.getDeclaredOptions();
        forStringTokenizer st = new StringTokenizerdeclareds );
                st.hasMoreTokens(); ) {
            ifst.nextToken().equalsoption ) ) {
                return true;
            }
        }
        return false;
    }
    public void setPhaseOptionIfUnsetString phaseNameString option ) {
        Map<StringStringoptionMap = mapForPhasephaseName );
        ifoptionMap == null )
            throw new RuntimeException"No such phase "+phaseName );
        ifoptionMap.containsKeygetKeyoption ) ) ) return;
        if( !declaresOptionphaseNamegetKeyoption ) ) )
            throw new RuntimeException"No option "+option+" for phase "+phaseName );
        optionMap.putgetKeyoption ), getValueoption ) );
    }
New to GrepCode? Check out our FAQ X