Internal change
PiperOrigin-RevId: 492049282
diff --git a/java/core/src/main/java/com/google/protobuf/TextFormat.java b/java/core/src/main/java/com/google/protobuf/TextFormat.java
index cd98518..65e403e 100644
--- a/java/core/src/main/java/com/google/protobuf/TextFormat.java
+++ b/java/core/src/main/java/com/google/protobuf/TextFormat.java
@@ -1545,7 +1545,8 @@
* the current token is part of the field value, so the silent marker is indicated by
* containsSilentMarkerAfterPrevToken.
*/
- private void detectSilentMarker(Tokenizer tokenizer, String fieldName) {
+ private void detectSilentMarker(
+ Tokenizer tokenizer, Descriptor immediateMessageType, String fieldName) {
}
/**
@@ -1898,18 +1899,18 @@
// 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.
- detectSilentMarker(tokenizer, name);
+ detectSilentMarker(tokenizer, type, name);
if (tokenizer.tryConsume(":") && !tokenizer.lookingAt("{") && !tokenizer.lookingAt("<")) {
skipFieldValue(tokenizer);
} else {
- skipFieldMessage(tokenizer);
+ skipFieldMessage(tokenizer, type);
}
return;
}
// Handle potential ':'.
if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
- detectSilentMarker(tokenizer, field.getFullName());
+ detectSilentMarker(tokenizer, type, field.getFullName());
tokenizer.tryConsume(":"); // optional
if (parseTreeBuilder != null) {
TextFormatParseInfoTree.Builder childParseTreeBuilder =
@@ -1933,7 +1934,7 @@
unknownFields);
}
} else {
- detectSilentMarker(tokenizer, field.getFullName());
+ detectSilentMarker(tokenizer, type, field.getFullName());
tokenizer.consume(":"); // required
consumeFieldValues(
tokenizer,
@@ -2223,7 +2224,7 @@
throw tokenizer.parseExceptionPreviousToken("Expected a valid type URL.");
}
}
- detectSilentMarker(tokenizer, typeUrlBuilder.toString());
+ detectSilentMarker(tokenizer, anyDescriptor, typeUrlBuilder.toString());
tokenizer.tryConsume(":");
final String anyEndToken;
if (tokenizer.tryConsume("<")) {
@@ -2260,7 +2261,7 @@
}
/** Skips the next field including the field's name and value. */
- private void skipField(Tokenizer tokenizer) throws ParseException {
+ private void skipField(Tokenizer tokenizer, Descriptor type) throws ParseException {
String name = consumeFullTypeName(tokenizer);
// Try to guess the type of this field.
@@ -2269,11 +2270,11 @@
// 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.
- detectSilentMarker(tokenizer, name);
+ detectSilentMarker(tokenizer, type, name);
if (tokenizer.tryConsume(":") && !tokenizer.lookingAt("<") && !tokenizer.lookingAt("{")) {
skipFieldValue(tokenizer);
} else {
- skipFieldMessage(tokenizer);
+ skipFieldMessage(tokenizer, type);
}
// For historical reasons, fields may optionally be separated by commas or
// semicolons.
@@ -2285,7 +2286,7 @@
/**
* Skips the whole body of a message including the beginning delimiter and the ending delimiter.
*/
- private void skipFieldMessage(Tokenizer tokenizer) throws ParseException {
+ private void skipFieldMessage(Tokenizer tokenizer, Descriptor type) throws ParseException {
final String delimiter;
if (tokenizer.tryConsume("<")) {
delimiter = ">";
@@ -2294,7 +2295,7 @@
delimiter = "}";
}
while (!tokenizer.lookingAt(">") && !tokenizer.lookingAt("}")) {
- skipField(tokenizer);
+ skipField(tokenizer, type);
}
tokenizer.consume(delimiter);
}