refactoring to prepare for JDT front end

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@2842 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
dolby-oss 2008-05-23 15:58:02 +00:00
parent 9e91232b7c
commit 3719bfd410
7 changed files with 94 additions and 33 deletions

View File

@ -10,6 +10,7 @@ Require-Bundle: com.ibm.wala.core.tests,
com.ibm.wala.cast,
com.ibm.wala.core,
org.eclipse.core.runtime,
org.junit4
org.junit4,
com.ibm.wala.eclipse.tests
Eclipse-LazyStart: true
Export-Package: com.ibm.wala.cast.java.test

View File

@ -15,6 +15,7 @@ package com.ibm.wala.cast.java.test;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@ -25,9 +26,20 @@ import java.util.Properties;
import java.util.Set;
import java.util.jar.JarFile;
import org.eclipse.core.internal.resources.Resource;
import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.jdt.core.IJavaProject;
import junit.framework.Assert;
import com.ibm.wala.cast.java.client.JavaSourceAnalysisEngine;
import com.ibm.wala.cast.java.translator.jdt.EclipseSourceFileModule;
import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.IClassLoader;
import com.ibm.wala.classLoader.IMethod;
@ -35,6 +47,7 @@ import com.ibm.wala.classLoader.JarFileModule;
import com.ibm.wala.classLoader.SourceDirectoryTreeModule;
import com.ibm.wala.classLoader.SourceFileModule;
import com.ibm.wala.core.tests.util.WalaTestCase;
import com.ibm.wala.eclipse.tests.EclipseTestUtil;
import com.ibm.wala.eclipse.util.EclipseProjectPath;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.CallGraph;
@ -55,10 +68,13 @@ import com.ibm.wala.util.strings.Atom;
import com.ibm.wala.util.warnings.WalaException;
public abstract class IRTests extends WalaTestCase {
public IRTests(String name) {
public IRTests(String name, String projectName) {
super(name);
this.projectName = projectName;
}
protected final String projectName;
protected static String javaHomePath;
protected static String testSrcPath = "." + File.separator + "testSrc";
@ -372,8 +388,11 @@ public abstract class IRTests extends WalaTestCase {
return null;
}
protected void populateScope(JavaSourceAnalysisEngine engine, Collection<String> sources, List<String> libs) throws IOException {
protected void populateScope(JavaSourceAnalysisEngine engine,
Collection<String> sources,
List<String> libs)
throws IOException
{
boolean foundLib = false;
for (String lib : libs) {
File libFile = new File(lib);
@ -384,14 +403,32 @@ public abstract class IRTests extends WalaTestCase {
}
Assertions._assert(foundLib, "couldn't find library file from " + libs);
IWorkspace w = null;
IJavaProject project = null;
try {
if (projectName != null) {
w = ResourcesPlugin.getWorkspace();
project = EclipseTestUtil.getNamedProject(projectName);
}
} catch (IllegalStateException e) {
// use Workspace only if it exists
}
for (String srcFilePath : sources) {
String srcFileName = srcFilePath.substring(srcFilePath.lastIndexOf(File.separator) + 1);
File f = new File(srcFilePath);
Assert.assertTrue(f.exists());
if (f.isDirectory()) {
engine.addSourceModule(new SourceDirectoryTreeModule(f));
if (w != null) {
IFile file = project.getProject().getFile(srcFilePath);
engine.addSourceModule(new EclipseSourceFileModule(file));
} else {
engine.addSourceModule(new SourceFileModule(f, srcFileName));
String srcFileName = srcFilePath.substring(srcFilePath.lastIndexOf(File.separator) + 1);
File f = new File(srcFilePath);
Assert.assertTrue(f.exists());
if (f.isDirectory()) {
engine.addSourceModule(new SourceDirectoryTreeModule(f));
} else {
engine.addSourceModule(new SourceFileModule(f, srcFileName));
}
}
}
}

View File

@ -11,6 +11,7 @@
package com.ibm.wala.cast.java.test;
import com.ibm.wala.cast.java.client.JavaSourceAnalysisEngine;
import com.ibm.wala.cast.java.translator.polyglot.PolyglotJavaSourceAnalysisEngine;
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.eclipse.util.EclipseProjectPath;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
@ -21,11 +22,11 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
public class JLexTest extends IRTests {
public JLexTest() {
super("JLexTest");
super("JLexTest", null);
}
protected JavaSourceAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors) {
JavaSourceAnalysisEngine engine = new JavaSourceAnalysisEngine() {
JavaSourceAnalysisEngine engine = new PolyglotJavaSourceAnalysisEngine() {
protected Iterable<Entrypoint> makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) {
return Util.makeMainEntrypoints(EclipseProjectPath.SOURCE_REF, cha, new String[] { "LJLex/Main" });
}

View File

@ -23,24 +23,20 @@ import java.util.Set;
import junit.framework.Assert;
import com.ibm.wala.cast.java.client.JavaSourceAnalysisEngine;
import org.eclipse.core.runtime.Plugin;
import com.ibm.wala.cast.java.ipa.slicer.AstJavaSlicer;
import com.ibm.wala.cast.java.loader.JavaSourceLoaderImpl;
import com.ibm.wala.cast.java.ssa.EnclosingObjectReference;
import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.core.tests.slicer.SlicerTest;
import com.ibm.wala.eclipse.util.CancelException;
import com.ibm.wala.eclipse.util.EclipseProjectPath;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.CallGraph;
import com.ibm.wala.ipa.callgraph.Entrypoint;
import com.ibm.wala.ipa.callgraph.impl.Util;
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
import com.ibm.wala.ipa.callgraph.propagation.LocalPointerKey;
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.ipa.slicer.SDG;
import com.ibm.wala.ipa.slicer.Statement;
import com.ibm.wala.ssa.SSAArrayLengthInstruction;
@ -58,21 +54,16 @@ import com.ibm.wala.types.TypeReference;
import com.ibm.wala.util.collections.Pair;
import com.ibm.wala.util.strings.Atom;
public class JavaIRTests extends IRTests {
public abstract class JavaIRTests extends IRTests {
public JavaIRTests(String name, String projectName) {
super(name, projectName);
}
public JavaIRTests(String name) {
super(name);
this(name, null);
}
protected JavaSourceAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors) {
JavaSourceAnalysisEngine engine = new JavaSourceAnalysisEngine() {
protected Iterable<Entrypoint> makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) {
return Util.makeMainEntrypoints(EclipseProjectPath.SOURCE_REF, cha, mainClassDescriptors);
}
};
engine.setExclusionsFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS);
return engine;
}
protected String singleInputForTest() {
return getName().substring(4) + ".java";
}

View File

@ -0,0 +1,29 @@
package com.ibm.wala.cast.java.test;
import com.ibm.wala.cast.java.client.JavaSourceAnalysisEngine;
import com.ibm.wala.cast.java.translator.polyglot.PolyglotJavaSourceAnalysisEngine;
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.eclipse.util.EclipseProjectPath;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.Entrypoint;
import com.ibm.wala.ipa.callgraph.impl.Util;
import com.ibm.wala.ipa.cha.IClassHierarchy;
public class PolyglotJavaIRTests extends JavaIRTests {
public PolyglotJavaIRTests(String name) {
super(name);
}
@Override
protected JavaSourceAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors) {
JavaSourceAnalysisEngine engine = new PolyglotJavaSourceAnalysisEngine() {
protected Iterable<Entrypoint> makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) {
return Util.makeMainEntrypoints(EclipseProjectPath.SOURCE_REF, cha, mainClassDescriptors);
}
};
engine.setExclusionsFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS);
return engine;
}
}

View File

@ -16,6 +16,7 @@ import com.ibm.wala.cast.java.client.JavaSourceAnalysisEngine;
import com.ibm.wala.cast.java.examples.ast.SynchronizedBlockDuplicator;
import com.ibm.wala.cast.java.translator.polyglot.IRTranslatorExtension;
import com.ibm.wala.cast.java.translator.polyglot.JavaIRTranslatorExtension;
import com.ibm.wala.cast.java.translator.polyglot.PolyglotJavaSourceAnalysisEngine;
import com.ibm.wala.cast.tree.CAst;
import com.ibm.wala.cast.tree.impl.CAstRewriter;
import com.ibm.wala.cast.tree.impl.CAstRewriterFactory;
@ -36,7 +37,7 @@ import com.ibm.wala.util.strings.Atom;
public class SyncDuplicatorTest extends IRTests {
public SyncDuplicatorTest() {
super("SyncDuplicatorTest");
super("SyncDuplicatorTest", null);
}
private final static CallSiteReference testMethod = CallSiteReference.make(0, MethodReference.findOrCreate(TypeReference
@ -44,7 +45,7 @@ public class SyncDuplicatorTest extends IRTests {
Descriptor.findOrCreateUTF8("(Ljava/lang/Object;)Z")), IInvokeInstruction.Dispatch.STATIC);
protected JavaSourceAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors) {
JavaSourceAnalysisEngine engine = new JavaSourceAnalysisEngine() {
JavaSourceAnalysisEngine engine = new PolyglotJavaSourceAnalysisEngine() {
protected Iterable<Entrypoint> makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) {
return Util.makeMainEntrypoints(EclipseProjectPath.SOURCE_REF, cha, mainClassDescriptors);
}

View File

@ -11,6 +11,7 @@
package com.ibm.wala.cast.java.test;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.ui.IStartup;
import org.osgi.framework.BundleContext;
/**