code: public ClassFile addInnerClass(String innerClassName,
                                     String superClassName) {
          String fullInnerClassName;
          if (innerClassName == null) {
              fullInnerClassName =
                  mClassName + '$' + (++mAnonymousInnerClassCount);
          }
          else {
              fullInnerClassName = mClassName + '$' + innerClassName;
          }
  
          ClassFile inner = new ClassFile(fullInnerClassName, superClassName);
          Modifiers access = inner.getModifiers();
          access.setPrivate(true);
          access.setStatic(true);
          inner.mInnerClassName = innerClassName;
          inner.mOuterClass = this;
  
          if (mInnerClasses == null) {
              mInnerClasses = new ArrayList<ClassFile>();
          }
  
          mInnerClasses.add(inner);
  
          // Record the inner class in this, the outer class.
          if (mInnerClassesAttr == null) {
              addAttribute(new InnerClassesAttr(mCp));
          }
  
          mInnerClassesAttr.addInnerClass(fullInnerClassName, mClassName,
                                          innerClassName, access);
  
          // Record the inner class in itself.
          inner.addAttribute(new InnerClassesAttr(inner.getConstantPool()));
          inner.mInnerClassesAttr.addInnerClass(fullInnerClassName, mClassName,
                                                innerClassName, access);
  
          return inner;
      }
docs: Add an inner class to this class. By default, inner classes are private
  static.
  
  @param innerClassName Optional short inner class name.
  @param superClassName Full super class name.