code: public ClassFile addInnerClass(String fullInnerClassName, String innerClassName, 
                                     String superClassName) {
          if (fullInnerClassName == null) {
              if (innerClassName == null) {
                  fullInnerClassName = mClassName + '$' + (++mAnonymousInnerClassCount);
              } else {
                  fullInnerClassName = mClassName + '$' + innerClassName;
              }
          }
  
          ClassFile inner = new ClassFile(fullInnerClassName, superClassName);
          Modifiers modifiers = inner.getModifiers().toPrivate(true).toStatic(true);
          inner.setModifiers(modifiers);
          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));
          }
  
          // TODO: Anonymous inner classes and method scoped classes do not have
          // an outer class listed.
  
          mInnerClassesAttr.addInnerClass(fullInnerClassName, mClassName, 
                                          innerClassName, modifiers);
  
          // Record the inner class in itself.
          inner.addAttribute(new InnerClassesAttr(inner.getConstantPool()));
          inner.mInnerClassesAttr.addInnerClass(fullInnerClassName, mClassName,
                                                innerClassName, modifiers);
  
          return inner;
      }
docs: Add an inner class to this class. By default, inner classes are private
  static.
  
  @param fullInnerClassName Optional full inner class name.
  @param innerClassName Optional short inner class name.
  @param superClassName Full super class name.