From 0c67118fe25d573a7384c20e89093e88968fd55f Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Thu, 6 Jun 2013 14:30:52 +0800 Subject: [PATCH] Temporary commit; things are broken, but I need to switch back to master for a bit. --- .../cast/js/rhino/test/HTMLCGBuilder.java | 10 +---- .../wala/cast/js/test/TestRhinoSourceMap.java | 6 ++- .../cast/js/test/JSCallGraphBuilderUtil.java | 43 ++++++++++++++++--- .../cast/js/test/TestArgumentSensitivity.java | 2 +- .../js/test/TestSimpleCallGraphShape.java | 12 ++++++ .../js/ipa/callgraph/JSCallGraphUtil.java | 15 +++---- .../PropertyNameContextSelector.java | 4 ++ .../correlations/CorrelationFinder.java | 27 ++++++++---- .../extraction/ClosureExtractor.java | 3 +- .../CorrelatedPairExtractorFactory.java | 10 +++++ 10 files changed, 95 insertions(+), 37 deletions(-) diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/HTMLCGBuilder.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/HTMLCGBuilder.java index 7b302ddde..bfd67e693 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/HTMLCGBuilder.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/HTMLCGBuilder.java @@ -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"); diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java index a03c298d2..9e3b1893a 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java @@ -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)) { diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java index 43337a48c..bafb1d553 100755 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java @@ -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 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 irFactory = AstIRFactory.makeDefaultFactory(); + CAstRewriterFactory preprocessor = builderType.extractCorrelatedPairs ? new CorrelatedPairExtractorFactory(translatorFactory, url) : null; JavaScriptLoaderFactory loaders = new WebPageLoaderFactory(translatorFactory, preprocessor); try { Set 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) { diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivity.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivity.java index 9a2724dc0..07eb07350 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivity.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivity.java @@ -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); diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java index 3c253a2fc..8715bc855 100755 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java @@ -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 { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java index c998c5398..d02ae3ff4 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java @@ -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 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()"); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java index f8aa86f68..ff0ca7ba3 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java @@ -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; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java index f69be0d93..81719d3e7 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java @@ -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 summaries = findCorrelatedAccesses(url); + printCorrelatedAccesses(findCorrelatedAccesses(url)); + } + + private void printCorrelatedAccesses(Map summaries) { List> correlations = new ArrayList>(); for(CorrelationSummary summary : summaries.values()) correlations.addAll(summary.pp()); @@ -247,21 +250,25 @@ public class CorrelationFinder { public Map findCorrelatedAccesses(URL url) throws IOException, ClassHierarchyException { JavaScriptLoader.addBootstrapFile(WebUtil.preamble); - Set script = null; + Set scripts = null; try { - script = WebUtil.extractScriptFromHTML(url).fst; + scripts = WebUtil.extractScriptFromHTML(url).fst; } catch (Error e) { assert false : e.warning; } - Map summaries = findCorrelatedAccesses(script); + Map summaries = findCorrelatedAccesses(scripts); return summaries; } - public Map findCorrelatedAccesses(Set script) throws IOException, + public Map findCorrelatedAccesses(Collection scripts) throws IOException, + ClassHierarchyException { + return findCorrelatedAccesses(scripts.toArray(new SourceModule[scripts.size()])); + } + + public Map 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; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java index 5e7b91890..5f05ea121 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java @@ -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); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java index b52f97cd3..f1b05e5d9 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java @@ -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 { @@ -32,6 +34,14 @@ public class CorrelatedPairExtractorFactory implements CAstRewriterFactory 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 summaries) { this.summaries = summaries; }