more type parameters for analysis engine
This commit is contained in:
parent
e2c1f72a3e
commit
41d254d547
|
@ -40,6 +40,7 @@ import com.ibm.wala.classLoader.SourceFileModule;
|
|||
import com.ibm.wala.client.AbstractAnalysisEngine;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
@ -345,11 +346,11 @@ public abstract class IRTests {
|
|||
return new String[] { "L" + pkgName + "/" + getTestName().substring(4) };
|
||||
}
|
||||
|
||||
protected abstract <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(String[] mainClassDescriptors, Collection<String> sources, List<String> libs);
|
||||
protected abstract <I extends InstanceKey> AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> getAnalysisEngine(String[] mainClassDescriptors, Collection<String> sources, List<String> libs);
|
||||
|
||||
public <I extends InstanceKey> Pair<CallGraph, PointerAnalysis<I>> runTest(Collection<String> sources, List<String> libs,
|
||||
String[] mainClassDescriptors, List<? extends IRAssertion> ca, boolean assertReachable) throws IllegalArgumentException, CancelException, IOException {
|
||||
AbstractAnalysisEngine<I> engine = getAnalysisEngine(mainClassDescriptors, sources, libs);
|
||||
AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> engine = getAnalysisEngine(mainClassDescriptors, sources, libs);
|
||||
|
||||
CallGraph callGraph;
|
||||
callGraph = engine.buildDefaultCallGraph();
|
||||
|
|
|
@ -43,7 +43,7 @@ import com.ibm.wala.util.io.FileProvider;
|
|||
|
||||
/**
|
||||
*/
|
||||
public abstract class JavaSourceAnalysisEngine<I extends InstanceKey> extends AbstractAnalysisEngine<I> {
|
||||
public abstract class JavaSourceAnalysisEngine<I extends InstanceKey> extends AbstractAnalysisEngine<I, CallGraphBuilder<I>, Void> {
|
||||
|
||||
/**
|
||||
* Modules which are user-space code
|
||||
|
|
|
@ -51,7 +51,7 @@ import com.ibm.wala.util.collections.HashSetFactory;
|
|||
import com.ibm.wala.util.collections.Pair;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
public abstract class JavaScriptAnalysisEngine<I extends InstanceKey> extends AbstractAnalysisEngine<I> {
|
||||
public abstract class JavaScriptAnalysisEngine<I extends InstanceKey> extends AbstractAnalysisEngine<I, CallGraphBuilder<I>, Void> {
|
||||
protected JavaScriptLoaderFactory loaderFactory;
|
||||
|
||||
protected JavaScriptTranslatorFactory translatorFactory;
|
||||
|
|
|
@ -74,7 +74,7 @@ import com.ibm.wala.util.intset.OrdinalSet;
|
|||
*
|
||||
* @author Julian Dolby
|
||||
*/
|
||||
public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine<InstanceKey> {
|
||||
public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine<InstanceKey, CallGraphBuilder<InstanceKey>, Void> {
|
||||
|
||||
private final Set<JarFile> applicationJarFiles;
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ import com.ibm.wala.ipa.callgraph.IAnalysisCacheView;
|
|||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyFactory;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
@ -51,7 +52,7 @@ import com.ibm.wala.util.io.FileProvider;
|
|||
* Some clients choose to build on this, but many don't. I usually don't in new code; I usually don't find the re-use enabled by
|
||||
* this class compelling. I would probably nuke this except for some legacy code that uses it.
|
||||
*/
|
||||
public abstract class AbstractAnalysisEngine<I extends InstanceKey> implements AnalysisEngine {
|
||||
public abstract class AbstractAnalysisEngine<I extends InstanceKey, X extends CallGraphBuilder<I>, Y> implements AnalysisEngine {
|
||||
|
||||
public interface EntrypointBuilder {
|
||||
Iterable<Entrypoint> createEntrypoints(AnalysisScope scope, IClassHierarchy cha);
|
||||
|
@ -126,11 +127,11 @@ public abstract class AbstractAnalysisEngine<I extends InstanceKey> implements A
|
|||
|
||||
private EntrypointBuilder entrypointBuilder = this::makeDefaultEntrypoints;
|
||||
|
||||
protected abstract CallGraphBuilder<I> getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache2);
|
||||
protected abstract X getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache2);
|
||||
|
||||
protected CallGraphBuilder buildCallGraph(IClassHierarchy cha, AnalysisOptions options, boolean savePointerAnalysis,
|
||||
protected X buildCallGraph(IClassHierarchy cha, AnalysisOptions options, boolean savePointerAnalysis,
|
||||
IProgressMonitor monitor) throws IllegalArgumentException, CancelException {
|
||||
CallGraphBuilder<I> builder = getCallGraphBuilder(cha, options, cache);
|
||||
X builder = getCallGraphBuilder(cha, options, cache);
|
||||
|
||||
cg = builder.makeCallGraph(options, monitor);
|
||||
|
||||
|
@ -300,7 +301,7 @@ public abstract class AbstractAnalysisEngine<I extends InstanceKey> implements A
|
|||
* @throws IllegalArgumentException
|
||||
* @throws IOException
|
||||
*/
|
||||
public CallGraphBuilder defaultCallGraphBuilder() throws IllegalArgumentException, CancelException, IOException {
|
||||
public X defaultCallGraphBuilder() throws IllegalArgumentException, CancelException, IOException {
|
||||
buildAnalysisScope();
|
||||
IClassHierarchy cha = buildClassHierarchy();
|
||||
setClassHierarchy(cha);
|
||||
|
@ -322,4 +323,9 @@ public abstract class AbstractAnalysisEngine<I extends InstanceKey> implements A
|
|||
return options;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public Y performAnalysis(PropagationCallGraphBuilder builder) throws CancelException {
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
|
@ -61,7 +62,7 @@ import com.ibm.wala.util.warnings.Warning;
|
|||
* This class reads method summaries from an XML Stream.
|
||||
*/
|
||||
public class XMLMethodSummaryReader implements BytecodeConstants {
|
||||
|
||||
|
||||
static final boolean DEBUG = false;
|
||||
|
||||
/**
|
||||
|
@ -198,8 +199,7 @@ public class XMLMethodSummaryReader implements BytecodeConstants {
|
|||
try {
|
||||
readXML(xmlFile);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Assertions.UNREACHABLE();
|
||||
throw new Error("bad xml file", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,7 +208,8 @@ public class XMLMethodSummaryReader implements BytecodeConstants {
|
|||
|
||||
assert xml != null : "Null xml stream";
|
||||
SAXParserFactory factory = SAXParserFactory.newInstance();
|
||||
factory.newSAXParser().parse(new InputSource(xml), handler);
|
||||
SAXParser parser = factory.newSAXParser();
|
||||
parser.parse(new InputSource(xml), handler);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="source"/>
|
||||
<classpathentry kind="src" path="data"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -15,6 +15,7 @@ import com.ibm.wala.cast.java.ipa.callgraph.JavaSourceAnalysisScope;
|
|||
import com.ibm.wala.client.AbstractAnalysisEngine;
|
||||
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
|
@ -27,7 +28,7 @@ public class ECJJavaIRTest extends JavaIRTests {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
JavaSourceAnalysisEngine<I> engine = new ECJJavaSourceAnalysisEngine<I>() {
|
||||
@Override
|
||||
protected Iterable<Entrypoint> makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) {
|
||||
|
|
|
@ -32,6 +32,7 @@ import com.ibm.wala.classLoader.IClassLoader;
|
|||
import com.ibm.wala.client.AbstractAnalysisEngine;
|
||||
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
|
@ -52,7 +53,7 @@ public class ECJSyncDuplicatorTest extends SyncDuplicatorTests {
|
|||
Dispatch.STATIC);
|
||||
|
||||
@Override
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
JavaSourceAnalysisEngine<I> engine = new ECJJavaSourceAnalysisEngine<I>() {
|
||||
@Override
|
||||
protected Iterable<Entrypoint> makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) {
|
||||
|
|
|
@ -44,6 +44,7 @@ import java.util.List;
|
|||
import com.ibm.wala.cast.java.jdt.test.Activator;
|
||||
import com.ibm.wala.client.AbstractAnalysisEngine;
|
||||
import com.ibm.wala.ide.tests.util.EclipseTestUtil.ZippedProjectData;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
|
||||
public class JDTJavaIRTests extends JavaIRTests {
|
||||
|
@ -73,7 +74,7 @@ public class JDTJavaIRTests extends JavaIRTests {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
return JDTJavaTest.makeAnalysisEngine(mainClassDescriptors, project);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import com.ibm.wala.client.AbstractAnalysisEngine;
|
|||
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
|
||||
import com.ibm.wala.ide.tests.util.EclipseTestUtil.ZippedProjectData;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
|
@ -44,12 +45,12 @@ public abstract class JDTJavaTest extends IRTests {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
return makeAnalysisEngine(mainClassDescriptors, project);
|
||||
}
|
||||
|
||||
static <I extends InstanceKey> AbstractAnalysisEngine<I> makeAnalysisEngine(final String[] mainClassDescriptors, ZippedProjectData project) {
|
||||
AbstractAnalysisEngine<I> engine;
|
||||
static <I extends InstanceKey> AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> makeAnalysisEngine(final String[] mainClassDescriptors, ZippedProjectData project) {
|
||||
AbstractAnalysisEngine<I, CallGraphBuilder<I>, ?> engine;
|
||||
engine = new JDTJavaSourceAnalysisEngine<I>(project.projectName) {
|
||||
{
|
||||
setDump(Boolean.parseBoolean(System.getProperty("wala.cast.dump", "false")));
|
||||
|
|
|
@ -30,7 +30,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
import com.ibm.wala.util.config.FileOfClasses;
|
||||
import com.ibm.wala.util.io.FileProvider;
|
||||
|
||||
abstract public class EclipseProjectAnalysisEngine<P, I extends InstanceKey> extends AbstractAnalysisEngine<I> {
|
||||
abstract public class EclipseProjectAnalysisEngine<P, I extends InstanceKey> extends AbstractAnalysisEngine<I, CallGraphBuilder<I>, Void> {
|
||||
|
||||
protected final P project;
|
||||
|
||||
|
|
Loading…
Reference in New Issue