Class OfflineInstrumenterBase

  • Direct Known Subclasses:
    OfflineInstrumenter

    public abstract class OfflineInstrumenterBase
    extends Object
    This class provides functionality for performing offline instrumentation. It is subclassed with class-toolkit-specific functionality.
    • Constructor Detail

      • OfflineInstrumenterBase

        protected OfflineInstrumenterBase()
    • Method Detail

      • setManifestBuilder

        public void setManifestBuilder​(OfflineInstrumenterBase.ManifestBuilder mb)
        This installs a ManifestBuilder callback that this class will notify whenever an entry has been added to the output zip file.
      • setOutputJar

        public final void setOutputJar​(File f)
        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

        public final void addInputJar​(File f)
                               throws IOException
        Add a JAR file containing source classes to instrument.
        Throws:
        IOException
      • addInputJarEntry

        public final void addInputJarEntry​(File f,
                                           String name)
                                    throws IOException
        Add a JAR entry containing a source class to instrument.
        Throws:
        IOException
      • addInputClass

        public final void addInputClass​(File baseDirectory,
                                        File f)
        Add a class file containing a source class to instrument.
      • addInputElement

        public final boolean addInputElement​(File baseDirectory,
                                             String a)
                                      throws IOException
        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 null
        IOException
      • parseStandardArgs

        public final String[] parseStandardArgs​(String[] args)
                                         throws IllegalArgumentException,
                                                IOException
        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 == null
        IOException
      • 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.
      • getClassName

        protected abstract String getClassName​(Object cl)
      • getLastClassResourceName

        public final String 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

        public final File getOutputFile()
        Returns the File we are storing classes into.
      • writeUnmodifiedClasses

        public final void writeUnmodifiedClasses()
                                          throws IOException,
                                                 IllegalStateException
        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