docs: static void read_value(GeneratorAdapter mg,
                             String className,
                             Set<String> classConstantFieldNames,
                             Method method,
                             Class<?> valueClass,
                             Type valueType,
                             int rmicCompatible)
                      throws EJBConfigurationException
      {
          if (valueClass.isPrimitive())
          {
              if (valueClass == Boolean.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_boolean", "()Z");
              }
              else if (valueClass == Character.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_wchar", "()C");
              }
              else if (valueClass == Byte.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_octet", "()B");
              }
              else if (valueClass == Short.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_short", "()S");
              }
              else if (valueClass == Integer.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_long", "()I");
              }
              else if (valueClass == Long.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_longlong", "()J");
              }
              else if (valueClass == Float.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_float", "()F");
              }
              else if (valueClass == Double.TYPE)
              {
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                     "read_double", "()D");
              }
          }
          else if (valueClass == Object.class)
          {
              mg.visitMethodInsn(INVOKESTATIC, "javax/rmi/CORBA/Util", "readAny",
                                 "(Lorg/omg/CORBA/portable/InputStream;)Ljava/lang/Object;");
          }
          else
          {
              if (valueClass.isInterface())
              {
                  if (valueClass == Serializable.class ||
                      valueClass == Externalizable.class)
                  {
                      mg.visitMethodInsn(INVOKESTATIC, "javax/rmi/CORBA/Util", "readAny",
                                         "(Lorg/omg/CORBA/portable/InputStream;)Ljava/lang/Object;");
                  }
                  else if (isCORBAObject(valueClass, rmicCompatible) || // PM46698
                           (Remote.class).isAssignableFrom(valueClass))
                  {
                      if (valueClass == org.omg.CORBA.Object.class) // RTC111522
                      {
                          mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                             "read_Object", "()Lorg/omg/CORBA/Object;");
                      }
                      else
                      {
                          JITUtils.loadClassConstant(mg, className, classConstantFieldNames, valueClass); // RTC111522
                          mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA/portable/InputStream",
                                             "read_Object", "(Ljava/lang/Class;)Lorg/omg/CORBA/Object;");
                      }
                  }
                  else if (isAbstractInterface(valueClass, rmicCompatible)) // PM46698
                  {
                      JITUtils.loadClassConstant(mg, className, classConstantFieldNames, valueClass); // RTC111522
                      mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA_2_3/portable/InputStream",
                                         "read_abstract_interface", "(Ljava/lang/Class;)Ljava/lang/Object;");
                  }
                  else
                  {
                      JITUtils.loadClassConstant(mg, className, classConstantFieldNames, valueClass); // RTC111522
                      mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA_2_3/portable/InputStream",
                                         "read_value", "(Ljava/lang/Class;)Ljava/io/Serializable;");
                  }
              }
              else if ((Remote.class).isAssignableFrom(valueClass))
              {
                  // Not a valid RMI/IIOP type - log message and throw exception. d450525
                  Tr.error(tc, "JIT_INVALID_ARG_RETURN_TYPE_CNTR5100E",
                           new Object[] { valueClass.getName(),
                                         method.getName(),
                                         method.getDeclaringClass().getName() });
                  throw new EJBConfigurationException("Argument or return type " + valueClass.getName() + " of method " +
                                                      method.getName() + " on class " + method.getDeclaringClass().getName() +
                                                      " is not a valid type for RMI/IIOP.");
              }
              else
              {
                  JITUtils.loadClassConstant(mg, className, classConstantFieldNames, valueClass); // RTC111522
                  mg.visitMethodInsn(INVOKEVIRTUAL, "org/omg/CORBA_2_3/portable/InputStream",
                                     "read_value", "(Ljava/lang/Class;)Ljava/io/Serializable;");
              }
  
              JITUtils.checkCast(mg, valueType.getInternalName());
          }
      }