package soottocfg; import java.nio.file.Path; import soottocfg.soot.SootToCfg.MemModel; /** * @author schaef * @author rodykers * */ public class Options { public final static int MEMPREC_LOW = 0; public final static int MEMPREC_SIMPLIFY = 1; public final static int MEMPREC_LASTPUSH = 2; public final static int MEMPREC_PTA = 3; public boolean optimizeMethods = true; /* * Built in specs. */ private boolean useBuiltInSpecs = false; public boolean useBuiltInSpecs() { return useBuiltInSpecs; } public void setBuiltInSpecs(boolean val) { useBuiltInSpecs = val; } /* * Memory model */ private MemModel mm = MemModel.PullPush; public MemModel memModel() { return mm; } public void setMemModel(MemModel mm) { this.mm = mm; } /* * Use array invariants. */ private boolean arrayInv = true; public boolean arrayInv() { return arrayInv; } public void setArrayInv(boolean b) { this.arrayInv = b; } /* * Number of array elements modeled exactly */ private int exactArrayElements = 0; public int exactArrayElements() { return exactArrayElements; } public void setExactArrayElements(int ar) { this.exactArrayElements = ar; } /* * Precision of push-pull memory model. */ private int memPrecision = Options.MEMPREC_PTA; public int memPrecision() { return memPrecision; } public void setMemPrecision(int prec) { this.memPrecision = prec; } /* * Resolve virtual calls */ private boolean resolveVirtualCalls = true; public boolean resolveVirtualCalls() { return this.resolveVirtualCalls; } public void setResolveVirtualCalls(boolean r) { this.resolveVirtualCalls = r; } /* * Create Assertions For Uncaught Exceptions */ private boolean excAsAssert = false; public boolean excAsAssert() { return this.excAsAssert; } public void setExcAsAssert(boolean b) { this.excAsAssert = b; } /* * Print CFG */ private boolean printCFG = false; public boolean printCFG() { return this.printCFG; } public void setPrintCFG(boolean b) { this.printCFG = b; } /* * Output files */ Path outDir = null; String outBaseName = "noname"; public Path outDir() { return outDir; } public void setOutDir(Path dir) { this.outDir = dir; } public String outBaseName() { return this.outBaseName; } public void setOutBaseName(String s) { this.outBaseName = s; } private boolean checkMixedJavaClassFiles = true; public boolean checkMixedJavaClassFiles() { return checkMixedJavaClassFiles; } public void checkMixedJavaClassFiles(boolean val) { checkMixedJavaClassFiles = val; } private int inlineMaxSize = -1; /** * @return the inlineMinSize */ public int getInlineMaxSize() { return inlineMaxSize; } /** * @param inlineMinSize the inlineMinSize to set */ public void setInlineMaxSize(int inlineMaxSize) { this.inlineMaxSize = inlineMaxSize; } /** * @return the inlineCount */ public int getInlineCount() { return inlineCount; } /** * @param inlineCount the inlineCount to set */ public void setInlineCount(int inlineCount) { this.inlineCount = inlineCount; } private int inlineCount = -1; /* * Singleton */ private static Options options; public static void resetInstance() { options = null; } public static Options v() { if (null == options) { options = new Options(); } return options; } private Options() { } }