code: public String getFullyQualifiedClassName() {
          if (fullyQualifiedClassName == null) {
              final StringBuilder buf = new StringBuilder();
              buf.append(className);
              for (final String suffix : suffixes) {
                  buf.append('$');
                  buf.append(suffix);
              }
              fullyQualifiedClassName = buf.toString();
          }
          return fullyQualifiedClassName;
      }
docs: Get the name of the class, formed from the base name and any suffixes (suffixes are for inner class nesting,
  and are separated by '$'), but without any type arguments. For example,
  {@code "xyz.Cls<String>.InnerCls<Integer>"} is returned as {@code "xyz.Cls$InnerCls"}. The intent of this
  method is that if you replace '.' with '/', and then add the suffix ".class", you end up with the path of the
  classfile relative to the package root.
  
  <p>
  For comparison, {@link #toString()} uses '.' to separate suffixes, and includes type parameters, whereas this
  method uses '$' to separate suffixes, and does not include type parameters.
  
  @return The fully-qualified name of the class, including suffixes but without type arguments.