Class OfflineInstrumenterBase
java.lang.Object
com.ibm.wala.shrike.shrikeBT.tools.OfflineInstrumenterBase
- Direct Known Subclasses:
OfflineInstrumenter
This class provides functionality for performing offline instrumentation. It is subclassed with
class-toolkit-specific functionality.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
Thiscallback is notified whenever an entry has been added to the output zip file. -
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionfinal void
addInputClass
(File baseDirectory, File f) Add a class file containing a source class to instrument.final void
addInputDirectory
(File baseDirectory, File d) Add a directory containing class files to instrument.final boolean
addInputElement
(File baseDirectory, String a) Add something to instrument --- the name of a JAR file, a class file, a directory or an entry within a jar file (as filename#entryname).final void
addInputJar
(File f) Add a JAR file containing source classes to instrument.final void
addInputJarEntry
(File f, String name) Add a JAR entry containing a source class to instrument.final OutputStream
Add a raw ZipEntry to the output JAR.final void
Start traversing the source class list from the beginning.final void
close()
Call this when you're done modifying classes.static void
copyStream
(InputStream in, OutputStream out) final void
Complete and flush the entry initiated by addOutputJarEntry.protected abstract String
getClassName
(Object cl) final String
Get the name of the resource containing the last class returned.final int
final File
Returns the File we are storing classes into.protected final Object
protected final boolean
internalOutputModifiedClass
(Object cf, String name, Object mods) protected abstract Object
makeClassFromStream
(String inputName, BufferedInputStream s) final String[]
parseStandardArgs
(String[] args) Parse an argument list to find elements to instrument and the name of the output file.void
final void
Skip the last class returned in every future traversal of the class list.final void
setJARComment
(String comment) Set the JAR Comment for the output JAR.void
This installs a ManifestBuilder callback that this class will notify whenever an entry has been added to the output zip file.final void
setOutputJar
(File f) Set the file in which instrumented classes will be deposited.final void
setPassUnmodifiedClasses
(boolean pass) Indicate whether classes which are not modified will be put into the output jar anyway.protected abstract void
writeClassTo
(Object cl, Object mods, OutputStream s) final void
Call this to copy any unmodified classes to the output.
-
Field Details
-
cha
-
-
Constructor Details
-
OfflineInstrumenterBase
protected OfflineInstrumenterBase()
-
-
Method Details
-
setManifestBuilder
This installs a ManifestBuilder callback that this class will notify whenever an entry has been added to the output zip file. -
setClassHierarchyProvider
-
setOutputJar
Set the file in which instrumented classes will be deposited. -
setPassUnmodifiedClasses
public final void setPassUnmodifiedClasses(boolean pass) Indicate whether classes which are not modified will be put into the output jar anyway. -
addInputJar
Add a JAR file containing source classes to instrument.- Throws:
IOException
-
addInputJarEntry
-
addInputClass
-
addInputDirectory
public final void addInputDirectory(File baseDirectory, File d) throws IOException, IllegalArgumentException Add a directory containing class files to instrument. All subdirectories are also scanned.- Throws:
IllegalArgumentException
- if d is nullIOException
-
addInputElement
Add something to instrument --- the name of a JAR file, a class file, a directory or an entry within a jar file (as filename#entryname). If we can't identify it, nothing is added and we return false.- Throws:
IllegalArgumentException
- if a is nullIOException
-
parseStandardArgs
Parse an argument list to find elements to instrument and the name of the output file. The "-o filename" option selects the output JAR file name. Any other argument not starting with "-" is added to the list of elements to instrument, if it appears to be the name of a class file, JAR file, or directory. If any argument starting with "--" is encountered, the rest of the command-line is considered leftover- Returns:
- the arguments that were not understood
- Throws:
IllegalArgumentException
- if args == nullIOException
-
getNumInputClasses
public final int getNumInputClasses()- Returns:
- the number of source classes to be instrumented
-
beginTraversal
public final void beginTraversal()Start traversing the source class list from the beginning. -
makeClassFromStream
protected abstract Object makeClassFromStream(String inputName, BufferedInputStream s) throws IOException - Throws:
IOException
-
getClassName
-
writeClassTo
- Throws:
IOException
-
internalNextClass
- Throws:
IOException
-
getLastClassResourceName
Get the name of the resource containing the last class returned. This is either a file name (e.g., "com/ibm/Main.class"), or a JAR entry name (e.g., "apps/app.jar#com/ibm/Main.class").- Returns:
- the resource name, or null if no class has been returned yet
-
getOutputFile
Returns the File we are storing classes into. -
internalOutputModifiedClass
protected final boolean internalOutputModifiedClass(Object cf, String name, Object mods) throws IOException - Throws:
IOException
-
setJARComment
Set the JAR Comment for the output JAR.- Throws:
IOException
IllegalStateException
-
setIgnore
Skip the last class returned in every future traversal of the class list.- Throws:
IllegalArgumentException
-
copyStream
public static void copyStream(InputStream in, OutputStream out) throws IllegalArgumentException, IOException - Throws:
IllegalArgumentException
IOException
-
addOutputJarEntry
Add a raw ZipEntry to the output JAR. Call endOutputJarEntry() when you're done.- Returns:
- the OutputStream to be used to write the entry contents
- Throws:
IOException
IllegalStateException
-
endOutputJarEntry
Complete and flush the entry initiated by addOutputJarEntry.- Throws:
IOException
IllegalStateException
-
writeUnmodifiedClasses
Call this to copy any unmodified classes to the output. This is called automatically by close(); you should only call this if you want to write an entry to the JAR file *after* the unmodified classes. This will only ever be called once per output JAR.- Throws:
IOException
IllegalStateException
-
close
Call this when you're done modifying classes.- Throws:
IOException
IllegalStateException
-