decouple IR caching from AnalysisOptions with a new AnalysisCache object
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1519 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
e7d9d74292
commit
7f62dc3c04
|
@ -23,6 +23,7 @@ import com.ibm.wala.cast.js.types.JavaScriptTypes;
|
|||
import com.ibm.wala.classLoader.Module;
|
||||
import com.ibm.wala.classLoader.SourceFileModule;
|
||||
import com.ibm.wala.client.impl.AbstractAnalysisEngine;
|
||||
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.Entrypoint;
|
||||
|
@ -85,8 +86,13 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine {
|
|||
return new JavaScriptEntryPoints(cha, cha.getLoader(JavaScriptTypes.jsLoader));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnalysisCache makeDefaultCache() {
|
||||
return new AnalysisCache(AstIRFactory.makeDefaultFactory(keepIRs));
|
||||
}
|
||||
|
||||
public AnalysisOptions getDefaultOptions(Iterable<Entrypoint> roots) {
|
||||
final AnalysisOptions options = new AnalysisOptions(scope, AstIRFactory.makeDefaultFactory(keepIRs), roots);
|
||||
final AnalysisOptions options = new AnalysisOptions(scope, roots);
|
||||
|
||||
options.setUseConstantSpecificKeys(true);
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ package com.ibm.wala.cast.js.client.impl;
|
|||
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroXCFABuilder;
|
||||
import com.ibm.wala.client.CallGraphBuilderFactory;
|
||||
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.CallGraphBuilder;
|
||||
|
@ -26,14 +27,11 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class ZeroCFABuilderFactory implements CallGraphBuilderFactory {
|
||||
|
||||
public CallGraphBuilder make(AnalysisOptions options,
|
||||
IClassHierarchy cha,
|
||||
AnalysisScope scope,
|
||||
boolean keepPointsTo)
|
||||
{
|
||||
public CallGraphBuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope,
|
||||
boolean keepPointsTo) {
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
|
||||
|
||||
return new JSZeroXCFABuilder(cha, options, null, null, null, ZeroXInstanceKeys.NONE);
|
||||
return new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package com.ibm.wala.cast.js.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.cast.ipa.callgraph.AstCFAPointerKeys;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
||||
|
@ -19,8 +20,8 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class JSCFABuilder extends JSSSAPropagationCallGraphBuilder {
|
||||
|
||||
public JSCFABuilder(IClassHierarchy cha, AnalysisOptions options) {
|
||||
super(cha, options, new AstCFAPointerKeys());
|
||||
public JSCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
|
||||
super(cha, options, cache, new AstCFAPointerKeys());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import com.ibm.wala.cast.js.types.JavaScriptTypes;
|
|||
import com.ibm.wala.cfg.InducedCFG;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.classLoader.NewSiteReference;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Everywhere;
|
||||
|
@ -30,18 +31,17 @@ import com.ibm.wala.types.TypeReference;
|
|||
|
||||
public class JSCallGraph extends AstCallGraph {
|
||||
|
||||
public JSCallGraph(IClassHierarchy cha, AnalysisOptions options) {
|
||||
super(cha, options);
|
||||
public JSCallGraph(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
|
||||
super(cha, options, cache);
|
||||
}
|
||||
|
||||
public final static MethodReference fakeRoot = MethodReference.findOrCreate(JavaScriptTypes.FakeRoot, FakeRootMethod.name, FakeRootMethod.descr);
|
||||
public final static MethodReference fakeRoot = MethodReference.findOrCreate(JavaScriptTypes.FakeRoot, FakeRootMethod.name,
|
||||
FakeRootMethod.descr);
|
||||
|
||||
public static class JSFakeRoot extends ScriptFakeRoot {
|
||||
|
||||
public JSFakeRoot(IClassHierarchy cha,
|
||||
AnalysisOptions options)
|
||||
{
|
||||
super(fakeRoot, cha.lookupClass(JavaScriptTypes.FakeRoot), cha, options);
|
||||
public JSFakeRoot(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
|
||||
super(fakeRoot, cha.lookupClass(JavaScriptTypes.FakeRoot), cha, options, cache);
|
||||
}
|
||||
|
||||
public InducedCFG makeControlFlowGraph() {
|
||||
|
@ -71,6 +71,6 @@ public class JSCallGraph extends AstCallGraph {
|
|||
}
|
||||
|
||||
protected CGNode makeFakeRootNode() {
|
||||
return findOrCreateNode(new JSFakeRoot(cha, options), Everywhere.EVERYWHERE);
|
||||
return findOrCreateNode(new JSFakeRoot(cha, options, getAnalysisCache()), Everywhere.EVERYWHERE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.ibm.wala.fixedpoint.impl.AbstractOperator;
|
|||
import com.ibm.wala.fixedpoint.impl.UnaryOperator;
|
||||
import com.ibm.wala.fixpoint.IVariable;
|
||||
import com.ibm.wala.fixpoint.IntSetVariable;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
|
@ -70,8 +71,8 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph
|
|||
|
||||
public static final boolean DEBUG_TYPE_INFERENCE = false;
|
||||
|
||||
protected JSSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, PointerKeyFactory pointerKeyFactory) {
|
||||
super(cha, options, pointerKeyFactory);
|
||||
protected JSSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options,AnalysisCache cache, PointerKeyFactory pointerKeyFactory) {
|
||||
super(cha, options, cache, pointerKeyFactory);
|
||||
}
|
||||
|
||||
protected boolean isConstantRef(SymbolTable symbolTable, int valueNumber) {
|
||||
|
@ -98,7 +99,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph
|
|||
// ///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options) {
|
||||
return new JSCallGraph(cha, options);
|
||||
return new JSCallGraph(cha, options, getAnalysisCache());
|
||||
}
|
||||
|
||||
protected TypeInference makeTypeInference(IR ir, IClassHierarchy cha) {
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.js.ipa.callgraph;
|
||||
|
||||
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;
|
||||
|
@ -28,9 +29,9 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class JSZeroXCFABuilder extends JSCFABuilder {
|
||||
|
||||
public JSZeroXCFABuilder(IClassHierarchy cha, AnalysisOptions options, ContextSelector appContextSelector,
|
||||
public JSZeroXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector appContextSelector,
|
||||
SSAContextInterpreter appContextInterpreter, ReflectionSpecification reflect, int instancePolicy) {
|
||||
super(cha, options);
|
||||
super(cha, options, cache);
|
||||
|
||||
SSAContextInterpreter contextInterpreter = makeDefaultContextInterpreters(appContextInterpreter, options, cha, reflect);
|
||||
setContextInterpreter(contextInterpreter);
|
||||
|
@ -62,7 +63,7 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
|
|||
* deployment descriptor abstraction
|
||||
* @return a 0-1-Opt-CFA Call Graph Builder.
|
||||
*/
|
||||
public static JSCFABuilder make(AnalysisOptions options, IClassHierarchy cha, ClassLoader cl, AnalysisScope scope,
|
||||
public static JSCFABuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, ClassLoader cl, AnalysisScope scope,
|
||||
String[] xmlFiles, byte instancePolicy) {
|
||||
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
|
@ -70,7 +71,7 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
|
|||
com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha);
|
||||
}
|
||||
|
||||
return new JSZeroXCFABuilder(cha, options, null, null, options.getReflectionSpec(), instancePolicy);
|
||||
return new JSZeroXCFABuilder(cha, options, cache, null, null, options.getReflectionSpec(), instancePolicy);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.ibm.wala.cast.js.types.JavaScriptTypes;
|
|||
import com.ibm.wala.cast.types.AstMethodReference;
|
||||
import com.ibm.wala.classLoader.ClassLoaderFactory;
|
||||
import com.ibm.wala.classLoader.SourceFileModule;
|
||||
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.CallGraph;
|
||||
|
@ -47,9 +48,13 @@ public class Util extends com.ibm.wala.cast.ipa.callgraph.Util {
|
|||
public static JavaScriptTranslatorFactory getTranslatorFactory() {
|
||||
return translatorFactory;
|
||||
}
|
||||
|
||||
public static AnalysisCache makeCache(boolean keepIRs) {
|
||||
return new AnalysisCache(AstIRFactory.makeDefaultFactory(keepIRs));
|
||||
}
|
||||
|
||||
public static AnalysisOptions makeOptions(AnalysisScope scope, boolean keepIRs, IClassHierarchy cha, Iterable<Entrypoint> roots) {
|
||||
final AnalysisOptions options = new AnalysisOptions(scope, AstIRFactory.makeDefaultFactory(keepIRs), roots);
|
||||
final AnalysisOptions options = new AnalysisOptions(scope, /* AstIRFactory.makeDefaultFactory(keepIRs), */ roots);
|
||||
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder;
|
|||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroXCFABuilder;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.Util;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
|
||||
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.CallGraph;
|
||||
|
@ -28,8 +29,9 @@ class dumpCallGraph {
|
|||
IClassHierarchy cha = Util.makeHierarchy(scope, loaders);
|
||||
Iterable<Entrypoint> roots = Util.makeScriptRoots(cha);
|
||||
AnalysisOptions options = Util.makeOptions(scope, false, cha, roots);
|
||||
|
||||
JSCFABuilder builder = new JSZeroXCFABuilder(cha, options, null, null, null, ZeroXInstanceKeys.ALLOCATIONS);
|
||||
AnalysisCache cache = Util.makeCache(false);
|
||||
|
||||
JSCFABuilder builder = new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.ALLOCATIONS);
|
||||
|
||||
CallGraph cg = builder.makeCallGraph(options);
|
||||
|
||||
|
|
Loading…
Reference in New Issue