Class DescriptorMessageInfoFactory

java.lang.Object
com.google.protobuf.DescriptorMessageInfoFactory
All Implemented Interfaces:
MessageInfoFactory

@ExperimentalApi final class DescriptorMessageInfoFactory extends Object implements MessageInfoFactory
A factory for message info based on protobuf descriptors for a GeneratedMessage.
  • Field Details

    • GET_DEFAULT_INSTANCE_METHOD_NAME

      private static final String GET_DEFAULT_INSTANCE_METHOD_NAME
      See Also:
    • instance

      private static final DescriptorMessageInfoFactory instance
    • specialFieldNames

      private static final Set<String> specialFieldNames
      Names that should be avoided (in UpperCamelCase format). Using them causes the compiler to generate accessors whose names collide with methods defined in base classes.

      Keep this list in sync with kForbiddenWordList in src/google/protobuf/compiler/java/java_helpers.cc

    • isInitializedCheckAnalyzer

      private static DescriptorMessageInfoFactory.IsInitializedCheckAnalyzer isInitializedCheckAnalyzer
  • Constructor Details

    • DescriptorMessageInfoFactory

      private DescriptorMessageInfoFactory()
  • Method Details

    • getInstance

      public static DescriptorMessageInfoFactory getInstance()
    • isSupported

      public boolean isSupported(Class<?> messageType)
      Description copied from interface: MessageInfoFactory
      Whether the message class is supported by this factory.
      Specified by:
      isSupported in interface MessageInfoFactory
    • messageInfoFor

      public MessageInfo messageInfoFor(Class<?> messageType)
      Description copied from interface: MessageInfoFactory
      Returns a information of the message class.
      Specified by:
      messageInfoFor in interface MessageInfoFactory
    • getDefaultInstance

      private static Message getDefaultInstance(Class<?> messageType)
    • descriptorForType

      private static Descriptors.Descriptor descriptorForType(Class<?> messageType)
    • convertSyntax

      private static ProtoSyntax convertSyntax(DescriptorProtos.Edition edition)
    • convert

      private static MessageInfo convert(Class<?> messageType, Descriptors.Descriptor messageDescriptor)
    • needsIsInitializedCheck

      private static boolean needsIsInitializedCheck(Descriptors.Descriptor descriptor)
    • buildOneofMember

      private static FieldInfo buildOneofMember(Class<?> messageType, Descriptors.FieldDescriptor fd, DescriptorMessageInfoFactory.OneofState oneofState, boolean enforceUtf8, Internal.EnumVerifier enumVerifier)
      Builds info for a oneof member field.
    • getOneofStoredType

      private static Class<?> getOneofStoredType(Class<?> messageType, Descriptors.FieldDescriptor fd, FieldType type)
    • getFieldType

      private static FieldType getFieldType(Descriptors.FieldDescriptor fd)
    • bitField

      private static Field bitField(Class<?> messageType, int index)
    • field

      private static Field field(Class<?> messageType, Descriptors.FieldDescriptor fd)
    • cachedSizeField

      private static Field cachedSizeField(Class<?> messageType, Descriptors.FieldDescriptor fd)
    • field

      private static Field field(Class<?> messageType, String fieldName)
    • getFieldName

      static String getFieldName(Descriptors.FieldDescriptor fd)
    • getCachedSizeFieldName

      private static String getCachedSizeFieldName(Descriptors.FieldDescriptor fd)
    • snakeCaseToLowerCamelCase

      private static String snakeCaseToLowerCamelCase(String snakeCase)
      Converts a snake case string into lower camel case.

      Some examples:

           snakeCaseToLowerCamelCase("foo_bar") => "fooBar"
           snakeCaseToLowerCamelCase("foo") => "foo"
       
      Parameters:
      snakeCase - the string in snake case to convert
      Returns:
      the string converted to camel case, with a lowercase first character
    • snakeCaseToUpperCamelCase

      private static String snakeCaseToUpperCamelCase(String snakeCase)
      Converts a snake case string into upper camel case.

      Some examples:

           snakeCaseToUpperCamelCase("foo_bar") => "FooBar"
           snakeCaseToUpperCamelCase("foo") => "Foo"
       
      Parameters:
      snakeCase - the string in snake case to convert
      Returns:
      the string converted to camel case, with an uppercase first character
    • snakeCaseToCamelCase

      private static String snakeCaseToCamelCase(String snakeCase, boolean capFirst)
      Converts a snake case string into camel case.

      For better readability, prefer calling either snakeCaseToLowerCamelCase(String) or snakeCaseToUpperCamelCase(String).

      Some examples:

           snakeCaseToCamelCase("foo_bar", false) => "fooBar"
           snakeCaseToCamelCase("foo_bar", true) => "FooBar"
           snakeCaseToCamelCase("foo", false) => "foo"
           snakeCaseToCamelCase("foo", true) => "Foo"
           snakeCaseToCamelCase("Foo", false) => "foo"
           snakeCaseToCamelCase("fooBar", false) => "fooBar"
       

      This implementation of this method must exactly match the corresponding function in the protocol compiler. Specifically, the UnderscoresToCamelCase function in src/google/protobuf/compiler/java/java_helpers.cc.

      Parameters:
      snakeCase - the string in snake case to convert
      capFirst - true if the first letter of the returned string should be uppercase. false if the first letter of the returned string should be lowercase.
      Returns:
      the string converted to camel case, with an uppercase or lowercase first character depending on if capFirst is true or false, respectively
    • getOneofStoredTypeForMessage

      private static Class<?> getOneofStoredTypeForMessage(Class<?> messageType, Descriptors.FieldDescriptor fd)
      Inspects the message to identify the stored type for a message field that is part of a oneof.
    • getTypeForRepeatedMessageField

      private static Class<?> getTypeForRepeatedMessageField(Class<?> messageType, Descriptors.FieldDescriptor fd)
      Inspects the message to identify the message type of a repeated message field.
    • getterForField

      private static String getterForField(String snakeCase)
      Constructs the name of the get method for the given field in the proto.