code: private MType getMessage(final int index, final boolean forBuild) {
      if (this.builders == null) {
        // We don't have any builders -- return the current Message.
        // This is the case where no builder was created, so we MUST have a
        // Message.
        return messages.get(index);
      }
  
      final SingleFieldBuilder<MType, BType, IType> builder = builders.get(index);
      if (builder == null) {
        // We don't have a builder -- return the current message.
        // This is the case where no builder was created for the entry at index,
        // so we MUST have a message.
        return messages.get(index);
  
      } else {
        return forBuild ? builder.build() : builder.getMessage();
      }
    }
docs: Get the message at the specified index. If the message is currently stored as a {@code Builder}
  , it is converted to a {@code Message} by calling {@link Message.Builder#buildPartial} on it.
  
  @param index the index of the message to get
  @param forBuild this is being called for build so we want to make sure we
  SingleFieldBuilder.build to send dirty invalidations
  @return the message for the specified index