package br.ufal.cideei.handlers; import java.lang.reflect.Field; import java.util.List; public class AnalysisArgs { public boolean wait; public boolean includeJDK; public boolean simplify = true; public boolean useFeatureModel = true; public boolean eagerPruning = true; public boolean checkResults; public boolean debug = false; public boolean j2me; public boolean onlyLifted = true; public boolean determineValidConfigsUpfront; public String analysisClassName = "IFDSLocalInfoFlow"; //"IFDSUninitializedVariables"; private AnalysisArgs(boolean headless) { //set general defaults simplify = true; if(headless) { //set defaults for headless build wait = true; includeJDK = true; } else { checkResults = true; } } public static AnalysisArgs headless(String analysisClassName, List<String> argVals) { AnalysisArgs args = new AnalysisArgs(true); args.analysisClassName = analysisClassName; for (String arg: argVals) { String theArg = arg.substring(1); switch(arg.charAt(0)) { case '+': args.set(theArg,true); break; case '-': args.set(theArg,false); break; default: throw new IllegalStateException(); } } return args; } private void set(String argument, boolean overrideValue) { try { Field f = AnalysisArgs.class.getField(argument); f.setBoolean(this, overrideValue); } catch (NoSuchFieldException e) { throw new IllegalArgumentException( "No such option: "+argument); } catch (Exception e) { throw new RuntimeException(e); } } public static AnalysisArgs interactive() { return new AnalysisArgs(false); } public void print() { System.err.print("Arguments: "); try { Field[] fields = AnalysisArgs.class.getDeclaredFields(); for (Field field : fields) { System.err.print(field.getName()+"="+field.get(this)+" "); } } catch (Exception e) { throw new RuntimeException(e); } System.err.println(""); } }