code: public final String getValue(int index)
      {
          if (index < 0 || index >= mAttrCount) {
              throwIndex(index);
          }
          String full = mValueBuilder.getAllValues();
          Attribute attr = mAttributes[index];
          ++index;
          if (index < mAttrCount) { // not last
              int endOffset = mAttributes[index].mValueStartOffset;
              return attr.getValue(full, endOffset);
          }
          // last can be optimized bit more:
          return attr.getValue(full);
      }
docs: <p>
  Note: the main reason this method is defined at this level, and
  made final, is performance. JIT may be able to fully inline this
  method, even when reference is via this base class. This is important
  since this is likely to be the most often called method of the
  collector instances.