code: final protected byte[] transform(final InputStream classfileStream) throws IOException {
          ClassConfigData classConfigData = processClassConfiguration(classfileStream);
          ClassInfo classInfo = classConfigData.getClassInfo();
  
          // Only instrument the classes that we're supposed to.
          if (!getInstrumentationOptions().isPackageIncluded(classInfo.getPackageName())) {
              return null;
          }
  
          // Merge command line, config file, package annotations, and class annotations
          classInfo = mergeClassConfigInfo(classInfo);
  
          int classWriterOptions = isComputeFrames() ? ClassWriter.COMPUTE_FRAMES : ClassWriter.COMPUTE_MAXS;
  
          InputStream classInputStream = classConfigData.getClassInputStream();
          ClassReader reader = new ClassReader(classInputStream);
          ClassWriter writer = new ClassWriter(reader, classWriterOptions);
  
          ClassVisitor visitor = writer;
          if (isDebug()) {
              visitor = new CheckClassAdapter(visitor);
              visitor = new TraceClassVisitor(visitor, new PrintWriter(System.out));
          }
  
          // Get the correct tracing adapter
          switch (getTraceType()) {
              case JAVA_LOGGING:
                  visitor = new JSR47TracingClassAdapter(visitor, classInfo);
                  break;
              case TR:
                  visitor = new WebSphereTrTracingClassAdapter(visitor, classInfo);
                  break;
          }
  
          if (getInstrumentWithFFDC()) {
              visitor = new FFDCClassAdapter(visitor, classInfo);
          }
  
          // The SerialVersionUIDAdder adder must be the first visitor in
          // the chain in order to calculate the serialVersionUID before
          // the tracing class adapter mucks around and (possibly) adds a
          // class static initializer.
          visitor = new SerialVersionUIDAdder(visitor);
          try {
              // Keep all metadata information that's present in the class file
              reader.accept(visitor, isComputeFrames() ? ClassReader.EXPAND_FRAMES : 0);
          } catch (Throwable t) {
              IOException ioe = new IOException("Unable to instrument class stream with trace");
              ioe.initCause(t);
              throw ioe;
          }
  
          return writer.toByteArray();
      }
docs: Instrument the class at the current position in the specified input stream.
  
  @return instrumented class file or null if the class has already
  been instrumented.
  
  @throws IOException if an error is encountered while reading from
  the <code>InputStream</code>