package xsched.analysis.wala;
import java.io.File;
import java.io.IOException;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.ContextSelector;
import com.ibm.wala.ipa.callgraph.impl.DefaultContextSelector;
import com.ibm.wala.ipa.callgraph.impl.Util;
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
import com.ibm.wala.ipa.callgraph.propagation.cfa.nCFAContextSelector;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.util.io.FileProvider;
public class AnalysisProperties {
public final String[] applicationFiles;
public final String standardScopeFile = "xsched/analysis/wala/StandardScope.txt";
public final String exclusionsFile;
public AnalysisProperties(String exclusionsFile, String... applicationFiles) {
this.applicationFiles = applicationFiles;
this.exclusionsFile = exclusionsFile;
}
public PropagationCallGraphBuilder createCallGraphBuilder(AnalysisOptions options, AnalysisCache cache, AnalysisScope scope, ClassHierarchy classHierarchy) {
ContextSelector def = new DefaultContextSelector(options);
ContextSelector nCFAContextSelector = new nCFAContextSelector(1, def);
TaskStringContextSelector customSelector = new TaskStringContextSelector(nCFAContextSelector);
return Util.makeZeroCFABuilder(options, cache, classHierarchy, scope, customSelector, null);
}
public File openExclusionsFile() {
if(exclusionsFile == null)
return null;
File exclude;
try {
exclude = FileProvider.getFile(exclusionsFile);
} catch (IOException e) {
throw new RuntimeException(e);
}
return exclude;
}
}