code: protected static void premain(final String agentArgument, final Instrumentation instrumentation, final BaseAgent agent) {
      if (instrumentation == null) {
        throw new NullPointerException("instrumentation");
      }
      if (agent == null) {
        throw new NullPointerException("agent");
      }
      if (INSTANCES.isEmpty()) {
        // when adding first agent, make sure to transform the dropship class to call in
        instrumentation.addTransformer(new DropshipTransformer());
      }
  
      INSTANCES.add(agent);
    }
docs: Adds a {@link java.lang.instrument.ClassFileTransformer} that will wire up the given
  {@link dropship.agent.BaseAgent} to {@code Dropship} {@code preRun}, {@code onError} and
  {@code onEnd} methods.
  <p>
  This method should be called from the {@code public static void premain} method of
  a jar's Premain-Class as defined in its MANIFEST.MF.
  </p>
  <p>
  This method should only be invoked once.
  </p>
  
  @param agentArgument   agent argument from {@code premain}, null is ok
  @param instrumentation instrumentation object from {@code premain}, may not be null
  @param agent           instance of agent implementation, may not be null