create JSAnalysisOptions, and use to add proper option to disable handling of call / apply
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@4405 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
bbbc93d8c6
commit
ea7be296c8
|
@ -21,6 +21,7 @@ import junit.framework.Assert;
|
|||
import com.ibm.wala.cast.js.html.MappedSourceModule;
|
||||
import com.ibm.wala.cast.js.html.WebPageLoaderFactory;
|
||||
import com.ibm.wala.cast.js.html.WebUtil;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoader;
|
||||
|
@ -28,7 +29,6 @@ import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
|
|||
import com.ibm.wala.classLoader.SourceFileModule;
|
||||
import com.ibm.wala.classLoader.SourceModule;
|
||||
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;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
|
@ -116,7 +116,7 @@ public class Util extends com.ibm.wala.cast.js.ipa.callgraph.Util {
|
|||
IClassHierarchy cha = makeHierarchy(scope, loaders);
|
||||
com.ibm.wala.cast.test.Util.checkForFrontEndErrors(cha);
|
||||
Iterable<Entrypoint> roots = makeScriptRoots(cha);
|
||||
AnalysisOptions options = makeOptions(scope, cha, roots);
|
||||
JSAnalysisOptions options = makeOptions(scope, cha, roots);
|
||||
AnalysisCache cache = makeCache();
|
||||
|
||||
JSCFABuilder builder = new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, ZeroXInstanceKeys.ALLOCATIONS, useOneCFA);
|
||||
|
|
|
@ -17,6 +17,7 @@ import java.util.jar.JarFile;
|
|||
import com.ibm.wala.cast.ipa.callgraph.CAstAnalysisScope;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIRFactory;
|
||||
import com.ibm.wala.cast.js.client.impl.ZeroCFABuilderFactory;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JavaScriptEntryPoints;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoader;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
|
||||
|
@ -98,6 +99,6 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine {
|
|||
|
||||
@Override
|
||||
protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
|
||||
return new ZeroCFABuilderFactory().make(options, cache, cha, scope, false);
|
||||
return new ZeroCFABuilderFactory().make((JSAnalysisOptions) options, cache, cha, scope, false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
package com.ibm.wala.cast.js.client.impl;
|
||||
|
||||
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
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;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
|
||||
|
@ -26,7 +26,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class OneCFABuilderFactory {
|
||||
|
||||
public CallGraphBuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope,
|
||||
public CallGraphBuilder make(JSAnalysisOptions 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()));
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
package com.ibm.wala.cast.js.client.impl;
|
||||
|
||||
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
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;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
|
||||
|
@ -26,7 +26,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class ZeroCFABuilderFactory {
|
||||
|
||||
public CallGraphBuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope,
|
||||
public CallGraphBuilder make(JSAnalysisOptions 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()));
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package com.ibm.wala.cast.js.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
|
||||
/**
|
||||
* call graph construction options specific to JavaScript.
|
||||
*/
|
||||
public class JSAnalysisOptions extends AnalysisOptions {
|
||||
|
||||
/**
|
||||
* should the analysis model the semantics of Function.prototype.call / apply?
|
||||
* Defaults to true.
|
||||
*/
|
||||
private boolean handleCallApply = true;
|
||||
|
||||
public JSAnalysisOptions(AnalysisScope scope, Iterable<? extends Entrypoint> e) {
|
||||
super(scope, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* should the analysis model the semantics of Function.prototype.call / apply?
|
||||
*/
|
||||
public boolean handleCallApply() {
|
||||
return handleCallApply;
|
||||
}
|
||||
|
||||
public void setHandleCallApply(boolean handleCallApply) {
|
||||
this.handleCallApply = handleCallApply;
|
||||
}
|
||||
|
||||
}
|
|
@ -13,7 +13,6 @@ package com.ibm.wala.cast.js.ipa.callgraph;
|
|||
import com.ibm.wala.cast.ipa.callgraph.LexicalScopingResolverContexts;
|
||||
import com.ibm.wala.cast.ipa.callgraph.ScopeMappingKeysContextSelector;
|
||||
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.MethodTargetSelector;
|
||||
|
@ -30,20 +29,17 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
* "uninteresting" types
|
||||
*/
|
||||
public class JSZeroOrOneXCFABuilder extends JSCFABuilder {
|
||||
private static final boolean SIMPLE = false;
|
||||
|
||||
private static final boolean HANDLE_FUNCTION_PROTOTYPE_CALL = !SIMPLE && true;
|
||||
private static final boolean HANDLE_FUNCTION_PROTOTYPE_APPLY = !SIMPLE && true;
|
||||
private static final boolean USE_OBJECT_SENSITIVITY = !SIMPLE && true;
|
||||
private static final boolean USE_OBJECT_SENSITIVITY = false;
|
||||
|
||||
private static final boolean USE_LOAD_FILE_TARGET_SELECTOR = false;
|
||||
|
||||
public JSZeroOrOneXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache,
|
||||
public JSZeroOrOneXCFABuilder(IClassHierarchy cha, JSAnalysisOptions options, AnalysisCache cache,
|
||||
ContextSelector appContextSelector, SSAContextInterpreter appContextInterpreter, int instancePolicy, boolean doOneCFA) {
|
||||
super(cha, options, cache);
|
||||
|
||||
SSAContextInterpreter contextInterpreter = makeDefaultContextInterpreters(appContextInterpreter, options, cha);
|
||||
if (HANDLE_FUNCTION_PROTOTYPE_APPLY) {
|
||||
if (options.handleCallApply()) {
|
||||
contextInterpreter = new DelegatingSSAContextInterpreter(new JavaScriptFunctionApplyContextInterpreter(options, cache),
|
||||
contextInterpreter);
|
||||
}
|
||||
|
@ -51,7 +47,7 @@ public class JSZeroOrOneXCFABuilder extends JSCFABuilder {
|
|||
|
||||
MethodTargetSelector targetSelector = new JavaScriptConstructTargetSelector(cha, options
|
||||
.getMethodTargetSelector());
|
||||
if (HANDLE_FUNCTION_PROTOTYPE_CALL) {
|
||||
if (options.handleCallApply()) {
|
||||
targetSelector = new JavaScriptFunctionDotCallTargetSelector(targetSelector);
|
||||
}
|
||||
if (USE_LOAD_FILE_TARGET_SELECTOR) {
|
||||
|
@ -66,7 +62,7 @@ public class JSZeroOrOneXCFABuilder extends JSCFABuilder {
|
|||
if (USE_OBJECT_SENSITIVITY) {
|
||||
contextSelector = new ObjectSensitivityContextSelector(contextSelector);
|
||||
}
|
||||
if (HANDLE_FUNCTION_PROTOTYPE_APPLY) {
|
||||
if (options.handleCallApply()) {
|
||||
contextSelector = new JavaScriptFunctionApplyContextSelector(contextSelector);
|
||||
}
|
||||
contextSelector = new LexicalScopingResolverContexts(this, contextSelector);
|
||||
|
@ -95,7 +91,7 @@ public class JSZeroOrOneXCFABuilder extends JSCFABuilder {
|
|||
* deployment descriptor abstraction
|
||||
* @return a 0-1-Opt-CFA Call Graph Builder.
|
||||
*/
|
||||
public static JSCFABuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, ClassLoader cl,
|
||||
public static JSCFABuilder make(JSAnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, ClassLoader cl,
|
||||
AnalysisScope scope, String[] xmlFiles, byte instancePolicy, boolean doOneCFA) {
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
for (int i = 0; i < xmlFiles.length; i++) {
|
||||
|
|
|
@ -38,7 +38,6 @@ import com.ibm.wala.cfg.AbstractCFG;
|
|||
import com.ibm.wala.classLoader.ClassLoaderFactory;
|
||||
import com.ibm.wala.classLoader.IClass;
|
||||
import com.ibm.wala.classLoader.SourceURLModule;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
|
@ -82,8 +81,8 @@ public class Util extends com.ibm.wala.cast.ipa.callgraph.Util {
|
|||
Util.preprocessor = preprocessor;
|
||||
}
|
||||
|
||||
public static AnalysisOptions makeOptions(AnalysisScope scope, IClassHierarchy cha, Iterable<Entrypoint> roots) {
|
||||
final AnalysisOptions options = new AnalysisOptions(scope, /*
|
||||
public static JSAnalysisOptions makeOptions(AnalysisScope scope, IClassHierarchy cha, Iterable<Entrypoint> roots) {
|
||||
final JSAnalysisOptions options = new JSAnalysisOptions(scope, /*
|
||||
* AstIRFactory.
|
||||
* makeDefaultFactory
|
||||
* (keepIRs),
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*****************************************************************************/
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.Util;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoader;
|
||||
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;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
|
@ -29,7 +29,7 @@ class dumpCallGraph {
|
|||
AnalysisScope scope = Util.makeScope(args, loaders, JavaScriptLoader.JS);
|
||||
IClassHierarchy cha = Util.makeHierarchy(scope, loaders);
|
||||
Iterable<Entrypoint> roots = Util.makeScriptRoots(cha);
|
||||
AnalysisOptions options = Util.makeOptions(scope, cha, roots);
|
||||
JSAnalysisOptions options = Util.makeOptions(scope, cha, roots);
|
||||
AnalysisCache cache = Util.makeCache();
|
||||
|
||||
JSCFABuilder builder = new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, ZeroXInstanceKeys.ALLOCATIONS, false);
|
||||
|
|
Loading…
Reference in New Issue