Package com.google.protobuf
Class TextFormat.Parser
- java.lang.Object
-
- com.google.protobuf.TextFormat.Parser
-
- Enclosing class:
- TextFormat
public static class TextFormat.Parser extends java.lang.Object
Parser for text-format proto2 instances. This class is thread-safe. The implementation largely follows google/protobuf/text_format.cc.Use
TextFormat.getParser()
to obtain the default parser, orTextFormat.Parser.Builder
to control the parser behavior.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
TextFormat.Parser.Builder
Builder that can be used to obtain new instances ofTextFormat.Parser
.static class
TextFormat.Parser.SingularOverwritePolicy
Determines if repeated values for non-repeated fields and oneofs are permitted.(package private) static class
TextFormat.Parser.UnknownField
-
Field Summary
Fields Modifier and Type Field Description private boolean
allowUnknownEnumValues
private boolean
allowUnknownExtensions
private boolean
allowUnknownFields
private static int
BUFFER_SIZE
private TextFormatParseInfoTree.Builder
parseInfoTreeBuilder
private int
recursionLimit
private TextFormat.Parser.SingularOverwritePolicy
singularOverwritePolicy
private TypeRegistry
typeRegistry
-
Constructor Summary
Constructors Modifier Constructor Description private
Parser(TypeRegistry typeRegistry, boolean allowUnknownFields, boolean allowUnknownEnumValues, boolean allowUnknownExtensions, TextFormat.Parser.SingularOverwritePolicy singularOverwritePolicy, TextFormatParseInfoTree.Builder parseInfoTreeBuilder, int recursionLimit)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
checkUnknownFields(java.util.List<TextFormat.Parser.UnknownField> unknownFields)
private void
consumeFieldValue(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, Descriptors.FieldDescriptor field, ExtensionRegistry.ExtensionInfo extension, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit)
Parse a single field value fromtokenizer
and merge it intobuilder
.private void
consumeFieldValues(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, Descriptors.FieldDescriptor field, ExtensionRegistry.ExtensionInfo extension, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit)
Parse a one or more field values fromtokenizer
and merge it intobuilder
.private java.lang.String
consumeFullTypeName(TextFormat.Tokenizer tokenizer)
private void
detectSilentMarker(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor immediateMessageType, java.lang.String fieldName)
A valid silent marker appears between a field name and its value.private void
guessFieldTypeAndSkip(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor type, int recursionLimit)
Tries to guess the type of this field and skip it.void
merge(java.lang.CharSequence input, ExtensionRegistry extensionRegistry, Message.Builder builder)
Parse a text-format message frominput
and merge the contents intobuilder
.void
merge(java.lang.CharSequence input, Message.Builder builder)
Parse a text-format message frominput
and merge the contents intobuilder
.void
merge(java.lang.Readable input, ExtensionRegistry extensionRegistry, Message.Builder builder)
Parse a text-format message frominput
and merge the contents intobuilder
.void
merge(java.lang.Readable input, Message.Builder builder)
Parse a text-format message frominput
and merge the contents intobuilder
.private void
mergeAnyFieldValue(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, Descriptors.Descriptor anyDescriptor, int recursionLimit)
private void
mergeField(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit)
Parse a single field fromtokenizer
and merge it intotarget
.private void
mergeField(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit)
Parse a single field fromtokenizer
and merge it intobuilder
.static TextFormat.Parser.Builder
newBuilder()
Returns a new instance ofTextFormat.Parser.Builder
.private void
skipField(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor type, int recursionLimit)
Skips the next field including the field's name and value.private void
skipFieldMessage(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor type, int recursionLimit)
Skips the whole body of a message including the beginning delimiter and the ending delimiter.private void
skipFieldShortFormedRepeated(TextFormat.Tokenizer tokenizer, boolean scalarAllowed, Descriptors.Descriptor type, int recursionLimit)
Skips a short-formed repeated field value.private void
skipFieldValue(TextFormat.Tokenizer tokenizer)
Skips a field value.private static java.lang.StringBuilder
toStringBuilder(java.lang.Readable input)
-
-
-
Field Detail
-
typeRegistry
private final TypeRegistry typeRegistry
-
allowUnknownFields
private final boolean allowUnknownFields
-
allowUnknownEnumValues
private final boolean allowUnknownEnumValues
-
allowUnknownExtensions
private final boolean allowUnknownExtensions
-
singularOverwritePolicy
private final TextFormat.Parser.SingularOverwritePolicy singularOverwritePolicy
-
parseInfoTreeBuilder
private TextFormatParseInfoTree.Builder parseInfoTreeBuilder
-
recursionLimit
private final int recursionLimit
-
BUFFER_SIZE
private static final int BUFFER_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
Parser
private Parser(TypeRegistry typeRegistry, boolean allowUnknownFields, boolean allowUnknownEnumValues, boolean allowUnknownExtensions, TextFormat.Parser.SingularOverwritePolicy singularOverwritePolicy, TextFormatParseInfoTree.Builder parseInfoTreeBuilder, int recursionLimit)
-
-
Method Detail
-
detectSilentMarker
private void detectSilentMarker(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor immediateMessageType, java.lang.String fieldName)
A valid silent marker appears between a field name and its value. If there is a ":" in between, the silent marker will only appear after the colon. This is called after a field name is parsed, and before the ":" if it exists. If the current token is ":", then containsSilentMarkerAfterCurrentToken indicates if there is a valid silent marker. Otherwise, the current token is part of the field value, so the silent marker is indicated by containsSilentMarkerAfterPrevToken.
-
newBuilder
public static TextFormat.Parser.Builder newBuilder()
Returns a new instance ofTextFormat.Parser.Builder
.
-
merge
public void merge(java.lang.Readable input, Message.Builder builder) throws java.io.IOException
Parse a text-format message frominput
and merge the contents intobuilder
.- Throws:
java.io.IOException
-
merge
public void merge(java.lang.CharSequence input, Message.Builder builder) throws TextFormat.ParseException
Parse a text-format message frominput
and merge the contents intobuilder
.- Throws:
TextFormat.ParseException
-
merge
public void merge(java.lang.Readable input, ExtensionRegistry extensionRegistry, Message.Builder builder) throws java.io.IOException
Parse a text-format message frominput
and merge the contents intobuilder
. Extensions will be recognized if they are registered inextensionRegistry
.- Throws:
java.io.IOException
-
toStringBuilder
private static java.lang.StringBuilder toStringBuilder(java.lang.Readable input) throws java.io.IOException
- Throws:
java.io.IOException
-
checkUnknownFields
private void checkUnknownFields(java.util.List<TextFormat.Parser.UnknownField> unknownFields) throws TextFormat.ParseException
- Throws:
TextFormat.ParseException
-
merge
public void merge(java.lang.CharSequence input, ExtensionRegistry extensionRegistry, Message.Builder builder) throws TextFormat.ParseException
Parse a text-format message frominput
and merge the contents intobuilder
. Extensions will be recognized if they are registered inextensionRegistry
.- Throws:
TextFormat.ParseException
-
mergeField
private void mergeField(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit) throws TextFormat.ParseException
Parse a single field fromtokenizer
and merge it intobuilder
.- Throws:
TextFormat.ParseException
-
mergeField
private void mergeField(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit) throws TextFormat.ParseException
Parse a single field fromtokenizer
and merge it intotarget
.- Throws:
TextFormat.ParseException
-
consumeFullTypeName
private java.lang.String consumeFullTypeName(TextFormat.Tokenizer tokenizer) throws TextFormat.ParseException
- Throws:
TextFormat.ParseException
-
consumeFieldValues
private void consumeFieldValues(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, Descriptors.FieldDescriptor field, ExtensionRegistry.ExtensionInfo extension, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit) throws TextFormat.ParseException
Parse a one or more field values fromtokenizer
and merge it intobuilder
.- Throws:
TextFormat.ParseException
-
consumeFieldValue
private void consumeFieldValue(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, Descriptors.FieldDescriptor field, ExtensionRegistry.ExtensionInfo extension, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, int recursionLimit) throws TextFormat.ParseException
Parse a single field value fromtokenizer
and merge it intobuilder
.- Throws:
TextFormat.ParseException
-
mergeAnyFieldValue
private void mergeAnyFieldValue(TextFormat.Tokenizer tokenizer, ExtensionRegistry extensionRegistry, MessageReflection.MergeTarget target, TextFormatParseInfoTree.Builder parseTreeBuilder, java.util.List<TextFormat.Parser.UnknownField> unknownFields, Descriptors.Descriptor anyDescriptor, int recursionLimit) throws TextFormat.ParseException
- Throws:
TextFormat.ParseException
-
skipField
private void skipField(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor type, int recursionLimit) throws TextFormat.ParseException
Skips the next field including the field's name and value.- Throws:
TextFormat.ParseException
-
skipFieldMessage
private void skipFieldMessage(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor type, int recursionLimit) throws TextFormat.ParseException
Skips the whole body of a message including the beginning delimiter and the ending delimiter.- Throws:
TextFormat.ParseException
-
skipFieldValue
private void skipFieldValue(TextFormat.Tokenizer tokenizer) throws TextFormat.ParseException
Skips a field value.- Throws:
TextFormat.ParseException
-
guessFieldTypeAndSkip
private void guessFieldTypeAndSkip(TextFormat.Tokenizer tokenizer, Descriptors.Descriptor type, int recursionLimit) throws TextFormat.ParseException
Tries to guess the type of this field and skip it.If this field is not a message, there should be a ":" between the field name and the field value and also the field value should not start with "{" or "<" which indicates the beginning of a message body. If there is no ":" or there is a "{" or "<" after ":", this field has to be a message or the input is ill-formed. For short-formed repeated fields (i.e. with "[]"), if it is repeated scalar, there must be a ":" between the field name and the starting "[" .
- Throws:
TextFormat.ParseException
-
skipFieldShortFormedRepeated
private void skipFieldShortFormedRepeated(TextFormat.Tokenizer tokenizer, boolean scalarAllowed, Descriptors.Descriptor type, int recursionLimit) throws TextFormat.ParseException
Skips a short-formed repeated field value.Reports an error if scalar type is not allowed but showing up inside "[]".
- Throws:
TextFormat.ParseException
-
-