docs: public static String getClassDetails(final Object pObject, final String pObjectName) {
  
      if (pObject == null) {
        return OBJECT_IS_NULL_ERROR_MESSAGE;
      }
      final String    endOfLine   = System.getProperty("line.separator");
      final String    dividerLine = "---------------------------------------------------------";
      Class           c           = pObject.getClass();
      StringTokenizer tokenizedString;
      String          str;
      String          className      = new String();
      String          superClassName = new String();
      StringBuilder    buffer         = new StringBuilder();
  
      // Heading
      buffer.append(endOfLine);
      buffer.append("**** class details");
      if (!StringUtil.isEmpty(pObjectName)) {
        buffer.append(" for \"" + pObjectName + "\"");
      }
      buffer.append(" ****");
      buffer.append(endOfLine);
  
      // Package
      Package p = c.getPackage();
  
      if (p != null) {
        buffer.append(p.getName());
      }
      buffer.append(endOfLine);
  
      // Class or Interface
      if (c.isInterface()) {
        buffer.append("I n t e r f a c e   ");
      } else {
        buffer.append("C l a s s   ");
      }
      str             = c.getName();
      tokenizedString = new StringTokenizer(str, ".");
      while (tokenizedString.hasMoreTokens()) {
        className = tokenizedString.nextToken().trim();
      }
      str = new String();
      char[] charArray = className.toCharArray();
  
      for (int i = 0; i < charArray.length; i++) {
        str += charArray[i] + " ";
      }
      buffer.append(str);
      buffer.append(endOfLine);
      buffer.append(endOfLine);
  
      // Class Hierarch
      List classNameList = new Vector();
  
      classNameList.add(c.getName());
      Class superclass = c.getSuperclass();
  
      while (superclass != null) {
        classNameList.add(superclass.getName());
        superclass = superclass.getSuperclass();
      }
      Object[] classNameArray = classNameList.toArray();
      int      counter        = 0;
  
      for (int i = classNameArray.length - 1; i >= 0; i--) {
        for (int j = 0; j < counter; j++) {
          buffer.append("   ");
        }
        if (counter > 0) {
          buffer.append("|");
          buffer.append(endOfLine);
        }
        for (int j = 0; j < counter; j++) {
          buffer.append("   ");
        }
        if (counter > 0) {
          buffer.append("+-");
        }
        buffer.append((String) classNameArray[i]);
        buffer.append(endOfLine);
        counter++;
      }
  
      // Divider
      buffer.append(endOfLine);
      buffer.append(dividerLine);
      buffer.append(endOfLine);
      buffer.append(endOfLine);
  
      // Profile
      int classModifier = c.getModifiers();
  
      buffer.append(Modifier.toString(classModifier) + " ");
      if (c.isInterface()) {
        buffer.append("Interface ");
      } else {
        buffer.append("Class ");
      }
      buffer.append(className);
      buffer.append(endOfLine);
      if ((classNameArray != null) && (classNameArray[classNameArray.length - 2] != null)) {
        str             = (String) classNameArray[classNameArray.length - 2];
        tokenizedString = new StringTokenizer(str, ".");
        while (tokenizedString.hasMoreTokens()) {
          superClassName = tokenizedString.nextToken().trim();
        }
        buffer.append("extends " + superClassName);
        buffer.append(endOfLine);
      }
      if (!c.isInterface()) {
        Class[] interfaces = c.getInterfaces();
  
        if ((interfaces != null) && (interfaces.length > 0)) {
          buffer.append("implements ");
          str             = interfaces[0].getName();
          tokenizedString = new StringTokenizer(str, ".");
          while (tokenizedString.hasMoreTokens()) {
            str = tokenizedString.nextToken().trim();
          }
          buffer.append(str);
          for (int i = 1; i < interfaces.length; i++) {
            str             = interfaces[i].getName();
            tokenizedString = new StringTokenizer(str, ".");
            while (tokenizedString.hasMoreTokens()) {
              str = tokenizedString.nextToken().trim();
            }
            buffer.append(", " + str);
          }
          buffer.append(endOfLine);
        }
      }
  
      // Divider
      buffer.append(endOfLine);
      buffer.append(dividerLine);
      buffer.append(endOfLine);
      buffer.append(endOfLine);
  
      // Fields
      buffer.append("F I E L D   S U M M A R Y");
      buffer.append(endOfLine);
      Field[] fields = c.getFields();
  
      if (fields != null) {
        for (int i = 0; i < fields.length; i++) {
          buffer.append(Modifier.toString(fields[i].getType().getModifiers()) + " ");
          str             = fields[i].getType().getName();
          tokenizedString = new StringTokenizer(str, ".");
          while (tokenizedString.hasMoreTokens()) {
            str = tokenizedString.nextToken().trim();
          }
          buffer.append(str + " ");
          buffer.append(fields[i].getName());
          buffer.append(endOfLine);
        }
      }
      buffer.append(endOfLine);
  
      // Constructors        
      buffer.append("C O N S T R U C T O R   S U M M A R Y");
      buffer.append(endOfLine);
      Constructor[] constructors = c.getConstructors();
  
      if (constructors != null) {
        for (int i = 0; i < constructors.length; i++) {
          buffer.append(className + "(");
          Class[] parameterTypes = constructors[i].getParameterTypes();
  
          if (parameterTypes != null) {
            if (parameterTypes.length > 0) {
              str             = parameterTypes[0].getName();
              tokenizedString = new StringTokenizer(str, ".");
              while (tokenizedString.hasMoreTokens()) {
                str = tokenizedString.nextToken().trim();
              }
              buffer.append(str);
              for (int j = 1; j < parameterTypes.length; j++) {
                str             = parameterTypes[j].getName();
                tokenizedString = new StringTokenizer(str, ".");
                while (tokenizedString.hasMoreTokens()) {
                  str = tokenizedString.nextToken().trim();
                }
                buffer.append(", " + str);
              }
            }
          }
          buffer.append(")");
          buffer.append(endOfLine);
        }
      }
      buffer.append(endOfLine);
  
      // Methods
      buffer.append("M E T H O D   S U M M A R Y");
      buffer.append(endOfLine);
      Method[] methods = c.getMethods();
  
      if (methods != null) {
        for (int i = 0; i < methods.length; i++) {
          buffer.append(Modifier.toString(methods[i].getModifiers()) + " ");
          str             = methods[i].getReturnType().getName();
          tokenizedString = new StringTokenizer(str, ".");
          while (tokenizedString.hasMoreTokens()) {
            str = tokenizedString.nextToken().trim();
          }
          buffer.append(str + " ");
          buffer.append(methods[i].getName() + "(");
          Class[] parameterTypes = methods[i].getParameterTypes();
  
          if ((parameterTypes != null) && (parameterTypes.length > 0)) {
            if (parameterTypes[0] != null) {
              str             = parameterTypes[0].getName();
              tokenizedString = new StringTokenizer(str, ".");
              while (tokenizedString.hasMoreTokens()) {
                str = tokenizedString.nextToken().trim();
              }
  
              // array bugfix
              if (str.charAt(str.length() - 1) == ';') {
                str = str.substring(0, str.length() - 1) + "[]";
              }
              buffer.append(str);
              for (int j = 1; j < parameterTypes.length; j++) {
                str             = parameterTypes[j].getName();
                tokenizedString = new StringTokenizer(str, ".");
                while (tokenizedString.hasMoreTokens()) {
                  str = tokenizedString.nextToken().trim();
                }
                buffer.append(", " + str);
              }
            }
          }
          buffer.append(")");
          buffer.append(endOfLine);
        }
      }
      buffer.append(endOfLine);
  
      // Ending        
      buffer.append("**** class details");
      if (!StringUtil.isEmpty(pObjectName)) {
        buffer.append(" for \"" + pObjectName + "\"");
      }
      buffer.append(" end ****");
      buffer.append(endOfLine);
      return buffer.toString();
    }