Merge branch 'wala' into master

This commit is contained in:
Juergen Graf 2014-04-09 16:36:07 +02:00
commit c71fa6674a
58 changed files with 502 additions and 413 deletions

1
.gitignore vendored
View File

@ -17,3 +17,4 @@ com.ibm.wala.cast.js.test/examples-src/ajaxslt/
com.ibm.wala.core.testdata/@dot/
com.ibm.wala.core.testdata/lib/
com.ibm.wala.cast.js.html.nu_validator/lib/
com.ibm.wala.cast.java.test/testdata/

View File

@ -1,5 +1,2 @@
This is a mirror of the <a
href="http://wala.svn.sourceforge.net/viewvc/wala/">WALA SVN repository</a>. It
is maintained manually for now, but more official support may be added in the
future. For more details on WALA, see <a href="http://wala.sourceforge.net">the
WALA home page</a>.
This is the main source repository for WALA. For more details on WALA, see <a
href="http://wala.sourceforge.net">the WALA home page</a>.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -24,11 +24,11 @@ import com.ibm.wala.cast.java.test.ide.IDEIRTestUtil;
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.core.tests.plugin.CoreTestsPlugin;
import com.ibm.wala.ide.tests.util.EclipseTestUtil;
import com.ibm.wala.ide.util.EclipseFileProvider;
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;
import com.ibm.wala.util.io.FileProvider;
public class JDTJava15IRTests extends IRTests {
@ -62,7 +62,7 @@ public class JDTJava15IRTests extends IRTests {
};
try {
engine.setExclusionsFile(FileProvider
engine.setExclusionsFile((new EclipseFileProvider())
.getFileFromPlugin(CoreTestsPlugin.getDefault(), CallGraphTestUtil.REGRESSION_EXCLUSIONS).getAbsolutePath());
} catch (IOException e) {
Assert.assertFalse("Cannot find exclusions file", true);

View File

@ -54,11 +54,11 @@ import com.ibm.wala.cast.java.test.ide.IDEIRTestUtil;
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.core.tests.plugin.CoreTestsPlugin;
import com.ibm.wala.ide.tests.util.EclipseTestUtil;
import com.ibm.wala.ide.util.EclipseFileProvider;
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;
import com.ibm.wala.util.io.FileProvider;
public class JDTJavaIRTests extends JavaIRTests {
@ -96,7 +96,7 @@ public class JDTJavaIRTests extends JavaIRTests {
};
try {
engine.setExclusionsFile(FileProvider
engine.setExclusionsFile((new EclipseFileProvider())
.getFileFromPlugin(CoreTestsPlugin.getDefault(), CallGraphTestUtil.REGRESSION_EXCLUSIONS).getAbsolutePath());
} catch (IOException e) {
Assert.assertFalse("Cannot find exclusions file", true);

View File

@ -25,7 +25,8 @@ import com.ibm.wala.classLoader.BinaryDirectoryTreeModule;
import com.ibm.wala.classLoader.ClassLoaderFactory;
import com.ibm.wala.classLoader.Module;
import com.ibm.wala.classLoader.SourceDirectoryTreeModule;
import com.ibm.wala.core.plugin.CorePlugin;
import com.ibm.wala.ide.plugin.CorePlugin;
import com.ibm.wala.ide.util.EclipseFileProvider;
import com.ibm.wala.ide.util.EclipseProjectPath;
import com.ibm.wala.ide.util.EclipseProjectPath.Loader;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
@ -64,7 +65,7 @@ public class EclipseProjectSourceAnalysisEngine extends EclipseProjectAnalysisEn
super(project);
this.fileExt = fileExt;
try {
setExclusionsFile(FileProvider.getFileFromPlugin(CorePlugin.getDefault(), "J2SEClassHierarchyExclusions.txt")
setExclusionsFile((new EclipseFileProvider()).getFileFromPlugin(CorePlugin.getDefault(), "J2SEClassHierarchyExclusions.txt")
.getAbsolutePath());
} catch (IOException e) {
Assertions.UNREACHABLE("Cannot find exclusions file");

View File

@ -1,70 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="com.ibm.wala.cast.java.test.data" default="getSources" basedir=".">
<property name="basews" value="${ws}"/>
<property name="baseos" value="${os}"/>
<property name="basearch" value="${arch}"/>
<property name="basenl" value="${nl}"/>
<property name="basews" value="${ws}"/>
<property name="baseos" value="${os}"/>
<property name="basearch" value="${arch}"/>
<property name="basenl" value="${nl}"/>
<!-- Compiler settings. -->
<property name="javacFailOnError" value="true"/>
<property name="javacDebugInfo" value="on"/>
<property name="javacVerbose" value="false"/>
<property name="logExtension" value=".log"/>
<property name="compilerArg" value=""/>
<property name="javacSource" value="1.5"/>
<property name="javacTarget" value="1.5"/>
<!-- This property has been updated to correspond to the paths used by the latest Java update
on Mac OS X 10.6 (Java version 1.6.0_22). If you are not using this version of Mac OS X or Java,
try changing the value of the property to "${java.home}/../../../Classes" -->
<condition property="dir_bootclasspath" value="${java.home}/../Classes">
<os family="mac"/>
<!-- Compiler settings. -->
<property name="javacFailOnError" value="true"/>
<property name="javacDebugInfo" value="on"/>
<property name="javacVerbose" value="false"/>
<property name="logExtension" value=".log"/>
<property name="compilerArg" value=""/>
<property name="javacSource" value="1.5"/>
<property name="javacTarget" value="1.5"/>
<!-- This property has been updated to correspond to the paths used by the latest Java update
on Mac OS X 10.6 (Java version 1.6.0_22). If you are not using this version of Mac OS X or Java,
try changing the value of the property to "${java.home}/../../../Classes" -->
<condition property="dir_bootclasspath" value="${java.home}/../Classes">
<os family="mac"/>
</condition>
<property name="dir_bootclasspath" value="${java.home}/lib"/>
<path id="path_bootclasspath">
<fileset dir="${dir_bootclasspath}">
<include name="*.jar"/>
</fileset>
</path>
<property name="bootclasspath" refid="path_bootclasspath"/>
<property name="bundleJavacSource" value="${javacSource}"/>
<property name="bundleJavacTarget" value="${javacTarget}"/>
<property name="bundleBootClasspath" value="${bootclasspath}"/>
<target name="JLexPresent" depends="init">
<available file="${plugin.destination}/src/JLex/Main.java" property="jlex.present"/>
</target>
<target name="fetchJLex" depends="JLexPresent" unless="jlex.present">
<delete dir="${temp.folder}"/>
<mkdir dir="${temp.folder}/JLex"/>
<get src="http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java" dest="${temp.folder}/JLex/Main.java"/>
<delete dir="${plugin.destination}/src/JLex"/>
<mkdir dir="${plugin.destination}/src/JLex"/>
<copy file="${temp.folder}/JLex/Main.java" tofile="${plugin.destination}/src/JLex/Main.java"/>
<delete dir="${temp.folder}"/>
</target>
<target name="getSources" depends="fetchJLex" />
<target name="testdatadir" depends="init,testdata.exists" unless="testdatadir.present">
<mkdir dir="${basedir}/../com.ibm.wala.cast.java.test/testdata"/>
</target>
<target name="testdata.exists" depends="init">
<available file="${basedir}/../com.ibm.wala.cast.java.test/testdata"
type="dir"
property="testdatadir.present"/>
</target>
<target name="compile" depends="getSources">
<javac srcdir="${basedir}/src"
destdir="${basedir}/bin"
excludes="**/Activator.java"/>
</target>
<target name="jar" depends="compile,testdatadir">
<jar destfile="${basedir}/../com.ibm.wala.cast.java.test/testdata/test_project.zip" basedir="${basedir}"/>
</target>
<target name="init" depends="properties">
<condition property="pluginTemp" value="${buildTempFolder}/plugins">
<isset property="buildTempFolder"/>
</condition>
<property name="dir_bootclasspath" value="${java.home}/lib"/>
<path id="path_bootclasspath">
<fileset dir="${dir_bootclasspath}">
<include name="*.jar"/>
</fileset>
</path>
<property name="bootclasspath" refid="path_bootclasspath"/>
<property name="bundleJavacSource" value="${javacSource}"/>
<property name="bundleJavacTarget" value="${javacTarget}"/>
<property name="bundleBootClasspath" value="${bootclasspath}"/>
<target name="JLexPresent" depends="init">
<available file="${plugin.destination}/src/JLex/Main.java" property="jlex.present"/>
</target>
<target name="fetchJLex" depends="JLexPresent" unless="jlex.present">
<delete dir="${temp.folder}"/>
<mkdir dir="${temp.folder}/JLex"/>
<get src="http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java" dest="${temp.folder}/JLex/Main.java"/>
<delete dir="${plugin.destination}/src/JLex"/>
<mkdir dir="${plugin.destination}/src/JLex"/>
<copy file="${temp.folder}/JLex/Main.java" tofile="${plugin.destination}/src/JLex/Main.java"/>
<delete dir="${temp.folder}"/>
</target>
<target name="getSources" depends="fetchJLex" />
<target name="init" depends="properties">
<condition property="pluginTemp" value="${buildTempFolder}/plugins">
<isset property="buildTempFolder"/>
</condition>
<property name="pluginTemp" value="${basedir}"/>
<condition property="build.result.folder" value="${pluginTemp}/com.ibm.wala.core.testdata">
<isset property="buildTempFolder"/>
</condition>
<property name="build.result.folder" value="${basedir}"/>
<property name="temp.folder" value="${basedir}/temp.folder"/>
<property name="plugin.destination" value="${basedir}"/>
</target>
<target name="properties" if="eclipse.running">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
</target>
<property name="pluginTemp" value="${basedir}"/>
<condition property="build.result.folder" value="${pluginTemp}/com.ibm.wala.core.testdata">
<isset property="buildTempFolder"/>
</condition>
<property name="build.result.folder" value="${basedir}"/>
<property name="temp.folder" value="${basedir}/temp.folder"/>
<property name="plugin.destination" value="${basedir}"/>
</target>
<target name="properties" if="eclipse.running">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
</target>
</project>

View File

@ -13,7 +13,8 @@ Require-Bundle: org.eclipse.core.runtime,
com.ibm.wala.cast.js.test;bundle-version="1.0.0",
com.ibm.wala.cast.test;bundle-version="1.0.0",
com.ibm.wala.core.tests;bundle-version="1.1.3",
org.junit4;bundle-version="4.3.1"
org.junit4;bundle-version="4.3.1",
com.ibm.wala.ide;bundle-version="1.1.3"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Export-Package: com.ibm.wala.cast.js.test

View File

@ -20,13 +20,13 @@ import com.ibm.wala.cast.js.ipa.callgraph.correlations.extraction.CorrelatedPair
import com.ibm.wala.cast.js.test.JSCallGraphBuilderUtil;
import com.ibm.wala.cast.js.test.JSCallGraphBuilderUtil.CGBuilderType;
import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory;
import com.ibm.wala.ide.util.ProgressMaster;
import com.ibm.wala.ide.util.ProgressMonitorDelegate;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.CallGraph;
import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException;
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.util.ProgressMaster;
import com.ibm.wala.util.ProgressMonitorDelegate;
import com.ibm.wala.util.io.CommandLine;
import com.ibm.wala.util.io.FileProvider;
@ -125,7 +125,7 @@ public class HTMLCGBuilder {
// first try interpreting as local file name, if that doesn't work just
// assume it's a URL
try {
File f = FileProvider.getFileFromClassLoader(src, HTMLCGBuilder.class.getClassLoader());
File f = (new FileProvider()).getFileFromClassLoader(src, HTMLCGBuilder.class.getClassLoader());
URL url = f.toURI().toURL();
return url;
} catch (FileNotFoundException fnfe) {

View File

@ -270,7 +270,7 @@ public class CorrelationFinder {
private URL toUrl(String src) throws MalformedURLException {
// first try interpreting as local file name, if that doesn't work just assume it's a URL
try {
File f = FileProvider.getFileFromClassLoader(src, this.getClass().getClassLoader());
File f = (new FileProvider()).getFileFromClassLoader(src, this.getClass().getClassLoader());
URL url = f.toURI().toURL();
return url;
} catch(FileNotFoundException fnfe) {

View File

@ -7,7 +7,8 @@ Bundle-Activator: com.ibm.wala.cast.plugin.AstPlugin
Bundle-Vendor: IBM
Require-Bundle: com.ibm.wala.core,
com.ibm.wala.shrike,
org.eclipse.core.runtime
org.eclipse.core.runtime,
com.ibm.wala.ide;bundle-version="1.1.3"
Bundle-ActivationPolicy: lazy
Export-Package: com.ibm.wala.cast.analysis.typeInference,
com.ibm.wala.cast.ipa.callgraph,

View File

@ -11,7 +11,7 @@
package com.ibm.wala.cast.ir.translator;
import com.ibm.wala.cast.tree.CAst;
import com.ibm.wala.core.plugin.CorePlugin;
import com.ibm.wala.ide.plugin.CorePlugin;
/**
* superclass for CAst parsers / translators making use of native code. performs

View File

@ -7,7 +7,8 @@ Bundle-Vendor: %providerName
Require-Bundle: com.ibm.wala.shrike,
com.ibm.wala.core,
org.eclipse.core.runtime,
org.junit4;bundle-version="4.3.1"
org.junit4;bundle-version="4.3.1",
com.ibm.wala.ide;bundle-version="1.1.3"
Bundle-Localization: plugin
Export-Package: com.ibm.wala.core.tests.basic,
com.ibm.wala.core.tests.callGraph,

View File

@ -45,7 +45,7 @@ public class CallGraphTestUtil {
private static final boolean CHECK_FOOTPRINT = false;
public static AnalysisScope makeJ2SEAnalysisScope(String scopeFile, String exclusionsFile) throws IOException {
AnalysisScope scope = AnalysisScopeReader.readJavaScope(scopeFile, FileProvider.getFile(exclusionsFile), MY_CLASSLOADER);
AnalysisScope scope = AnalysisScopeReader.readJavaScope(scopeFile, (new FileProvider()).getFile(exclusionsFile), MY_CLASSLOADER);
return scope;
}

View File

@ -34,7 +34,7 @@ public class DupFieldsTest extends WalaTestCase {
@Test public void testDupFieldNames() throws IOException, ClassHierarchyException {
AnalysisScope scope = null;
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), DupFieldsTest.class.getClassLoader());
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), DupFieldsTest.class.getClassLoader());
ClassHierarchy cha = ClassHierarchy.make(scope);
TypeReference ref = TypeReference.findOrCreate(ClassLoaderReference.Application, "LDupFieldName");
IClass klass = cha.lookupClass(ref);

View File

@ -28,7 +28,7 @@ public class ExclusionsTest {
@Test
public void testExclusions() throws IOException {
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("GUIExclusions.txt"),
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("GUIExclusions.txt"),
ExclusionsTest.class.getClassLoader());
TypeReference buttonRef = TypeReference.findOrCreate(ClassLoaderReference.Application,
StringStuff.deployment2CanonicalTypeString("java.awt.Button"));

View File

@ -48,7 +48,7 @@ public class GetTargetsTest extends WalaTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
ClassLoaderFactory factory = new ClassLoaderFactoryImpl(scope.getExclusions() );

View File

@ -48,7 +48,7 @@ public class InnerClassesTest extends WalaTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"),
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"),
MY_CLASSLOADER);
ClassLoaderFactory factory = new ClassLoaderFactoryImpl(scope.getExclusions());

View File

@ -45,7 +45,7 @@ public class InterfaceTest extends WalaTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
ClassLoaderFactory factory = new ClassLoaderFactoryImpl(scope.getExclusions() );

View File

@ -34,7 +34,7 @@ public class LibraryVersionTest extends WalaTestCase {
private static final ClassLoader MY_CLASSLOADER = DeterministicIRTest.class.getClassLoader();
@Test public void testLibraryVersion() throws IOException {
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
System.err.println("java library version is " + scope.getJavaLibraryVersion());
Assert.assertTrue(scope.isJava16Libraries() || scope.isJava15Libraries()||scope.isJava14Libraries());
}

View File

@ -41,7 +41,7 @@ public class AnnotationTest extends WalaTestCase {
@BeforeClass
public static void before() throws IOException, ClassHierarchyException {
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA,
FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS), AnnotationTest.class.getClassLoader());
(new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS), AnnotationTest.class.getClassLoader());
cha = ClassHierarchy.make(scope);
}

View File

@ -53,7 +53,7 @@ public class CFGSanitizerTest extends WalaTestCase {
*/
@Test
public void testSyntheticEdgeToExit() throws IOException, IllegalArgumentException, WalaException {
AnalysisScope scope = AnalysisScopeReader.makePrimordialScope(FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
AnalysisScope scope = AnalysisScopeReader.makePrimordialScope((new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
ClassHierarchy cha = ClassHierarchy.make(scope);
ClassLoader cl = CFGSanitizerTest.class.getClassLoader();

View File

@ -56,7 +56,7 @@ public class CFGTest extends WalaTestCase {
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA,
FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), CFGTest.class.getClassLoader());
(new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), CFGTest.class.getClassLoader());
ClassLoaderFactory factory = new ClassLoaderFactoryImpl(scope.getExclusions());
try {

View File

@ -53,7 +53,7 @@ public class CornerCasesTest extends WalaTestCase {
*/
@Test public void testBug38484() throws ClassHierarchyException, IOException {
AnalysisScope scope = null;
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
ClassHierarchy cha = ClassHierarchy.make(scope);
TypeReference t = TypeReference.findOrCreateClass(scope.getApplicationLoader(), "cornerCases", "YuckyInterface");
IClass klass = cha.lookupClass(t);
@ -71,7 +71,7 @@ public class CornerCasesTest extends WalaTestCase {
*/
@Test public void testBug38540() throws ClassHierarchyException, IOException {
AnalysisScope scope = null;
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
AnalysisOptions options = new AnalysisOptions();
ClassHierarchy cha = ClassHierarchy.make(scope);
TypeReference t = TypeReference.findOrCreateClass(scope.getApplicationLoader(), "cornerCases", "Main");

View File

@ -66,7 +66,7 @@ public class DeterministicIRTest extends WalaTestCase {
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA,
FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
(new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
options = new AnalysisOptions(scope, null);
cache = new AnalysisCache();
ClassLoaderFactory factory = new ClassLoaderFactoryImpl(scope.getExclusions());

View File

@ -68,7 +68,7 @@ public class LocalNamesTest extends WalaTestCase {
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA,
FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
(new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
options = new AnalysisOptions(scope, null);
cache = new AnalysisCache();
@ -100,7 +100,7 @@ public class LocalNamesTest extends WalaTestCase {
@Test
public void testAliasNames() {
try {
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider
AnalysisScope scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider())
.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
ClassHierarchy cha = ClassHierarchy.make(scope);
TypeReference t = TypeReference.findOrCreateClass(scope.getApplicationLoader(), "cornerCases", "AliasNames");

View File

@ -41,7 +41,7 @@ public class MultiNewArrayTest extends WalaTestCase {
@Test public void testMultiNewArray1() throws IOException, ClassHierarchyException {
AnalysisScope scope = null;
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
ClassHierarchy cha = ClassHierarchy.make(scope);
IClass klass = cha.lookupClass(TypeReference.findOrCreate(ClassLoaderReference.Application, TestConstants.MULTI_DIM_MAIN));
Assert.assertTrue(klass != null);

View File

@ -64,7 +64,7 @@ public class TypeInferenceTest extends WalaTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER);
options = new AnalysisOptions(scope, null);
cache = new AnalysisCache();

View File

@ -52,6 +52,8 @@ import com.ibm.wala.demandpa.alg.statemachine.StateMachineFactory;
import com.ibm.wala.demandpa.flowgraph.IFlowLabel;
import com.ibm.wala.demandpa.util.MemoryAccessMap;
import com.ibm.wala.demandpa.util.SimpleMemoryAccessMap;
import com.ibm.wala.ide.util.ProgressMaster;
import com.ibm.wala.ide.util.ProgressMonitorDelegate;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
@ -77,8 +79,6 @@ import com.ibm.wala.types.ClassLoaderReference;
import com.ibm.wala.types.TypeReference;
import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.Predicate;
import com.ibm.wala.util.ProgressMaster;
import com.ibm.wala.util.ProgressMonitorDelegate;
import com.ibm.wala.util.WalaException;
import com.ibm.wala.util.collections.Pair;
import com.ibm.wala.util.debug.Assertions;

View File

@ -67,7 +67,7 @@ public class DataflowTest extends WalaTestCase {
public static void beforeClass() throws Exception {
scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA,
FileProvider.getFile("J2SEClassHierarchyExclusions.txt"), DataflowTest.class.getClassLoader());
(new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), DataflowTest.class.getClassLoader());
try {
cha = ClassHierarchy.make(scope);

View File

@ -40,7 +40,7 @@ public class JavaViewerDriver {
private static void run(String classPath, String exclusionFilePath) throws IOException, ClassHierarchyException, CallGraphBuilderCancelException{
File exclusionFile = FileProvider.getFile(exclusionFilePath);
File exclusionFile = (new FileProvider()).getFile(exclusionFilePath);
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(classPath, exclusionFile != null ? exclusionFile
: new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));

View File

@ -108,7 +108,7 @@ public class PDFCallGraph {
*/
public static Process run(String appJar, String exclusionFile) throws IllegalArgumentException, CancelException {
try {
Graph<CGNode> g = buildPrunedCallGraph(appJar, FileProvider.getFile(exclusionFile));
Graph<CGNode> g = buildPrunedCallGraph(appJar, (new FileProvider()).getFile(exclusionFile));
Properties p = null;
try {

View File

@ -87,7 +87,7 @@ public class PDFControlDependenceGraph {
if (PDFCallGraph.isDirectory(appJar)) {
appJar = PDFCallGraph.findJarFiles(new String[] { appJar });
}
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
ClassHierarchy cha = ClassHierarchy.make(scope);

View File

@ -117,7 +117,7 @@ public class PDFSDG {
*/
public static Process run(String appJar, String mainClass, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException, CancelException, IOException {
try {
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
// generate a WALA-consumable wrapper around the incoming scope object

View File

@ -145,7 +145,7 @@ public class PDFSlice {
IOException {
try {
// create an analysis scope representing the appJar as a J2SE application
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, FileProvider
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider())
.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
// build a class hierarchy, call graph, and system dependence graph

View File

@ -71,7 +71,7 @@ public class PDFTypeHierarchy {
try {
validateCommandLine(args);
String classpath = args[CLASSPATH_INDEX];
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(classpath, FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(classpath, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
// invoke WALA to build a class hierarchy
ClassHierarchy cha = ClassHierarchy.make(scope);

View File

@ -72,7 +72,7 @@ public class PDFWalaIR {
// Build an AnalysisScope which represents the set of classes to analyze. In particular,
// we will analyze the contents of the appJar jar file and the Java standard libraries.
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, FileProvider
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider())
.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
// Build a class hierarchy representing all classes to analyze. This step will read the class

View File

@ -43,7 +43,7 @@ public final class WalaExamplesProperties {
throw new IllegalStateException("failed to find URL for wala.examples.properties");
}
return new File(FileProvider.filePathFromURL(url)).getParentFile().getParentFile().getAbsolutePath();
return new File((new FileProvider()).filePathFromURL(url)).getParentFile().getParentFile().getAbsolutePath();
}
}

View File

@ -17,7 +17,7 @@ public class FileProviderTest {
URL url = new URL("file:///c:/my/File.jar");
String expected = "/c:/my/File.jar";
// exercise:
String actual = FileProvider.filePathFromURL(url);
String actual = (new FileProvider()).filePathFromURL(url);
// verify:
assertEquals(expected, actual);
}
@ -29,7 +29,7 @@ public class FileProviderTest {
URL url = new URL("file:///[Eclipse]/File.jar");
String expected = PlatformUtil.onWindows() ? "/C:/[Eclipse]/File.jar" : "/[Eclipse]/File.jar";
// exercise:
String actual = FileProvider.filePathFromURL(url);
String actual = (new FileProvider()).filePathFromURL(url);
// verify:
assertEquals(expected, actual);
}

View File

@ -4,12 +4,9 @@ Eclipse-LazyStart: true
Bundle-Name: %pluginName
Bundle-SymbolicName: com.ibm.wala.core
Bundle-Version: 1.1.3.qualifier
Bundle-Activator: com.ibm.wala.core.plugin.CorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: com.ibm.wala.shrike,
org.eclipse.core.runtime,
org.eclipse.core.resources;resolution:=optional,
com.ibm.wala.util;bundle-version="1.0.0";visibility:=reexport
Bundle-ActivationPolicy: lazy
Export-Package: .,

View File

@ -40,7 +40,7 @@ public abstract class AbstractURLModule implements Module, ModuleEntry {
if (con instanceof JarURLConnection)
return ((JarURLConnection) con).getEntryName();
else
return FileProvider.filePathFromURL(url);
return (new FileProvider()).filePathFromURL(url);
} catch (IOException e) {
Assertions.UNREACHABLE();
return null;

View File

@ -510,7 +510,7 @@ public class ClassLoaderImpl implements IClassLoader {
String jarFileName = archive.getJarFile().getName();
InputStream s = null;
try {
File jarFile = FileProvider.getFile(jarFileName);
File jarFile = (new FileProvider()).getFile(jarFileName);
int bufferSize = 65536;
s = new BufferedInputStream(new FileInputStream(jarFile), bufferSize);
byte[] b = new byte[1024];

View File

@ -1,42 +0,0 @@
/*******************************************************************************
* 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.classLoader;
import java.io.File;
import org.eclipse.core.resources.IFile;
/**
* A module which is a wrapper around a .java file
*/
public class EclipseSourceFileModule extends SourceFileModule {
private IFile f;
public static EclipseSourceFileModule createEclipseSourceFileModule(IFile f) {
if (f == null) {
throw new IllegalArgumentException("null f");
}
return new EclipseSourceFileModule(f);
}
private EclipseSourceFileModule(IFile f) {
super(new File(f.getLocation().toOSString()),f.getLocation().lastSegment());
this.f = f;
}
public IFile getIFile() {
return f;
}
@Override
public String toString() {
return "EclipseSourceFileModule:" + getFile().toString();
}
}

View File

@ -154,7 +154,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine {
Assertions.UNREACHABLE("no j2selibs specified. You probably did not call AppAnalysisEngine.setJ2SELibrary.");
}
scope = AnalysisScopeReader.readJavaScope(SYNTHETIC_J2SE_MODEL, FileProvider.getFile(getExclusionsFile()), getClass()
scope = AnalysisScopeReader.readJavaScope(SYNTHETIC_J2SE_MODEL, (new FileProvider()).getFile(getExclusionsFile()), getClass()
.getClassLoader());
// add standard libraries

View File

@ -17,10 +17,6 @@ import java.net.URL;
import java.util.Collection;
import java.util.Properties;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
import com.ibm.wala.core.plugin.CorePlugin;
import com.ibm.wala.util.WalaException;
import com.ibm.wala.util.debug.Assertions;
import com.ibm.wala.util.io.FileProvider;
@ -174,28 +170,8 @@ public final class WalaProperties {
if (url == null) {
return System.getProperty("user.dir"); //$NON-NLS-1$
} else {
return new File(FileProvider.filePathFromURL(url)).getParentFile().getParentFile().getPath();
return new File((new FileProvider()).filePathFromURL(url)).getParentFile().getParentFile().getPath();
}
}
/**
* This is fragile. Use with care.
* @return a String representing the path to the wala.core plugin installation
*/
public static String getWalaCorePluginHome() {
if (CorePlugin.getDefault() == null) {
return null;
}
String install = Platform.getInstallLocation().getURL().getPath();
Bundle b = Platform.getBundle("com.ibm.wala.core");
String l = b.getLocation();
if (l.startsWith("update@")) {
l = l.replace("update@", "");
}
if (l.startsWith("reference:file:")) {
return l.replace("reference:file:","");
} else {
return install + File.separator + l;
}
}
}

View File

@ -19,12 +19,9 @@ import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.jar.JarFile;
import org.eclipse.core.runtime.Plugin;
import com.ibm.wala.classLoader.BinaryDirectoryTreeModule;
import com.ibm.wala.classLoader.Module;
import com.ibm.wala.classLoader.SourceDirectoryTreeModule;
import com.ibm.wala.core.plugin.CorePlugin;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.properties.WalaProperties;
import com.ibm.wala.shrikeCT.InvalidClassFileException;
@ -40,7 +37,7 @@ public class AnalysisScopeReader {
private static final ClassLoader MY_CLASSLOADER = AnalysisScopeReader.class.getClassLoader();
private static final String BASIC_FILE = "primordial.txt";
protected static final String BASIC_FILE = "primordial.txt";
/**
* read in an analysis scope for a Java application from a text file
@ -52,20 +49,15 @@ public class AnalysisScopeReader {
*/
public static AnalysisScope readJavaScope(String scopeFileName, File exclusionsFile, ClassLoader javaLoader) throws IOException {
AnalysisScope scope = AnalysisScope.createJavaAnalysisScope();
return read(scope, scopeFileName, exclusionsFile, javaLoader, CorePlugin.getDefault());
return read(scope, scopeFileName, exclusionsFile, javaLoader, new FileProvider());
}
private static AnalysisScope readJavaScope(String scopeFileName, File exclusionsFile, ClassLoader javaLoader, Plugin plugIn) throws IOException {
AnalysisScope scope = AnalysisScope.createJavaAnalysisScope();
return read(scope, scopeFileName, exclusionsFile, javaLoader, plugIn);
}
private static AnalysisScope read(AnalysisScope scope, String scopeFileName, File exclusionsFile, ClassLoader javaLoader,
Plugin plugIn) throws IOException {
protected static AnalysisScope read(AnalysisScope scope, String scopeFileName, File exclusionsFile, ClassLoader javaLoader,
FileProvider fp) throws IOException {
BufferedReader r = null;
try {
File scopeFile = (plugIn == null) ? FileProvider.getFile(scopeFileName, javaLoader) : FileProvider.getFileFromPlugin(plugIn,
scopeFileName);
File scopeFile = fp.getFile(scopeFileName, javaLoader);
assert scopeFile.exists();
String line;
@ -116,26 +108,27 @@ public class AnalysisScopeReader {
String language = toks.nextToken();
String entryType = toks.nextToken();
String entryPathname = toks.nextToken();
FileProvider fp = (new FileProvider());
if ("classFile".equals(entryType)) {
File cf = FileProvider.getFile(entryPathname, javaLoader);
File cf = fp.getFile(entryPathname, javaLoader);
try {
scope.addClassFileToScope(walaLoader, cf);
} catch (InvalidClassFileException e) {
Assertions.UNREACHABLE(e.toString());
}
} else if ("sourceFile".equals(entryType)) {
File sf = FileProvider.getFile(entryPathname, javaLoader);
File sf = fp.getFile(entryPathname, javaLoader);
scope.addSourceFileToScope(walaLoader, sf, entryPathname);
} else if ("binaryDir".equals(entryType)) {
File bd = FileProvider.getFile(entryPathname, javaLoader);
File bd = fp.getFile(entryPathname, javaLoader);
assert bd.isDirectory();
scope.addToScope(walaLoader, new BinaryDirectoryTreeModule(bd));
} else if ("sourceDir".equals(entryType)) {
File sd = FileProvider.getFile(entryPathname, javaLoader);
File sd = fp.getFile(entryPathname, javaLoader);
assert sd.isDirectory();
scope.addToScope(walaLoader, new SourceDirectoryTreeModule(sd));
} else if ("jarFile".equals(entryType)) {
Module M = FileProvider.getJarFileModule(entryPathname, javaLoader);
Module M = fp.getJarFileModule(entryPathname, javaLoader);
scope.addToScope(walaLoader, M);
} else if ("loaderImpl".equals(entryType)) {
scope.setLoaderImpl(walaLoader, entryPathname);
@ -155,12 +148,10 @@ public class AnalysisScopeReader {
* @throws IllegalStateException if there are problmes reading wala properties
*/
public static AnalysisScope makePrimordialScope(File exclusionsFile) throws IOException {
return readJavaScope(BASIC_FILE, exclusionsFile, MY_CLASSLOADER, CorePlugin.getDefault());
return readJavaScope(BASIC_FILE, exclusionsFile, MY_CLASSLOADER);
}
private static AnalysisScope makePrimordialScope(File exclusionsFile, Plugin plugIn) throws IOException {
return readJavaScope(BASIC_FILE, exclusionsFile, MY_CLASSLOADER, plugIn);
}
/**
* @param classPath class path to analyze, delimited by File.pathSeparator
@ -169,20 +160,10 @@ public class AnalysisScopeReader {
* @throws IllegalStateException if there are problems reading wala properties
*/
public static AnalysisScope makeJavaBinaryAnalysisScope(String classPath, File exclusionsFile) throws IOException {
return makeJavaBinaryAnalysisScope(classPath, exclusionsFile, CorePlugin.getDefault());
}
/**
* @param classPath class path to analyze, delimited by File.pathSeparator
* @param exclusionsFile file holding class hierarchy exclusions. may be null
* @throws IOException
* @throws IllegalStateException if there are problems reading wala properties
*/
public static AnalysisScope makeJavaBinaryAnalysisScope(String classPath, File exclusionsFile, Plugin plugIn) throws IOException {
if (classPath == null) {
throw new IllegalArgumentException("classPath null");
}
AnalysisScope scope = makePrimordialScope(exclusionsFile, plugIn);
AnalysisScope scope = makePrimordialScope(exclusionsFile);
ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION);
addClassPathToScope(classPath, scope, loader);

View File

@ -14,240 +14,81 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Plugin;
import com.ibm.wala.classLoader.JarFileModule;
import com.ibm.wala.classLoader.Module;
import com.ibm.wala.classLoader.NestedJarFileModule;
import com.ibm.wala.core.plugin.CorePlugin;
import com.ibm.wala.util.debug.Assertions;
/**
* This class provides files that are packaged with this plug-in
*/
public class FileProvider {
/**
* This class uses reflection to access classes and methods that are only
* available when Eclipse is running as an IDE environment. The choice to use
* reflection is related to builds: with this design the build doesn't need to
* provide IDE bundles during compilation and hence can spot invalid uses of
* such classes through this bundle.
*
* Because of this class, this bundle must OPTIONALY require
* 'org.eclipse.core.resources'.
*/
private static final class EclipseUtil {
private static Object workspaceRoot = null;
private static Method workspaceRoot_getFile = null;
public static Module getJarFileModule(String fileName, ClassLoader loader) {
// Using reflection to enable this code to be built without the
// org.eclipse.core.resources bundle
//
try {
if (workspaceRoot_getFile == null) {
Class<?> cls = Class.forName("org.eclipse.core.resources.ResourcesPlugin");
Method getWorkspaceMethod = cls.getDeclaredMethod("getWorkspace");
Object workspace = getWorkspaceMethod.invoke(null);
Method getRoot = workspace.getClass().getDeclaredMethod("getRoot");
workspaceRoot = getRoot.invoke(workspace);
workspaceRoot_getFile = workspaceRoot.getClass().getMethod("getFile", IPath.class);
}
IPath path = new Path(fileName);
if (workspaceRoot_getFile.invoke(workspaceRoot, path) != null) {
return new JarFileModule(new JarFile(fileName, false));
}
} catch (Exception e) {
}
return null;
}
}
private final static int DEBUG_LEVEL = 0;
public FileProvider() {
super();
}
/**
* @param fileName
* @return the jar file packaged with this plug-in of the given name, or null
* if not found.
*/
public static Module getJarFileModule(String fileName) throws IOException {
public Module getJarFileModule(String fileName) throws IOException {
return getJarFileModule(fileName, FileProvider.class.getClassLoader());
}
public static Module getJarFileModule(String fileName, ClassLoader loader) throws IOException {
if (CorePlugin.getDefault() == null) {
return getJarFileFromClassLoader(fileName, loader);
} else if (CorePlugin.IS_RESOURCES_BUNDLE_AVAILABLE) {
Module module = EclipseUtil.getJarFileModule(fileName, loader);
if (module != null) {
return module;
}
}
return getFromPlugin(CorePlugin.getDefault(), fileName);
public Module getJarFileModule(String fileName, ClassLoader loader) throws IOException {
return getJarFileFromClassLoader(fileName, loader);
}
public static URL getResource(String fileName) throws IOException {
public URL getResource(String fileName) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
return getResource(fileName, FileProvider.class.getClassLoader());
}
public static URL getResource(String fileName, ClassLoader loader) throws IOException {
public URL getResource(String fileName, ClassLoader loader) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
if (CorePlugin.getDefault() == null && loader == null) {
if (loader == null) {
throw new IllegalArgumentException("null loader");
}
return (CorePlugin.getDefault() == null) ? loader.getResource(fileName) : FileLocator.find(CorePlugin.getDefault().getBundle(),
new Path(fileName), null);
return loader.getResource(fileName);
}
public static File getFile(String fileName) throws IOException {
public File getFile(String fileName) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
return getFile(fileName, FileProvider.class.getClassLoader());
}
public static File getFile(String fileName, ClassLoader loader) throws IOException {
return (CorePlugin.getDefault() == null) ? getFileFromClassLoader(fileName, loader) : getFileFromPlugin(
CorePlugin.getDefault(), fileName);
}
/**
* @param fileName
* @return the jar file packaged with this plug-in of the given name, or null
* if not found.
* @throws IllegalArgumentException
* if p is null
*/
public static File getFileFromPlugin(Plugin p, String fileName) throws IOException {
if (p == null) {
throw new IllegalArgumentException("p is null");
}
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
URL url = getFileURLFromPlugin(p, fileName);
if (url == null) {
throw new FileNotFoundException(fileName);
}
return new File(filePathFromURL(url));
}
/**
* @param fileName
* @return the jar file packaged with this plug-in of the given name, or null
* if not found.
*/
private static JarFileModule getFromPlugin(Plugin p, String fileName) throws IOException {
URL url = getFileURLFromPlugin(p, fileName);
return (url == null) ? null : new JarFileModule(new JarFile(filePathFromURL(url)));
}
/**
* get a file URL for a file from a plugin
*
* @param fileName
* the file name
* @return the URL, or <code>null</code> if the file is not found
* @throws IOException
*/
private static URL getFileURLFromPlugin(Plugin p, String fileName) throws IOException {
try {
URL url = FileLocator.find(p.getBundle(), new Path(fileName), null);
if (url == null) {
// try lib/fileName
String libFileName = "lib/" + fileName;
url = FileLocator.find(p.getBundle(), new Path(libFileName), null);
if (url == null) {
// try bin/fileName
String binFileName = "bin/" + fileName;
url = FileLocator.find(p.getBundle(), new Path(binFileName), null);
if (url == null) {
// try it as an absolute path?
File f = new File(fileName);
if (!f.exists()) {
// give up
return null;
} else {
url = f.toURI().toURL();
}
}
}
}
url = FileLocator.toFileURL(url);
url = fixupFileURLSpaces(url);
return url;
} catch (ExceptionInInitializerError e) {
throw new IOException("failure to get file URL for " + fileName);
}
}
/**
* escape spaces in a URL, primarily to work around a bug in
* {@link File#toURL()}
*
* @param url
* @return an escaped version of the URL
*/
private static URL fixupFileURLSpaces(URL url) {
String urlString = url.toExternalForm();
StringBuffer fixedUpUrl = new StringBuffer();
int lastIndex = 0;
while (true) {
int spaceIndex = urlString.indexOf(' ', lastIndex);
if (spaceIndex < 0) {
fixedUpUrl.append(urlString.substring(lastIndex));
break;
}
fixedUpUrl.append(urlString.substring(lastIndex, spaceIndex));
fixedUpUrl.append("%20");
lastIndex = spaceIndex + 1;
}
try {
return new URL(fixedUpUrl.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
Assertions.UNREACHABLE();
}
return null;
public File getFile(String fileName, ClassLoader loader) throws IOException {
return getFileFromClassLoader(fileName, loader);
}
/**
* @throws FileNotFoundException
*/
public static File getFileFromClassLoader(String fileName, ClassLoader loader) throws FileNotFoundException {
public File getFileFromClassLoader(String fileName, ClassLoader loader) throws FileNotFoundException {
if (loader == null) {
throw new IllegalArgumentException("null loader");
}
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
URL url = loader.getResource(fileName);
URL url = null;
try {
url = loader.getResource(fileName);
} catch (Exception e) {
}
if (DEBUG_LEVEL > 0) {
System.err.println(("FileProvider got url: " + url + " for " + fileName));
}
@ -267,7 +108,7 @@ public class FileProvider {
/**
* @throws FileNotFoundException
*/
public static InputStream getInputStreamFromClassLoader(String fileName, ClassLoader loader) throws FileNotFoundException {
public InputStream getInputStreamFromClassLoader(String fileName, ClassLoader loader) throws FileNotFoundException {
if (loader == null) {
throw new IllegalArgumentException("null loader");
}
@ -286,7 +127,7 @@ public class FileProvider {
* if not found: wrapped as a JarFileModule or a NestedJarFileModule
* @throws IOException
*/
public static Module getJarFileFromClassLoader(String fileName, ClassLoader loader) throws IOException {
public Module getJarFileFromClassLoader(String fileName, ClassLoader loader) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
@ -330,7 +171,7 @@ public class FileProvider {
* @throws IllegalArgumentException
* if url is null
*/
public static String filePathFromURL(URL url) {
public String filePathFromURL(URL url) {
if (url == null) {
throw new IllegalArgumentException("url is null");
}

View File

@ -91,7 +91,7 @@ public class SWTCallGraph {
String exclusionFile = p.getProperty("exclusions");
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, exclusionFile != null ? new File(exclusionFile)
: FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
: (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
ClassHierarchy cha = ClassHierarchy.make(scope);

View File

@ -79,7 +79,7 @@ public class SWTPointsTo {
}
public static Graph<Object> buildPointsTo(String appJar) throws WalaException, IllegalArgumentException, CancelException, IOException {
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, FileProvider.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
ClassHierarchy cha = ClassHierarchy.make(scope);

View File

@ -54,7 +54,7 @@ public class SWTTypeHierarchy {
public static ApplicationWindow run(String classpath) {
try {
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(classpath, FileProvider
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(classpath, (new FileProvider())
.getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
// invoke WALA to build a class hierarchy

View File

@ -4,6 +4,7 @@ Eclipse-LazyStart: true
Bundle-Name: %pluginName
Bundle-SymbolicName: com.ibm.wala.ide
Bundle-Version: 1.1.3.qualifier
Bundle-Activator: com.ibm.wala.ide.plugin.CorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: com.ibm.wala.shrike,
@ -18,5 +19,6 @@ Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Export-Package: com.ibm.wala.ide,
com.ibm.wala.ide.classloader,
com.ibm.wala.ide.plugin,
com.ibm.wala.ide.ui,
com.ibm.wala.ide.util

View File

@ -8,7 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.core.plugin;
package com.ibm.wala.ide.plugin;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;

View File

@ -0,0 +1,67 @@
/*******************************************************************************
* Copyright (c) 2008 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.ide.util;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.runtime.Plugin;
import com.ibm.wala.ide.plugin.CorePlugin;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.types.ClassLoaderReference;
import com.ibm.wala.util.config.AnalysisScopeReader;
public class EclipseAnalysisScopeReader extends AnalysisScopeReader {
public static AnalysisScope readJavaScopeFromPlugin(String scopeFileName, File exclusionsFile, ClassLoader javaLoader) throws IOException {
return readJavaScopeFromPlugin(scopeFileName, exclusionsFile, javaLoader, CorePlugin.getDefault());
}
public static AnalysisScope readJavaScopeFromPlugin(String scopeFileName, File exclusionsFile, ClassLoader javaLoader, Plugin plugIn) throws IOException {
AnalysisScope scope = AnalysisScope.createJavaAnalysisScope();
return read(scope, scopeFileName, exclusionsFile, javaLoader, new EclipseFileProvider(plugIn));
}
public static AnalysisScope makePrimordialScopeFromPlugin(File exclusionsFile) throws IOException {
return makePrimordialScopeFromPlugin(exclusionsFile, CorePlugin.getDefault());
}
/**
* @param exclusionsFile file holding class hierarchy exclusions. may be null
* @throws IOException
* @throws IllegalStateException if there are problmes reading wala properties
*/
public static AnalysisScope makePrimordialScopeFromPlugin(File exclusionsFile, Plugin plugIn) throws IOException {
return read(AnalysisScope.createJavaAnalysisScope(), BASIC_FILE, exclusionsFile,
EclipseAnalysisScopeReader.class.getClassLoader(), new EclipseFileProvider(plugIn));
}
public static AnalysisScope makeJavaBinaryAnalysisScopeFromPlugin(String classPath, File exclusionsFile) throws IOException {
return makeJavaBinaryAnalysisScopeFromPlugin(classPath, exclusionsFile, CorePlugin.getDefault());
}
/**
* @param classPath class path to analyze, delimited by File.pathSeparator
* @param exclusionsFile file holding class hierarchy exclusions. may be null
* @throws IOException
* @throws IllegalStateException if there are problems reading wala properties
*/
public static AnalysisScope makeJavaBinaryAnalysisScopeFromPlugin(String classPath, File exclusionsFile, Plugin plugIn) throws IOException {
if (classPath == null) {
throw new IllegalArgumentException("classPath null");
}
AnalysisScope scope = makePrimordialScopeFromPlugin(exclusionsFile, plugIn);
ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION);
addClassPathToScope(classPath, scope, loader);
return scope;
}
}

View File

@ -0,0 +1,245 @@
/*******************************************************************************
* Copyright (c) 2008 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.ide.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.jar.JarFile;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.Bundle;
import com.ibm.wala.classLoader.JarFileModule;
import com.ibm.wala.classLoader.Module;
import com.ibm.wala.ide.plugin.CorePlugin;
import com.ibm.wala.util.debug.Assertions;
import com.ibm.wala.util.io.FileProvider;
public class EclipseFileProvider extends FileProvider {
/**
* the plug-in to use. If <code>null</code>, {@link CorePlugin#getDefault()} is used.
*/
private final Plugin plugIn;
public EclipseFileProvider() {
this(null);
}
public EclipseFileProvider(Plugin plugIn) {
this.plugIn = plugIn;
}
/**
* This class uses reflection to access classes and methods that are only
* available when Eclipse is running as an IDE environment. The choice to use
* reflection is related to builds: with this design the build doesn't need to
* provide IDE bundles during compilation and hence can spot invalid uses of
* such classes through this bundle.
*
* Because of this class, this bundle must OPTIONALY require
* 'org.eclipse.core.resources'.
*/
private static final class EclipseUtil {
private static Object workspaceRoot = null;
private static Method workspaceRoot_getFile = null;
public static Module getJarFileModule(String fileName) {
// Using reflection to enable this code to be built without the
// org.eclipse.core.resources bundle
//
try {
if (workspaceRoot_getFile == null) {
Class<?> cls = Class.forName("org.eclipse.core.resources.ResourcesPlugin");
Method getWorkspaceMethod = cls.getDeclaredMethod("getWorkspace");
Object workspace = getWorkspaceMethod.invoke(null);
Method getRoot = workspace.getClass().getDeclaredMethod("getRoot");
workspaceRoot = getRoot.invoke(workspace);
workspaceRoot_getFile = workspaceRoot.getClass().getMethod("getFile", IPath.class);
}
IPath path = new Path(fileName);
if (workspaceRoot_getFile.invoke(workspaceRoot, path) != null) {
return new JarFileModule(new JarFile(fileName, false));
}
} catch (Exception e) {
}
return null;
}
}
@Override
public Module getJarFileModule(String fileName, ClassLoader loader) throws IOException {
if (CorePlugin.getDefault() == null) {
return getJarFileFromClassLoader(fileName, loader);
} else if (plugIn != null) {
return getFromPlugin(plugIn, fileName);
} else if (CorePlugin.IS_RESOURCES_BUNDLE_AVAILABLE) {
Module module = EclipseUtil.getJarFileModule(fileName);
if (module != null) {
return module;
}
}
return getFromPlugin(CorePlugin.getDefault(), fileName);
}
/**
* @param fileName
* @return the jar file packaged with this plug-in of the given name, or null
* if not found.
*/
private JarFileModule getFromPlugin(Plugin p, String fileName) throws IOException {
URL url = getFileURLFromPlugin(p, fileName);
return (url == null) ? null : new JarFileModule(new JarFile(filePathFromURL(url)));
}
/**
* get a file URL for a file from a plugin
*
* @param fileName
* the file name
* @return the URL, or <code>null</code> if the file is not found
* @throws IOException
*/
private URL getFileURLFromPlugin(Plugin p, String fileName) throws IOException {
try {
URL url = FileLocator.find(p.getBundle(), new Path(fileName), null);
if (url == null) {
// try lib/fileName
String libFileName = "lib/" + fileName;
url = FileLocator.find(p.getBundle(), new Path(libFileName), null);
if (url == null) {
// try bin/fileName
String binFileName = "bin/" + fileName;
url = FileLocator.find(p.getBundle(), new Path(binFileName), null);
if (url == null) {
// try it as an absolute path?
File f = new File(fileName);
if (!f.exists()) {
// give up
return null;
} else {
url = f.toURI().toURL();
}
}
}
}
url = FileLocator.toFileURL(url);
url = fixupFileURLSpaces(url);
return url;
} catch (ExceptionInInitializerError e) {
throw new IOException("failure to get file URL for " + fileName);
}
}
/**
* escape spaces in a URL, primarily to work around a bug in
* {@link File#toURL()}
*
* @param url
* @return an escaped version of the URL
*/
private URL fixupFileURLSpaces(URL url) {
String urlString = url.toExternalForm();
StringBuffer fixedUpUrl = new StringBuffer();
int lastIndex = 0;
while (true) {
int spaceIndex = urlString.indexOf(' ', lastIndex);
if (spaceIndex < 0) {
fixedUpUrl.append(urlString.substring(lastIndex));
break;
}
fixedUpUrl.append(urlString.substring(lastIndex, spaceIndex));
fixedUpUrl.append("%20");
lastIndex = spaceIndex + 1;
}
try {
return new URL(fixedUpUrl.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
Assertions.UNREACHABLE();
}
return null;
}
@Override
public URL getResource(String fileName, ClassLoader loader) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
Plugin p = plugIn == null ? CorePlugin.getDefault() : plugIn;
if (p == null && loader == null) {
throw new IllegalArgumentException("null loader");
}
return (p == null) ? loader.getResource(fileName) : FileLocator.find(p.getBundle(),
new Path(fileName), null);
}
@Override
public File getFile(String fileName, ClassLoader loader) throws IOException {
Plugin p = plugIn == null ? CorePlugin.getDefault() : plugIn;
return (p == null) ? getFileFromClassLoader(fileName, loader) : getFileFromPlugin(
p, fileName);
}
/**
* @param fileName
* @return the jar file packaged with this plug-in of the given name, or null
* if not found.
* @throws IllegalArgumentException
* if p is null
*/
public File getFileFromPlugin(Plugin p, String fileName) throws IOException {
if (p == null) {
throw new IllegalArgumentException("p is null");
}
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
URL url = getFileURLFromPlugin(p, fileName);
if (url == null) {
throw new FileNotFoundException(fileName);
}
return new File(filePathFromURL(url));
}
/**
* This is fragile. Use with care.
* @return a String representing the path to the wala.core plugin installation
*/
public static String getWalaCorePluginHome() {
if (CorePlugin.getDefault() == null) {
return null;
}
String install = Platform.getInstallLocation().getURL().getPath();
Bundle b = Platform.getBundle("com.ibm.wala.core");
String l = b.getLocation();
if (l.startsWith("update@")) {
l = l.replace("update@", "");
}
if (l.startsWith("reference:file:")) {
return l.replace("reference:file:","");
} else {
return install + File.separator + l;
}
}
}

View File

@ -8,7 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.util;
package com.ibm.wala.ide.util;
import org.eclipse.core.runtime.IProgressMonitor;

View File

@ -8,8 +8,9 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.util;
package com.ibm.wala.ide.util;
import com.ibm.wala.util.MonitorUtil;
import com.ibm.wala.util.MonitorUtil.IProgressMonitor;
/**

View File

@ -48,7 +48,7 @@ public class J2EEAnalysisScope extends AnalysisScope {
* @param lifecycleEntrypoints Should EJB lifecycle entrypoints be considered as call graph entrypoints?
*/
public J2EEAnalysisScope(String baseScope, ClassLoader loader, boolean lifecycleEntrypoints) throws IOException {
this(baseScope, loader, FileProvider.getFile(EXCLUSIONS_FILE), lifecycleEntrypoints);
this(baseScope, loader, (new FileProvider()).getFile(EXCLUSIONS_FILE), lifecycleEntrypoints);
}
/**