docs: static byte[] generateClassBytes(String tieClassName,
                                       String servantClassName,
                                       Class<?> remoteInterface,
                                       Method[] remoteMethods,
                                       String[] idlNames,
                                       int rmicCompatible,
                                       boolean portableServer)
                      throws EJBConfigurationException
      {
          int numMethods = remoteMethods.length;
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled(); // d576626
  
          // ASM uses 'internal' java class names (like JNI) where '/' is
          // used instead of '.', so convert the parameters to 'internal' format.
          String internalTieClassName = convertClassName(tieClassName);
          String internalServantClassName = convertClassName(servantClassName);
          String internalInterfaceName = convertClassName(remoteInterface.getName());
  
          String servantDescriptor = "L" + internalServantClassName + ";";
  
          // Remote Business interfaces may or may not extend java.rmi.Remote
          boolean isRmiRemote = (Remote.class).isAssignableFrom(remoteInterface);
  
          if (isTraceOn)
          {
              if (tc.isEntryEnabled())
                  Tr.entry(tc, "generateClassBytes");
              if (tc.isDebugEnabled())
              {
                  Tr.debug(tc, INDENT + "className = " + internalTieClassName);
                  Tr.debug(tc, INDENT + "interface = " + internalInterfaceName);
                  if (isRmiRemote)
                      Tr.debug(tc, INDENT + "implements java.rmi.Remote");
              }
          }
  
          Set<String> classConstantFieldNames = new LinkedHashSet<String>(); // RTC111522
  
          // Create the ASM Class Writer to write out a Tie
          ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); //F743-11995
  
          String parentClassName = portableServer ? "org/omg/PortableServer/Servant" : "org/omg/CORBA_2_3/portable/ObjectImpl";
  
          // Define the Tie Class object
          cw.visit(V1_2, ACC_PUBLIC + ACC_SUPER,
                   internalTieClassName,
                   null,
                   parentClassName,
                   new String[] { "javax/rmi/CORBA/Tie" });
  
          // Define the source code file and debug settings
          String sourceFileName = tieClassName.substring(tieClassName.lastIndexOf(".") + 1) + ".java";
          cw.visitSource(sourceFileName, null);
  
          // Add the static and instance variables common to all Ties.
          addFields(cw, servantDescriptor);
  
          // Initialize the static fields common to all Ties.
          initializeStaticFields(cw, internalTieClassName, remoteInterface);
  
          // Add the public no parameter Tie constructor
          addCtor(cw, internalTieClassName, parentClassName, servantDescriptor);
  
          // Add the methods common to all Tie classes.
          addCommonTieMethods(cw, internalTieClassName, internalServantClassName,
                              servantDescriptor, portableServer);
  
          // Add the _invoke method which will route the incoming request to the
          // correct private method that understands the arguments/return value.
          add_invokeMethod(cw, internalTieClassName, idlNames);
  
          // Now add all of the private 'delegate' methods that correspond to all
          // of the methods of the remote interface (obtained via Reflections).
          for (int i = 0; i < numMethods; ++i)
          {
              addDelegateMethod(cw, internalTieClassName, classConstantFieldNames, // RTC111522
                                internalServantClassName,
                                servantDescriptor, remoteMethods[i], idlNames[i],
                                isRmiRemote, rmicCompatible); // PM46698
          }
  
          // Add class constants fields and methods.                       RTC111522
          JITUtils.addClassConstantMembers(cw, classConstantFieldNames);
  
          // Mark the end of the generated wrapper class
          cw.visitEnd();
  
          // Dump the class bytes out to a byte array.
          byte[] classBytes = cw.toByteArray();
  
          if (isTraceOn && tc.isDebugEnabled())
              writeToClassFile(internalTieClassName, classBytes);
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "generateClassBytes: " + classBytes.length + " bytes");
  
          return classBytes;
      }