code: protected void printInstanceVariables() {
      Iterable<VariableDeclarationFragment> fields = getInstanceFields();
      if (Iterables.isEmpty(fields)) {
        newline();
        return;
      }
      // Need direct access to fields possibly from inner classes that are
      // promoted to top level classes, so must make all visible fields public.
      println(" {");
      println(" @public");
      indent();
      FieldDeclaration lastDeclaration = null;
      boolean needsAsterisk = false;
      for (VariableDeclarationFragment fragment : fields) {
        VariableElement varElement = fragment.getVariableElement();
        FieldDeclaration declaration = (FieldDeclaration) fragment.getParent();
        if (declaration != lastDeclaration) {
          if (lastDeclaration != null) {
            println(";");
          }
          lastDeclaration = declaration;
          JavadocGenerator.printDocComment(getBuilder(), declaration.getJavadoc());
          printIndent();
          if (ElementUtil.isWeakReference(varElement) && !ElementUtil.isVolatile(varElement)) {
            // We must add this even without -use-arc because the header may be
            // included by a file compiled with ARC.
            print("__unsafe_unretained ");
          }
          String objcType = getDeclarationType(varElement);
          needsAsterisk = objcType.endsWith("*");
          if (needsAsterisk) {
            // Strip pointer from type, as it will be added when appending fragment.
            // This is necessary to create "Foo *one, *two;" declarations.
            objcType = objcType.substring(0, objcType.length() - 2);
          }
          print(objcType);
          print(' ');
        } else {
          print(", ");
        }
        if (needsAsterisk) {
          print('*');
        }
        print(nameTable.getVariableShortName(varElement));
      }
      println(";");
      unindent();
      println("}");
    }
docs: Prints the list of instance variables in a type.