docs: private static void addEJBMethod(ClassWriter cw,
                                       String className,
                                       String implClassName,
                                       Method method)
      {
          GeneratorAdapter mg;
          String methodName = method.getName();
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(tc, INDENT + "adding method : " + methodName + " " +
                           MethodAttribUtils.jdiMethodSignature(method) +
                           " : isBridge = " + method.isBridge() +
                           " : aroundInvoke = false");
  
          // Convert the return value, arguments, and exception classes to
          // ASM Type objects, and create the ASM Method object which will
          // be used to actually add the method and method code.
          Type returnType = Type.getType(method.getReturnType());
          Type[] argTypes = getTypes(method.getParameterTypes());
          Type[] exceptionTypes = getTypes(method.getExceptionTypes());
  
          org.objectweb.asm.commons.Method m =
                          new org.objectweb.asm.commons.Method(methodName,
                                          returnType,
                                          argTypes);
  
          // Create an ASM GeneratorAdapter object for the ASM Method, which
          // makes generating dynamic code much easier... as it keeps track
          // of the position of the arguements and local variables, etc.
          mg = new GeneratorAdapter(ACC_PUBLIC, m, null, exceptionTypes, cw);
  
          // -----------------------------------------------------------------------
          // Begin Method Code...
          // -----------------------------------------------------------------------
          mg.visitCode();
  
          // -----------------------------------------------------------------------
          // Now invoke the business method;
          // - Directly, by calling the method on the bean instance.
          // -----------------------------------------------------------------------
  
          // -----------------------------------------------------------------------
          // ((bean impl)ivEjbInstance).<method>(<args...>);
          //      or
          // return ((bean impl)ivEjbInstance).<method>(<args...>);
          // -----------------------------------------------------------------------
          Type implType = Type.getType("L" + implClassName + ";");
          mg.loadThis();
          mg.visitFieldInsn(GETFIELD, className, "ivEjbInstance", "Ljava/lang/Object;");
          mg.checkCast(implType);
          mg.loadArgs(0, argTypes.length); // do not pass "this"
          mg.visitMethodInsn(INVOKEVIRTUAL, implClassName, methodName,
                             m.getDescriptor());
  
          // -----------------------------------------------------------------------
          // return
          // -----------------------------------------------------------------------
          mg.returnValue();
  
          // -----------------------------------------------------------------------
          // End Method Code...
          // -----------------------------------------------------------------------
          mg.endMethod(); // GeneratorAdapter accounts for visitMaxs(x,y)
          mg.visitEnd();
      }