Class GeneratedMessage

java.lang.Object
com.google.protobuf.AbstractMessageLite
com.google.protobuf.AbstractMessage
com.google.protobuf.GeneratedMessage
All Implemented Interfaces:
Message, com.google.protobuf.MessageLite, com.google.protobuf.MessageLiteOrBuilder, MessageOrBuilder, Serializable
Direct Known Subclasses:
Any, Api, BoolValue, BytesValue, CompactThing, CompactThings, DescriptorProtos.DescriptorProto, DescriptorProtos.DescriptorProto.ExtensionRange, DescriptorProtos.DescriptorProto.ReservedRange, DescriptorProtos.EnumDescriptorProto, DescriptorProtos.EnumDescriptorProto.EnumReservedRange, DescriptorProtos.EnumValueDescriptorProto, DescriptorProtos.ExtensionRangeOptions.Declaration, DescriptorProtos.FeatureSetDefaults, DescriptorProtos.FeatureSetDefaults.FeatureSetEditionDefault, DescriptorProtos.FieldDescriptorProto, DescriptorProtos.FieldOptions.EditionDefault, DescriptorProtos.FieldOptions.FeatureSupport, DescriptorProtos.FileDescriptorProto, DescriptorProtos.GeneratedCodeInfo, DescriptorProtos.GeneratedCodeInfo.Annotation, DescriptorProtos.MethodDescriptorProto, DescriptorProtos.OneofDescriptorProto, DescriptorProtos.ServiceDescriptorProto, DescriptorProtos.SourceCodeInfo.Location, DescriptorProtos.UninterpretedOption, DescriptorProtos.UninterpretedOption.NamePart, DoubleValue, Duration, Empty, Enum, EnumValue, Field, FieldMask, FloatValue, GeneratedMessage.ExtendableMessage, GetFileDescriptorSetRequest, GetFileDescriptorSetResponse, GetThingRequest, GetThingResponse, GetThingsRequest, GetThingsResponse, Int32Value, Int64Value, JavaFeaturesProto.JavaFeatures, LinksMetadata, ListValue, Log, Log.Entry, Log.Inline, Method, Mixin, Option, PluginProtos.CodeGeneratorRequest, PluginProtos.CodeGeneratorResponse, PluginProtos.CodeGeneratorResponse.File, PluginProtos.Version, SourceContext, StringValue, Struct, TextThing, TextThings, Thing, ThingMetadata, Things, Timestamp, Type, UInt32Value, UInt64Value, Validation, Validations, Value, Value, Value.LangString, Value.List, Value.Literal

public abstract class GeneratedMessage extends AbstractMessage implements Serializable
All generated protocol message classes extend this class. This class implements most of the Message and Builder interfaces using Java reflection. Users can ignore this class and pretend that generated messages implement the Message interface directly.
See Also:
  • Field Details

    • alwaysUseFieldBuilders

      protected static boolean alwaysUseFieldBuilders
      For testing. Allows a test to disable the optimization that avoids using field builders for nested messages until they are requested. By disabling this optimization, existing tests can be reused to test the field builders.
    • unknownFields

      protected UnknownFieldSet unknownFields
      For use by generated code only.

      TODO: mark this private and final (breaking change)

  • Constructor Details

    • GeneratedMessage

      protected GeneratedMessage()
    • GeneratedMessage

      protected GeneratedMessage(GeneratedMessage.Builder<?> builder)
  • Method Details

    • getParserForType

      public com.google.protobuf.Parser<? extends GeneratedMessage> getParserForType()
      TODO: Remove this unnecessary intermediate implementation of this method.
      Specified by:
      getParserForType in interface Message
      Specified by:
      getParserForType in interface com.google.protobuf.MessageLite
    • internalGetFieldAccessorTable

      protected abstract GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
      Get the FieldAccessorTable for this type. We can't have the message class pass this in to the constructor because of bootstrapping trouble with DescriptorProtos.
    • getDescriptorForType

      public Descriptors.Descriptor getDescriptorForType()
      Description copied from interface: MessageOrBuilder
      Get the message's type's descriptor. This differs from the getDescriptor() method of generated message classes in that this method is an abstract method of the Message interface whereas getDescriptor() is a static method of a specific class. They return the same thing.
      Specified by:
      getDescriptorForType in interface MessageOrBuilder
    • mergeFromAndMakeImmutableInternal

      @Deprecated protected void mergeFromAndMakeImmutableInternal(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException
      Deprecated.
      use newBuilder().mergeFrom() instead
      TODO: This method should be removed. It enables parsing directly into an "immutable" message. Have to leave it for now to support old gencode.
      Throws:
      com.google.protobuf.InvalidProtocolBufferException
    • isInitialized

      public boolean isInitialized()
      Specified by:
      isInitialized in interface com.google.protobuf.MessageLiteOrBuilder
      Overrides:
      isInitialized in class AbstractMessage
    • getAllFields

      public Map<Descriptors.FieldDescriptor,Object> getAllFields()
      Description copied from interface: MessageOrBuilder
      Returns a collection of all the fields in this message which are set and their corresponding values. A singular ("required" or "optional") field is set iff hasField() returns true for that field. A "repeated" field is set iff getRepeatedFieldCount() is greater than zero. The values are exactly what would be returned by calling MessageOrBuilder.getField(Descriptors.FieldDescriptor) for each field. The map is guaranteed to be a sorted map, so iterating over it will return fields in order by field number.
      If this is for a builder, the returned map may or may not reflect future changes to the builder. Either way, the returned map is itself unmodifiable.
      Specified by:
      getAllFields in interface MessageOrBuilder
    • hasOneof

      public boolean hasOneof(Descriptors.OneofDescriptor oneof)
      Description copied from interface: MessageOrBuilder
      Returns true if the given oneof is set.
      Specified by:
      hasOneof in interface MessageOrBuilder
      Overrides:
      hasOneof in class AbstractMessage
    • getOneofFieldDescriptor

      public Descriptors.FieldDescriptor getOneofFieldDescriptor(Descriptors.OneofDescriptor oneof)
      Description copied from interface: MessageOrBuilder
      Obtains the FieldDescriptor if the given oneof is set. Returns null if no field is set.
      Specified by:
      getOneofFieldDescriptor in interface MessageOrBuilder
      Overrides:
      getOneofFieldDescriptor in class AbstractMessage
    • hasField

      public boolean hasField(Descriptors.FieldDescriptor field)
      Description copied from interface: MessageOrBuilder
      Returns true if the given field is set. This is exactly equivalent to calling the generated "has" accessor method corresponding to the field. The return value of hasField() is semantically meaningful only for fields where field.hasPresence() == true.
      Specified by:
      hasField in interface MessageOrBuilder
    • getField

      public Object getField(Descriptors.FieldDescriptor field)
      Description copied from interface: MessageOrBuilder
      Obtains the value of the given field, or the default value if it is not set. For primitive fields, the boxed primitive value is returned. For enum fields, the EnumValueDescriptor for the value is returned. For embedded message fields, the sub-message is returned. For repeated fields, a java.util.List is returned.
      Specified by:
      getField in interface MessageOrBuilder
    • getRepeatedFieldCount

      public int getRepeatedFieldCount(Descriptors.FieldDescriptor field)
      Description copied from interface: MessageOrBuilder
      Gets the number of elements of a repeated field. This is exactly equivalent to calling the generated "Count" accessor method corresponding to the field.
      Specified by:
      getRepeatedFieldCount in interface MessageOrBuilder
    • getRepeatedField

      public Object getRepeatedField(Descriptors.FieldDescriptor field, int index)
      Description copied from interface: MessageOrBuilder
      Gets an element of a repeated field. For primitive fields, the boxed primitive value is returned. For enum fields, the EnumValueDescriptor for the value is returned. For embedded message fields, the sub-message is returned.
      Specified by:
      getRepeatedField in interface MessageOrBuilder
    • getUnknownFields

      public UnknownFieldSet getUnknownFields()
      Description copied from interface: MessageOrBuilder
      Get the UnknownFieldSet for this message.
      Specified by:
      getUnknownFields in interface MessageOrBuilder
    • parseUnknownField

      protected boolean parseUnknownField(com.google.protobuf.CodedInputStream input, UnknownFieldSet.Builder unknownFields, com.google.protobuf.ExtensionRegistryLite extensionRegistry, int tag) throws IOException
      Called by subclasses to parse an unknown field.

      TODO remove this method

      Returns:
      true unless the tag is an end-group tag.
      Throws:
      IOException
    • parseUnknownFieldProto3

      protected boolean parseUnknownFieldProto3(com.google.protobuf.CodedInputStream input, UnknownFieldSet.Builder unknownFields, com.google.protobuf.ExtensionRegistryLite extensionRegistry, int tag) throws IOException
      Delegates to parseUnknownField. This method is obsolete, but we must retain it for compatibility with older generated code.

      TODO remove this method

      Throws:
      IOException
    • parseWithIOException

      protected static <M extends Message> M parseWithIOException(com.google.protobuf.Parser<M> parser, InputStream input) throws IOException
      Used by generated code.
      Throws:
      IOException
    • parseWithIOException

      protected static <M extends Message> M parseWithIOException(com.google.protobuf.Parser<M> parser, InputStream input, com.google.protobuf.ExtensionRegistryLite extensions) throws IOException
      Used by generated code.
      Throws:
      IOException
    • parseWithIOException

      protected static <M extends Message> M parseWithIOException(com.google.protobuf.Parser<M> parser, com.google.protobuf.CodedInputStream input) throws IOException
      Used by generated code.
      Throws:
      IOException
    • parseWithIOException

      protected static <M extends Message> M parseWithIOException(com.google.protobuf.Parser<M> parser, com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensions) throws IOException
      Used by generated code.
      Throws:
      IOException
    • parseDelimitedWithIOException

      protected static <M extends Message> M parseDelimitedWithIOException(com.google.protobuf.Parser<M> parser, InputStream input) throws IOException
      Used by generated code.
      Throws:
      IOException
    • parseDelimitedWithIOException

      protected static <M extends Message> M parseDelimitedWithIOException(com.google.protobuf.Parser<M> parser, InputStream input, com.google.protobuf.ExtensionRegistryLite extensions) throws IOException
      Used by generated code.
      Throws:
      IOException
    • canUseUnsafe

      protected static boolean canUseUnsafe()
    • emptyIntList

      protected static com.google.protobuf.Internal.IntList emptyIntList()
    • emptyLongList

      protected static com.google.protobuf.Internal.LongList emptyLongList()
    • emptyFloatList

      protected static com.google.protobuf.Internal.FloatList emptyFloatList()
    • emptyDoubleList

      protected static com.google.protobuf.Internal.DoubleList emptyDoubleList()
    • emptyBooleanList

      protected static com.google.protobuf.Internal.BooleanList emptyBooleanList()
    • makeMutableCopy

      protected static <ListT extends com.google.protobuf.Internal.ProtobufList<?>> ListT makeMutableCopy(ListT list)
    • makeMutableCopy

      protected static <ListT extends com.google.protobuf.Internal.ProtobufList<?>> ListT makeMutableCopy(ListT list, int minCapacity)
    • emptyList

      protected static <T> com.google.protobuf.Internal.ProtobufList<T> emptyList(Class<T> elementType)
    • writeTo

      public void writeTo(com.google.protobuf.CodedOutputStream output) throws IOException
      Specified by:
      writeTo in interface com.google.protobuf.MessageLite
      Overrides:
      writeTo in class AbstractMessage
      Throws:
      IOException
    • getSerializedSize

      public int getSerializedSize()
      Specified by:
      getSerializedSize in interface com.google.protobuf.MessageLite
      Overrides:
      getSerializedSize in class AbstractMessage
    • newInstance

      protected Object newInstance(GeneratedMessage.UnusedPrivateParameter unused)
      Creates a new instance of this message type. Overridden in the generated code.
    • newMessageScopedGeneratedExtension

      public static <ContainingT extends Message, T> GeneratedMessage.GeneratedExtension<ContainingT,T> newMessageScopedGeneratedExtension(Message scope, int descriptorIndex, Class<?> singularType, Message defaultInstance)
      For use by generated code only.
    • newFileScopedGeneratedExtension

      public static <ContainingT extends Message, T> GeneratedMessage.GeneratedExtension<ContainingT,T> newFileScopedGeneratedExtension(Class<?> singularType, Message defaultInstance)
      For use by generated code only.
    • internalGetMapFieldReflection

      protected MapFieldReflectionAccessor internalGetMapFieldReflection(int fieldNumber)
      Gets the map field with the given field number. This method should be overridden in the generated message class if the message contains map fields.

      Unlike other field types, reflection support for map fields can't be implemented based on generated public API because we need to access a map field as a list in reflection API but the generated API only allows us to access it as a map. This method returns the underlying map field directly and thus enables us to access the map field as a list.

    • internalGetMapField

      @Deprecated protected MapField internalGetMapField(int fieldNumber)
      Deprecated.
      TODO: Remove, exists for compatibility with generated code.
    • writeReplace

      protected Object writeReplace() throws ObjectStreamException
      Replaces this object in the output stream with a serialized form. Part of Java's serialization magic. Generated sub-classes must override this method by calling return super.writeReplace();
      Returns:
      a SerializedForm of this message
      Throws:
      ObjectStreamException
    • isStringEmpty

      protected static boolean isStringEmpty(Object value)
    • computeStringSize

      protected static int computeStringSize(int fieldNumber, Object value)
    • computeStringSizeNoTag

      protected static int computeStringSizeNoTag(Object value)
    • writeString

      protected static void writeString(com.google.protobuf.CodedOutputStream output, int fieldNumber, Object value) throws IOException
      Throws:
      IOException
    • writeStringNoTag

      protected static void writeStringNoTag(com.google.protobuf.CodedOutputStream output, Object value) throws IOException
      Throws:
      IOException
    • serializeIntegerMapTo

      protected static <V> void serializeIntegerMapTo(com.google.protobuf.CodedOutputStream out, MapField<Integer,V> field, MapEntry<Integer,V> defaultEntry, int fieldNumber) throws IOException
      Throws:
      IOException
    • serializeLongMapTo

      protected static <V> void serializeLongMapTo(com.google.protobuf.CodedOutputStream out, MapField<Long,V> field, MapEntry<Long,V> defaultEntry, int fieldNumber) throws IOException
      Throws:
      IOException
    • serializeStringMapTo

      protected static <V> void serializeStringMapTo(com.google.protobuf.CodedOutputStream out, MapField<String,V> field, MapEntry<String,V> defaultEntry, int fieldNumber) throws IOException
      Throws:
      IOException
    • serializeBooleanMapTo

      protected static <V> void serializeBooleanMapTo(com.google.protobuf.CodedOutputStream out, MapField<Boolean,V> field, MapEntry<Boolean,V> defaultEntry, int fieldNumber) throws IOException
      Throws:
      IOException