support for 1-CFA analysis
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1985 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
465c247fa1
commit
f10ec15eb8
|
@ -0,0 +1,37 @@
|
|||
/******************************************************************************
|
||||
* Copyright (c) 2002 - 2006 IBM Corporation.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.js.client.impl;
|
||||
|
||||
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.*;
|
||||
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;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
||||
/**
|
||||
* @author Julian Dolby (dolby@us.ibm.com)
|
||||
*
|
||||
* A factory to create call graph builders using 0-CFA
|
||||
*/
|
||||
public class OneCFABuilderFactory implements CallGraphBuilderFactory {
|
||||
|
||||
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 JSZeroOrOneXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE, true);
|
||||
}
|
||||
}
|
|
@ -11,7 +11,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.cast.js.ipa.callgraph.*;
|
||||
import com.ibm.wala.client.CallGraphBuilderFactory;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
|
@ -32,6 +32,6 @@ public class ZeroCFABuilderFactory implements CallGraphBuilderFactory {
|
|||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
|
||||
|
||||
return new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE);
|
||||
return new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE, false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,19 +18,19 @@ import com.ibm.wala.ipa.callgraph.ReflectionSpecification;
|
|||
import com.ibm.wala.ipa.callgraph.impl.DefaultContextSelector;
|
||||
import com.ibm.wala.ipa.callgraph.impl.DelegatingContextSelector;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.*;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
||||
/**
|
||||
* @author sfink
|
||||
*
|
||||
* 0-1-CFA Call graph builder, optimized to not disambiguate instances of
|
||||
* 0-x-CFA Call graph builder, optimized to not disambiguate instances of
|
||||
* "uninteresting" types
|
||||
*/
|
||||
public class JSZeroXCFABuilder extends JSCFABuilder {
|
||||
public class JSZeroOrOneXCFABuilder extends JSCFABuilder {
|
||||
|
||||
public JSZeroXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector appContextSelector,
|
||||
SSAContextInterpreter appContextInterpreter, ReflectionSpecification reflect, int instancePolicy) {
|
||||
public JSZeroOrOneXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector appContextSelector,
|
||||
SSAContextInterpreter appContextInterpreter, ReflectionSpecification reflect, int instancePolicy, boolean doOneCFA) {
|
||||
super(cha, options, cache);
|
||||
|
||||
SSAContextInterpreter contextInterpreter = makeDefaultContextInterpreters(appContextInterpreter, options, cha, reflect);
|
||||
|
@ -40,7 +40,9 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
|
|||
|
||||
ContextSelector def = new DefaultContextSelector(cha, options.getMethodTargetSelector());
|
||||
ContextSelector contextSelector = appContextSelector == null ? def : new DelegatingContextSelector(appContextSelector, def);
|
||||
|
||||
if (doOneCFA) {
|
||||
contextSelector = new OneLevelContextSelector(contextSelector);
|
||||
}
|
||||
setContextSelector(contextSelector);
|
||||
|
||||
setInstanceKeys(new JavaScriptScopeMappingInstanceKeys(cha, this, new ZeroXInstanceKeys(options, cha, contextInterpreter,
|
||||
|
@ -63,15 +65,21 @@ public class JSZeroXCFABuilder 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, AnalysisScope scope,
|
||||
String[] xmlFiles, byte instancePolicy) {
|
||||
|
||||
public static JSCFABuilder make(AnalysisOptions 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++) {
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha);
|
||||
}
|
||||
|
||||
return new JSZeroXCFABuilder(cha, options, cache, null, null, options.getReflectionSpec(), instancePolicy);
|
||||
return new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, options.getReflectionSpec(), instancePolicy, doOneCFA);
|
||||
}
|
||||
|
||||
/*
|
|
@ -8,8 +8,7 @@
|
|||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*****************************************************************************/
|
||||
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.*;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.Util;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
|
@ -31,7 +30,7 @@ class dumpCallGraph {
|
|||
AnalysisOptions options = Util.makeOptions(scope, false, cha, roots);
|
||||
AnalysisCache cache = Util.makeCache(false);
|
||||
|
||||
JSCFABuilder builder = new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.ALLOCATIONS);
|
||||
JSCFABuilder builder = new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.ALLOCATIONS, false);
|
||||
|
||||
CallGraph cg = builder.makeCallGraph(options);
|
||||
|
||||
|
|
Loading…
Reference in New Issue