Temporary commit; things are broken, but I need to switch back to master for a bit.
This commit is contained in:
parent
4908c22c94
commit
3d974b8313
|
@ -75,12 +75,10 @@ public class HTMLCGBuilder {
|
|||
* the HTML page to analyse, can either be a path to a local file or a URL
|
||||
* @param timeout
|
||||
* analysis timeout in seconds, -1 means no timeout
|
||||
* @param automated_extraction
|
||||
* whether to automatically extract correlated pairs
|
||||
* @throws IOException
|
||||
* @throws ClassHierarchyException
|
||||
*/
|
||||
public static CGBuilderResult buildHTMLCG(String src, int timeout, boolean automated_extraction, CGBuilderType builderType)
|
||||
public static CGBuilderResult buildHTMLCG(String src, int timeout, CGBuilderType builderType)
|
||||
throws ClassHierarchyException, IOException {
|
||||
CGBuilderResult res = new CGBuilderResult();
|
||||
URL url = null;
|
||||
|
@ -90,13 +88,9 @@ public class HTMLCGBuilder {
|
|||
Assert.fail("Could not find page to analyse: " + src);
|
||||
}
|
||||
com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory());
|
||||
if(automated_extraction)
|
||||
com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setPreprocessor(new CorrelatedPairExtractorFactory(new CAstRhinoTranslatorFactory(), url));
|
||||
JSCFABuilder builder = null;
|
||||
try {
|
||||
builder = JSCallGraphBuilderUtil.makeHTMLCGBuilder(url, builderType);
|
||||
builder.setContextSelector(new PropertyNameContextSelector(builder.getAnalysisCache(), 2, builder.getContextSelector()));
|
||||
builder.setContextSelector(new PropertyNameContextSelector(builder.getAnalysisCache(), 3, builder.getContextSelector()));
|
||||
// TODO we need to find a better way to do this ContextSelector delegation;
|
||||
// the code below belongs somewhere else!!!
|
||||
// the bound of 4 is what is needed to pass our current framework tests
|
||||
|
@ -191,7 +185,7 @@ public class HTMLCGBuilder {
|
|||
JavaScriptFunctionDotCallTargetSelector.WARN_ABOUT_IMPRECISE_CALLGRAPH = false;
|
||||
|
||||
// build call graph
|
||||
CGBuilderResult res = buildHTMLCG(src, timeout, true, AstTranslator.NEW_LEXICAL ? CGBuilderType.ONE_CFA_PRECISE_LEXICAL : CGBuilderType.ZERO_ONE_CFA);
|
||||
CGBuilderResult res = buildHTMLCG(src, timeout, AstTranslator.NEW_LEXICAL ? CGBuilderType.ONE_CFA_PRECISE_LEXICAL : CGBuilderType.ZERO_ONE_CFA);
|
||||
|
||||
if(res.construction_time == -1)
|
||||
System.out.println("TIMED OUT");
|
||||
|
|
|
@ -16,6 +16,7 @@ import static com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFa
|
|||
import static com.ibm.wala.cast.js.test.JSCallGraphBuilderUtil.makeScriptScope;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
@ -160,8 +161,9 @@ public class TestRhinoSourceMap {
|
|||
sources.put(assertion[0], assertion[1]);
|
||||
}
|
||||
|
||||
JavaScriptLoaderFactory loaders = makeLoaders();
|
||||
AnalysisScope scope = makeScriptScope("tests", fileName, loaders);
|
||||
URL script = TestRhinoSourceMap.class.getClassLoader().getResource(fileName);
|
||||
JavaScriptLoaderFactory loaders = makeLoaders(null);
|
||||
AnalysisScope scope = makeScriptScope(script, "tests", fileName, loaders);
|
||||
IClassHierarchy cha = makeHierarchy(scope, loaders);
|
||||
for(IClass cls : cha) {
|
||||
if (cls.getName().toString().contains(fileName)) {
|
||||
|
|
|
@ -27,9 +27,12 @@ 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.JSCallGraphUtil;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.PropertyNameContextSelector;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.correlations.extraction.CorrelatedPairExtractorFactory;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoader;
|
||||
import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
|
||||
import com.ibm.wala.cast.loader.CAstAbstractLoader;
|
||||
import com.ibm.wala.cast.tree.rewrite.CAstRewriterFactory;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.classLoader.SourceFileModule;
|
||||
import com.ibm.wala.classLoader.SourceModule;
|
||||
|
@ -52,19 +55,25 @@ import com.ibm.wala.util.WalaException;
|
|||
public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil {
|
||||
|
||||
public static enum CGBuilderType {
|
||||
ZERO_ONE_CFA(false, false, true), ZERO_ONE_CFA_NO_CALL_APPLY(false, false, false), ZERO_ONE_CFA_PRECISE_LEXICAL(false, true,
|
||||
true), ONE_CFA(true, false, true), ONE_CFA_PRECISE_LEXICAL(true, true, true);
|
||||
ZERO_ONE_CFA(false, false, true, true),
|
||||
ZERO_ONE_CFA_NO_CALL_APPLY(false, false, false, true),
|
||||
ZERO_ONE_CFA_PRECISE_LEXICAL(false, true, true, true),
|
||||
ONE_CFA(true, false, true, true),
|
||||
ONE_CFA_PRECISE_LEXICAL(true, true, true, true);
|
||||
|
||||
private final boolean useOneCFA;
|
||||
|
||||
private final boolean usePreciseLexical;
|
||||
|
||||
private final boolean handleCallApply;
|
||||
|
||||
private final boolean extractCorrelatedPairs;
|
||||
|
||||
private CGBuilderType(boolean useOneCFA, boolean usePreciseLexical, boolean handleCallApply) {
|
||||
private CGBuilderType(boolean useOneCFA, boolean usePreciseLexical, boolean handleCallApply, boolean extractCorrelatedPairs) {
|
||||
this.useOneCFA = useOneCFA;
|
||||
this.usePreciseLexical = usePreciseLexical;
|
||||
this.handleCallApply = handleCallApply;
|
||||
this.extractCorrelatedPairs = extractCorrelatedPairs;
|
||||
}
|
||||
|
||||
public boolean useOneCFA() {
|
||||
|
@ -74,26 +83,40 @@ public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.J
|
|||
public boolean usePreciseLexical() {
|
||||
return usePreciseLexical;
|
||||
}
|
||||
|
||||
public boolean handleCallApply() {
|
||||
return handleCallApply;
|
||||
}
|
||||
|
||||
public boolean extractCorrelatedPairs() {
|
||||
return extractCorrelatedPairs;
|
||||
}
|
||||
}
|
||||
|
||||
public static JSCFABuilder makeScriptCGBuilder(String dir, String name, CGBuilderType builderType) throws IOException, WalaException {
|
||||
JavaScriptLoaderFactory loaders = JSCallGraphUtil.makeLoaders();
|
||||
URL script = getURLforFile(dir, name);
|
||||
CAstRewriterFactory preprocessor = builderType.extractCorrelatedPairs ? new CorrelatedPairExtractorFactory(translatorFactory, script) : null;
|
||||
JavaScriptLoaderFactory loaders = JSCallGraphUtil.makeLoaders(preprocessor);
|
||||
|
||||
AnalysisScope scope = makeScriptScope(dir, name, loaders);
|
||||
AnalysisScope scope = makeScriptScope(script, dir, name, loaders);
|
||||
|
||||
return makeCG(loaders, scope, builderType, AstIRFactory.makeDefaultFactory());
|
||||
}
|
||||
|
||||
static AnalysisScope makeScriptScope(String dir, String name, JavaScriptLoaderFactory loaders) throws IOException {
|
||||
private static URL getURLforFile(String dir, String name) {
|
||||
URL script = JSCallGraphBuilderUtil.class.getClassLoader().getResource(dir + File.separator + name);
|
||||
if (script == null) {
|
||||
script = JSCallGraphBuilderUtil.class.getClassLoader().getResource(dir + "/" + name);
|
||||
}
|
||||
assert script != null : "cannot find " + dir + " and " + name;
|
||||
return script;
|
||||
}
|
||||
|
||||
static AnalysisScope makeScriptScope(String dir, String name, JavaScriptLoaderFactory loaders) throws IOException {
|
||||
return makeScriptScope(getURLforFile(dir, name), dir, name, loaders);
|
||||
}
|
||||
|
||||
static AnalysisScope makeScriptScope(URL script, String dir, String name, JavaScriptLoaderFactory loaders) throws IOException {
|
||||
AnalysisScope scope;
|
||||
if (script.openConnection() instanceof JarURLConnection) {
|
||||
scope = makeScope(new URL[] { script }, loaders, JavaScriptLoader.JS);
|
||||
|
@ -122,7 +145,8 @@ public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.J
|
|||
|
||||
public static CallGraph makeScriptCG(SourceModule[] scripts, CGBuilderType builderType, IRFactory<IMethod> irFactory) throws IOException, IllegalArgumentException,
|
||||
CancelException, WalaException {
|
||||
PropagationCallGraphBuilder b = makeCGBuilder(makeLoaders(), scripts, builderType, irFactory);
|
||||
CAstRewriterFactory preprocessor = builderType.extractCorrelatedPairs ? new CorrelatedPairExtractorFactory(translatorFactory, scripts) : null;
|
||||
PropagationCallGraphBuilder b = makeCGBuilder(makeLoaders(preprocessor), scripts, builderType, irFactory);
|
||||
CallGraph CG = b.makeCallGraph(b.getOptions());
|
||||
// dumpCG(b.getPointerAnalysis(), CG);
|
||||
return CG;
|
||||
|
@ -136,6 +160,7 @@ public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.J
|
|||
JavaScriptLoader.addBootstrapFile(WebUtil.preamble);
|
||||
SourceModule[] scripts;
|
||||
IRFactory<IMethod> irFactory = AstIRFactory.makeDefaultFactory();
|
||||
CAstRewriterFactory preprocessor = builderType.extractCorrelatedPairs ? new CorrelatedPairExtractorFactory(translatorFactory, url) : null;
|
||||
JavaScriptLoaderFactory loaders = new WebPageLoaderFactory(translatorFactory, preprocessor);
|
||||
try {
|
||||
Set<MappedSourceModule> script = WebUtil.extractScriptFromHTML(url).fst;
|
||||
|
@ -146,6 +171,8 @@ public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.J
|
|||
((CAstAbstractLoader)loaders.getTheLoader()).addMessage(dummy, e.warning);
|
||||
}
|
||||
JSCFABuilder builder = makeCGBuilder(loaders, scripts, builderType, irFactory);
|
||||
if(builderType.extractCorrelatedPairs)
|
||||
builder.setContextSelector(new PropertyNameContextSelector(builder.getAnalysisCache(), 2, builder.getContextSelector()));
|
||||
builder.setBaseURL(url);
|
||||
return builder;
|
||||
}
|
||||
|
@ -180,6 +207,8 @@ public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.J
|
|||
AnalysisCache cache = makeCache(irFactory);
|
||||
JSCFABuilder builder = new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, ZeroXInstanceKeys.ALLOCATIONS,
|
||||
builderType.useOneCFA());
|
||||
if(builderType.extractCorrelatedPairs())
|
||||
builder.setContextSelector(new PropertyNameContextSelector(builder.getAnalysisCache(), 2, builder.getContextSelector()));
|
||||
|
||||
return builder;
|
||||
} catch (ClassHierarchyException e) {
|
||||
|
|
|
@ -41,7 +41,7 @@ public abstract class TestArgumentSensitivity extends TestJSCallGraphShape {
|
|||
new Object[] { "tests/args.js/a", new String[] { "tests/args.js/y", "tests/args.js/z", "!tests/args.js/wrong" } } };
|
||||
|
||||
@Test public void testArgs() throws IOException, IllegalArgumentException, CancelException, ClassHierarchyException, WalaException {
|
||||
JavaScriptLoaderFactory loaders = JSCallGraphBuilderUtil.makeLoaders();
|
||||
JavaScriptLoaderFactory loaders = JSCallGraphBuilderUtil.makeLoaders(null);
|
||||
AnalysisScope scope = JSCallGraphBuilderUtil.makeScriptScope("tests", "args.js", loaders);
|
||||
|
||||
IClassHierarchy cha = JSCallGraphBuilderUtil.makeHierarchy(scope, loaders);
|
||||
|
|
|
@ -652,6 +652,18 @@ public abstract class TestSimpleCallGraphShape extends TestJSCallGraphShape {
|
|||
//JSCallGraphUtil.dumpCG(B.getPointerAnalysis(), CG);
|
||||
verifyGraphAssertions(CG, assertionsForDeadCode);
|
||||
}
|
||||
|
||||
private static final Object[][] assertionsForExtend = new Object[][] {
|
||||
new Object[] { ROOT, new String[] { "tests/extend.js" } },
|
||||
new Object[] { "tests/extend.js", new String[] { "suffix:foo", "!suffix:bar" } }
|
||||
};
|
||||
|
||||
@Test
|
||||
public void testExtend() throws IOException, WalaException, IllegalArgumentException, CancelException {
|
||||
JSCFABuilder builder = JSCallGraphBuilderUtil.makeScriptCGBuilder("tests", "extend.js");
|
||||
CallGraph cg = builder.makeCallGraph(builder.getOptions());
|
||||
verifyGraphAssertions(cg, assertionsForExtend);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeadCatch() throws IllegalArgumentException, IOException, CancelException, WalaException {
|
||||
|
|
|
@ -63,11 +63,6 @@ public class JSCallGraphUtil extends com.ibm.wala.cast.ipa.callgraph.CAstCallGra
|
|||
*/
|
||||
public static JavaScriptTranslatorFactory translatorFactory;
|
||||
|
||||
/**
|
||||
* preprocessor to run generated CAst trees through, null if none
|
||||
*/
|
||||
public static CAstRewriterFactory preprocessor;
|
||||
|
||||
/**
|
||||
* Set up the translator factory. This method should be called before invoking
|
||||
* {@link #makeLoaders()}.
|
||||
|
@ -80,10 +75,6 @@ public class JSCallGraphUtil extends com.ibm.wala.cast.ipa.callgraph.CAstCallGra
|
|||
return translatorFactory;
|
||||
}
|
||||
|
||||
public static void setPreprocessor(CAstRewriterFactory preprocessor) {
|
||||
JSCallGraphUtil.preprocessor = preprocessor;
|
||||
}
|
||||
|
||||
public static JSAnalysisOptions makeOptions(AnalysisScope scope, IClassHierarchy cha, Iterable<Entrypoint> roots) {
|
||||
final JSAnalysisOptions options = new JSAnalysisOptions(scope, /*
|
||||
* AstIRFactory.
|
||||
|
@ -101,7 +92,11 @@ public class JSCallGraphUtil extends com.ibm.wala.cast.ipa.callgraph.CAstCallGra
|
|||
return options;
|
||||
}
|
||||
|
||||
public static JavaScriptLoaderFactory makeLoaders() {
|
||||
/**
|
||||
* @param preprocessor CAst rewriter to use for preprocessing JavaScript source files; may be null
|
||||
* @return
|
||||
*/
|
||||
public static JavaScriptLoaderFactory makeLoaders(CAstRewriterFactory preprocessor) {
|
||||
if (translatorFactory == null) {
|
||||
throw new IllegalStateException("com.ibm.wala.cast.js.ipa.callgraph.Util.setTranslatorFactory() must be invoked before makeLoaders()");
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.wala.cast.ir.ssa.AbstractReflectiveGet;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIRFactory;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.correlations.CorrelationFinder;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.correlations.extraction.ClosureExtractor;
|
||||
|
@ -27,14 +28,17 @@ import com.ibm.wala.ipa.callgraph.Context;
|
|||
import com.ibm.wala.ipa.callgraph.ContextItem;
|
||||
import com.ibm.wala.ipa.callgraph.ContextKey;
|
||||
import com.ibm.wala.ipa.callgraph.ContextSelector;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Everywhere;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.ConcreteTypeKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.FilteredPointerKey.SingleInstanceFilter;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ssa.DefUse;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.ReflectiveMemberAccess;
|
||||
import com.ibm.wala.ssa.SSAAbstractInvokeInstruction;
|
||||
import com.ibm.wala.ssa.SSAGetInstruction;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.ssa.SSAOptions;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.util.collections.HashMapFactory;
|
||||
import com.ibm.wala.util.collections.Iterator2Iterable;
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.io.IOException;
|
|||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
|
@ -78,7 +79,6 @@ public class CorrelationFinder {
|
|||
|
||||
private final JavaScriptTranslatorFactory translatorFactory;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static CorrelationSummary findCorrelatedAccesses(IMethod method, IR ir) {
|
||||
AstMethod astMethod = (AstMethod)method;
|
||||
DefUse du = new DefUse(ir);
|
||||
|
@ -229,7 +229,10 @@ public class CorrelationFinder {
|
|||
|
||||
@SuppressWarnings("unused")
|
||||
private void printCorrelatedAccesses(URL url) throws IOException, ClassHierarchyException {
|
||||
Map<IMethod, CorrelationSummary> summaries = findCorrelatedAccesses(url);
|
||||
printCorrelatedAccesses(findCorrelatedAccesses(url));
|
||||
}
|
||||
|
||||
private void printCorrelatedAccesses(Map<IMethod, CorrelationSummary> summaries) {
|
||||
List<Pair<Position, String>> correlations = new ArrayList<Pair<Position,String>>();
|
||||
for(CorrelationSummary summary : summaries.values())
|
||||
correlations.addAll(summary.pp());
|
||||
|
@ -247,21 +250,25 @@ public class CorrelationFinder {
|
|||
|
||||
public Map<IMethod, CorrelationSummary> findCorrelatedAccesses(URL url) throws IOException, ClassHierarchyException {
|
||||
JavaScriptLoader.addBootstrapFile(WebUtil.preamble);
|
||||
Set<? extends SourceModule> script = null;
|
||||
Set<? extends SourceModule> scripts = null;
|
||||
try {
|
||||
script = WebUtil.extractScriptFromHTML(url).fst;
|
||||
scripts = WebUtil.extractScriptFromHTML(url).fst;
|
||||
} catch (Error e) {
|
||||
assert false : e.warning;
|
||||
}
|
||||
Map<IMethod, CorrelationSummary> summaries = findCorrelatedAccesses(script);
|
||||
Map<IMethod, CorrelationSummary> summaries = findCorrelatedAccesses(scripts);
|
||||
return summaries;
|
||||
}
|
||||
|
||||
public Map<IMethod, CorrelationSummary> findCorrelatedAccesses(Set<? extends SourceModule> script) throws IOException,
|
||||
public Map<IMethod, CorrelationSummary> findCorrelatedAccesses(Collection<? extends SourceModule> scripts) throws IOException,
|
||||
ClassHierarchyException {
|
||||
return findCorrelatedAccesses(scripts.toArray(new SourceModule[scripts.size()]));
|
||||
}
|
||||
|
||||
public Map<IMethod, CorrelationSummary> findCorrelatedAccesses(SourceModule[] scripts_array) throws IOException,
|
||||
ClassHierarchyException {
|
||||
SourceModule[] scripts = script.toArray(new SourceModule[script.size()]);
|
||||
WebPageLoaderFactory loaders = new WebPageLoaderFactory(translatorFactory);
|
||||
CAstAnalysisScope scope = new CAstAnalysisScope(scripts, loaders, Collections.singleton(JavaScriptLoader.JS));
|
||||
CAstAnalysisScope scope = new CAstAnalysisScope(scripts_array, loaders, Collections.singleton(JavaScriptLoader.JS));
|
||||
IClassHierarchy cha = ClassHierarchy.make(scope, loaders, JavaScriptLoader.JS);
|
||||
try {
|
||||
Util.checkForFrontEndErrors(cha);
|
||||
|
@ -274,11 +281,15 @@ public class CorrelationFinder {
|
|||
for(IClass klass : cha) {
|
||||
for(IMethod method : klass.getAllMethods()) {
|
||||
IR ir = factory.makeIR(method, Everywhere.EVERYWHERE, SSAOptions.defaultOptions());
|
||||
if(method.toString().endsWith("__WINDOW_MAIN__>"))
|
||||
System.out.println(ir);
|
||||
CorrelationSummary summary = findCorrelatedAccesses(method, ir);
|
||||
if(!summary.getCorrelations().isEmpty())
|
||||
correlations.put(method, summary);
|
||||
}
|
||||
}
|
||||
|
||||
printCorrelatedAccesses(correlations);
|
||||
return correlations;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ import com.ibm.wala.cast.tree.impl.CAstControlFlowRecorder;
|
|||
import com.ibm.wala.cast.tree.impl.CAstOperator;
|
||||
import com.ibm.wala.cast.tree.impl.CAstSymbolImpl;
|
||||
import com.ibm.wala.cast.tree.rewrite.CAstBasicRewriter.NoKey;
|
||||
import com.ibm.wala.cast.util.CAstPrinter;
|
||||
import com.ibm.wala.util.collections.HashMapFactory;
|
||||
import com.ibm.wala.util.collections.HashSetFactory;
|
||||
import com.ibm.wala.util.collections.Pair;
|
||||
|
@ -419,7 +420,7 @@ public class ClosureExtractor extends CAstRewriterExt {
|
|||
boolean extractingEmpty = false;
|
||||
|
||||
String name = EXTRACTED_FUN_BASENAME + (anonymous_counter++);
|
||||
|
||||
|
||||
// Create a new entity for the extracted function.
|
||||
ExtractedFunction new_entity = new ExtractedFunction(name, context);
|
||||
context.setExtractedEntity(new_entity);
|
||||
|
|
|
@ -13,6 +13,7 @@ package com.ibm.wala.cast.js.ipa.callgraph.correlations.extraction;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.correlations.CorrelationFinder;
|
||||
|
@ -23,6 +24,7 @@ import com.ibm.wala.cast.tree.CAstEntity;
|
|||
import com.ibm.wala.cast.tree.rewrite.CAstBasicRewriter.NoKey;
|
||||
import com.ibm.wala.cast.tree.rewrite.CAstRewriterFactory;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.classLoader.SourceModule;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
|
||||
public class CorrelatedPairExtractorFactory implements CAstRewriterFactory<NodePos, NoKey> {
|
||||
|
@ -32,6 +34,14 @@ public class CorrelatedPairExtractorFactory implements CAstRewriterFactory<NodeP
|
|||
this(new CorrelationFinder(translatorFactory).findCorrelatedAccesses(entryPoint));
|
||||
}
|
||||
|
||||
public CorrelatedPairExtractorFactory(JavaScriptTranslatorFactory translatorFactory, Collection<? extends SourceModule> scripts) throws ClassHierarchyException, IOException {
|
||||
this(new CorrelationFinder(translatorFactory).findCorrelatedAccesses(scripts));
|
||||
}
|
||||
|
||||
public CorrelatedPairExtractorFactory(JavaScriptTranslatorFactory translatorFactory, SourceModule[] scripts) throws ClassHierarchyException, IOException {
|
||||
this(new CorrelationFinder(translatorFactory).findCorrelatedAccesses(scripts));
|
||||
}
|
||||
|
||||
public CorrelatedPairExtractorFactory(Map<IMethod, CorrelationSummary> summaries) {
|
||||
this.summaries = summaries;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue