diff --git a/com.ibm.wala.core/src/com/ibm/wala/client/impl/AbstractAnalysisEngine.java b/com.ibm.wala.core/src/com/ibm/wala/client/impl/AbstractAnalysisEngine.java index 3d35045a1..cc25a9652 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/client/impl/AbstractAnalysisEngine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/client/impl/AbstractAnalysisEngine.java @@ -10,6 +10,8 @@ *******************************************************************************/ package com.ibm.wala.client.impl; +import java.io.File; +import java.io.IOException; import java.util.Collection; import java.util.Iterator; import java.util.jar.JarFile; @@ -38,7 +40,7 @@ import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.ssa.DefaultIRFactory; import com.ibm.wala.types.ClassLoaderReference; -import com.ibm.wala.util.config.*; +import com.ibm.wala.util.config.AnalysisScopeReader; import com.ibm.wala.util.debug.Assertions; /** @@ -171,13 +173,14 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { /** * Set up the AnalysisScope object + * @throws IOException */ - protected void buildAnalysisScope() { + protected void buildAnalysisScope() throws IOException { if (j2seLibs == null) { Assertions.UNREACHABLE("no j2selibs specified. You probably did not call AppAnalysisEngine.setJ2SELibrary."); } - scope = AnalysisScopeReader.read(SYNTHETIC_J2SE_MODEL, getExclusionsFile(), getClass().getClassLoader()); + scope = AnalysisScopeReader.read(SYNTHETIC_J2SE_MODEL, new File(getExclusionsFile()), getClass().getClassLoader()); // add standard libraries for (int i = 0; i < j2seLibs.length; i++) { @@ -323,8 +326,9 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { * given entry points. * @throws CancelException * @throws IllegalArgumentException + * @throws IOException */ - public CallGraphBuilder defaultCallGraphBuilder() throws IllegalArgumentException, CancelException { + public CallGraphBuilder defaultCallGraphBuilder() throws IllegalArgumentException, CancelException, IOException { buildAnalysisScope(); IClassHierarchy cha = buildClassHierarchy(); setClassHierarchy(cha); @@ -334,7 +338,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { return buildCallGraph(cha, options, true); } - public CallGraph buildDefaultCallGraph() throws IllegalArgumentException, CancelException { + public CallGraph buildDefaultCallGraph() throws IllegalArgumentException, CancelException, IOException { return defaultCallGraphBuilder().makeCallGraph(options); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/EclipseProjectPath.java b/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/EclipseProjectPath.java index 64ee14cf0..4c5d70abe 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/EclipseProjectPath.java +++ b/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/EclipseProjectPath.java @@ -215,7 +215,7 @@ public class EclipseProjectPath { /** * Convert this path to a WALA analysis scope */ - public AnalysisScope toAnalysisScope(final ClassLoader classLoader, final String exclusionsFile) { + public AnalysisScope toAnalysisScope(ClassLoader classLoader, File exclusionsFile) { try { Set s = MapUtil.findOrCreateSet(binaryModules, Loader.APPLICATION); s.add(new BinaryDirectoryTreeModule(makeAbsolute(project.getOutputLocation()).toFile())); @@ -238,7 +238,7 @@ public class EclipseProjectPath { } } - public AnalysisScope toAnalysisScope(final String exclusionsFile) { + public AnalysisScope toAnalysisScope(final File exclusionsFile) { return toAnalysisScope(getClass().getClassLoader(), exclusionsFile); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java index b2e6200f4..02c2e17a0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java @@ -63,6 +63,7 @@ public class Slicer { FULL("full", false, false, false, false), NO_BASE_PTRS("no_base_ptrs", true, false, false, false), NO_BASE_NO_HEAP("no_base_no_heap", true, true, false, false), + NO_BASE_NO_EXCEPTIONS("no_base_no_exceptions", true, false, false, true), NO_BASE_NO_HEAP_NO_EXCEPTIONS("no_base_no_heap_no_exceptions", true, true, false, true), NO_HEAP("no_heap", false, true, false, false), NONE("none", true, true, true, true), diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java b/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java index 756f26e27..f40cef088 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2007 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.util.config; import java.io.BufferedReader; @@ -18,19 +28,23 @@ import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.Atom; import com.ibm.wala.util.debug.Assertions; +/** + * Reads {@link AnalysisScope} from a text file. + * + */ public class AnalysisScopeReader { private static final ClassLoader MY_CLASSLOADER = AnalysisScopeReader.class.getClassLoader(); private static final String BASIC_FILE = "primordial.txt"; - public static AnalysisScope read(String scopeFileName, String exclusionsFile, ClassLoader javaLoader) { + public static AnalysisScope read(String scopeFileName, File exclusionsFile, ClassLoader javaLoader) { AnalysisScope scope = AnalysisScope.createAnalysisScope(Collections.singleton(Language.JAVA)); return read(scope, scopeFileName, exclusionsFile, javaLoader); } - public static AnalysisScope read(AnalysisScope scope, String scopeFileName, String exclusionsFile, ClassLoader javaLoader) { + public static AnalysisScope read(AnalysisScope scope, String scopeFileName, File exclusionsFile, ClassLoader javaLoader) { try { File scopeFile = FileProvider.getFile(scopeFileName, javaLoader); assert scopeFile.exists(); @@ -76,7 +90,7 @@ public class AnalysisScopeReader { } if (exclusionsFile != null) { - scope.setExclusions(new FileOfClasses(exclusionsFile, javaLoader)); + scope.setExclusions(new FileOfClasses(exclusionsFile)); } } catch (IOException e) { @@ -86,11 +100,11 @@ public class AnalysisScopeReader { return scope; } - public static AnalysisScope makePrimordialScope(String exclusionsFile) { + public static AnalysisScope makePrimordialScope(File exclusionsFile) { return read(BASIC_FILE, exclusionsFile, MY_CLASSLOADER); } - public static AnalysisScope makeJavaBinaryAnalysisScope(String classPath, String exclusionsFile) { + public static AnalysisScope makeJavaBinaryAnalysisScope(String classPath, File exclusionsFile) { AnalysisScope scope = makePrimordialScope(exclusionsFile); ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/config/FileOfClasses.java b/com.ibm.wala.core/src/com/ibm/wala/util/config/FileOfClasses.java index a02ef9ff8..e6c50d375 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/config/FileOfClasses.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/config/FileOfClasses.java @@ -10,19 +10,21 @@ *******************************************************************************/ package com.ibm.wala.util.config; -import java.io.*; -import java.net.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.ipa.callgraph.impl.SetOfClasses; import com.ibm.wala.types.TypeReference; -import com.ibm.wala.util.debug.Assertions; /** * - * An object which represents a set of classes read from an XML file. + * An object which represents a set of classes read from a text file. * * @author sfink */ @@ -36,34 +38,26 @@ public class FileOfClasses extends SetOfClasses { private boolean needsCompile = false; - public FileOfClasses(String textFileName, ClassLoader loader) { - try { - URL textFile = FileProvider.getResource(textFileName, loader); - BufferedReader is = - new BufferedReader( - new InputStreamReader( - textFile.openConnection().getInputStream())); - - StringBuffer regex = null; - String line; - while ((line = is.readLine()) != null) { - if (regex == null) { - regex = new StringBuffer("(" + line + ")"); - } else { - regex.append("|(" + line + ")"); - } + public FileOfClasses(File textFile) throws IOException { + + BufferedReader is = new BufferedReader(new InputStreamReader(new FileInputStream(textFile))); + + StringBuffer regex = null; + String line; + while ((line = is.readLine()) != null) { + if (regex == null) { + regex = new StringBuffer("(" + line + ")"); + } else { + regex.append("|(" + line + ")"); } - - if (regex != null) { - this.regex = regex.toString(); - needsCompile = true; - } - - is.close(); - } catch (IOException e) { - e.printStackTrace(); - Assertions.UNREACHABLE(); } + + if (regex != null) { + this.regex = regex.toString(); + needsCompile = true; + } + + is.close(); } private void compile() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/config/FileProvider.java b/com.ibm.wala.core/src/com/ibm/wala/util/config/FileProvider.java index 23bdb4b3a..a7fa0b2fb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/config/FileProvider.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/config/FileProvider.java @@ -38,7 +38,7 @@ import com.ibm.wala.util.debug.Trace; /** * - * This class provides Jar files that are packaged with this plug-in + * This class provides files that are packaged with this plug-in * * @author sfink */ @@ -70,9 +70,7 @@ public class FileProvider { return getJarFileModule(fileName, FileProvider.class.getClassLoader()); } - public static Module getJarFileModule(String fileName, ClassLoader loader) - throws IOException - { + public static Module getJarFileModule(String fileName, ClassLoader loader) throws IOException { if (CorePlugin.getDefault() == null) { return getJarFileFromClassLoader(fileName, loader); } else { @@ -95,38 +93,29 @@ public class FileProvider { public static URL getResource(String fileName) throws IOException { return getResource(fileName, FileProvider.class.getClassLoader()); } - - public static URL getResource(String fileName, ClassLoader loader) - throws IOException - { - return - (CorePlugin.getDefault() == null) ? - loader.getResource(fileName): - FileLocator.find( - CorePlugin.getDefault().getBundle(), - new Path(fileName), null); + + public static URL getResource(String fileName, ClassLoader loader) throws IOException { + return (CorePlugin.getDefault() == null) ? loader.getResource(fileName) : FileLocator.find(CorePlugin.getDefault().getBundle(), + new Path(fileName), null); } - + /** */ public static File getFile(String fileName) throws IOException { 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); + + 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 + * @throws IllegalArgumentException + * if p is null */ public static File getFileFromPlugin(Plugin p, String fileName) throws IOException { @@ -154,7 +143,7 @@ public class FileProvider { * get a file URL for a file from a plugin * * @param fileName - * the file name + * the file name * @return the URL, or null if the file is not found * @throws IOException */ @@ -214,9 +203,7 @@ public class FileProvider { /** * @throws FileNotFoundException */ - public static File getFileFromClassLoader(String fileName, ClassLoader loader) - throws FileNotFoundException - { + public static File getFileFromClassLoader(String fileName, ClassLoader loader) throws FileNotFoundException { URL url = loader.getResource(fileName); if (DEBUG_LEVEL > 0) { Trace.println("FileProvider got url: " + url + " for " + fileName); @@ -226,7 +213,7 @@ public class FileProvider { // system classloader File f = new File(fileName); if (f.exists()) { - return f; + return f; } throw new FileNotFoundException(fileName); } else { @@ -240,10 +227,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 static Module getJarFileFromClassLoader(String fileName, ClassLoader loader) throws IOException { URL url = loader.getResource(fileName); if (DEBUG_LEVEL > 0) { Trace.println("FileProvider got url: " + url + " for " + fileName); @@ -274,7 +258,8 @@ public class FileProvider { * * @param url * @return the path name for the url - * @throws IllegalArgumentException if url is null + * @throws IllegalArgumentException + * if url is null */ public static String filePathFromURL(URL url) { if (url == null) {