Index: third_party/protobuf/java/core/src/main/java/com/google/protobuf/TextFormat.java |
diff --git a/third_party/protobuf/java/core/src/main/java/com/google/protobuf/TextFormat.java b/third_party/protobuf/java/core/src/main/java/com/google/protobuf/TextFormat.java |
index 49708242156ca5ded0314f0ef0845c46b46cd694..c1c328fc7d8d6ab01fa5521c73e3814ec9c39692 100644 |
--- a/third_party/protobuf/java/core/src/main/java/com/google/protobuf/TextFormat.java |
+++ b/third_party/protobuf/java/core/src/main/java/com/google/protobuf/TextFormat.java |
@@ -661,14 +661,6 @@ public final class TextFormat { |
nextToken(); |
} |
- int getPreviousLine() { |
- return previousLine; |
- } |
- |
- int getPreviousColumn() { |
- return previousColumn; |
- } |
- |
int getLine() { |
return line; |
} |
@@ -1382,28 +1374,6 @@ public final class TextFormat { |
return text; |
} |
- // Check both unknown fields and unknown extensions and log warming messages |
- // or throw exceptions according to the flag. |
- private void checkUnknownFields(final List<String> unknownFields) |
- throws ParseException { |
- if (unknownFields.isEmpty()) { |
- return; |
- } |
- |
- StringBuilder msg = new StringBuilder("Input contains unknown fields and/or extensions:"); |
- for (String field : unknownFields) { |
- msg.append('\n').append(field); |
- } |
- |
- if (allowUnknownFields) { |
- logger.warning(msg.toString()); |
- } else { |
- String[] lineColumn = unknownFields.get(0).split(":"); |
- throw new ParseException(Integer.valueOf(lineColumn[0]), |
- Integer.valueOf(lineColumn[1]), msg.toString()); |
- } |
- } |
- |
/** |
* Parse a text-format message from {@code input} and merge the contents |
* into {@code builder}. Extensions will be recognized if they are |
@@ -1417,13 +1387,9 @@ public final class TextFormat { |
MessageReflection.BuilderAdapter target = |
new MessageReflection.BuilderAdapter(builder); |
- List<String> unknownFields = new ArrayList<String>(); |
- |
while (!tokenizer.atEnd()) { |
- mergeField(tokenizer, extensionRegistry, target, unknownFields); |
+ mergeField(tokenizer, extensionRegistry, target); |
} |
- |
- checkUnknownFields(unknownFields); |
} |
@@ -1433,11 +1399,9 @@ public final class TextFormat { |
*/ |
private void mergeField(final Tokenizer tokenizer, |
final ExtensionRegistry extensionRegistry, |
- final MessageReflection.MergeTarget target, |
- List<String> unknownFields) |
+ final MessageReflection.MergeTarget target) |
throws ParseException { |
- mergeField(tokenizer, extensionRegistry, target, parseInfoTreeBuilder, |
- unknownFields); |
+ mergeField(tokenizer, extensionRegistry, target, parseInfoTreeBuilder); |
} |
/** |
@@ -1447,8 +1411,7 @@ public final class TextFormat { |
private void mergeField(final Tokenizer tokenizer, |
final ExtensionRegistry extensionRegistry, |
final MessageReflection.MergeTarget target, |
- TextFormatParseInfoTree.Builder parseTreeBuilder, |
- List<String> unknownFields) |
+ TextFormatParseInfoTree.Builder parseTreeBuilder) |
throws ParseException { |
FieldDescriptor field = null; |
int startLine = tokenizer.getLine(); |
@@ -1469,9 +1432,13 @@ public final class TextFormat { |
extensionRegistry, name.toString()); |
if (extension == null) { |
- unknownFields.add((tokenizer.getPreviousLine() + 1) + ":" + |
- (tokenizer.getPreviousColumn() + 1) + ":\t" + |
- type.getFullName() + ".[" + name + "]"); |
+ if (!allowUnknownFields) { |
+ throw tokenizer.parseExceptionPreviousToken( |
+ "Extension \"" + name + "\" not found in the ExtensionRegistry."); |
+ } else { |
+ logger.warning( |
+ "Extension \"" + name + "\" not found in the ExtensionRegistry."); |
+ } |
} else { |
if (extension.descriptor.getContainingType() != type) { |
throw tokenizer.parseExceptionPreviousToken( |
@@ -1506,9 +1473,16 @@ public final class TextFormat { |
} |
if (field == null) { |
- unknownFields.add((tokenizer.getPreviousLine() + 1) + ":" + |
- (tokenizer.getPreviousColumn() + 1) + ":\t" + |
- type.getFullName() + "." + name); |
+ if (!allowUnknownFields) { |
+ throw tokenizer.unknownFieldParseExceptionPreviousToken( |
+ name, |
+ "Message type \"" + type.getFullName() |
+ + "\" has no field named \"" + name + "\"."); |
+ } else { |
+ logger.warning( |
+ "Message type \"" + type.getFullName() |
+ + "\" has no field named \"" + name + "\"."); |
+ } |
} |
} |
@@ -1537,15 +1511,15 @@ public final class TextFormat { |
TextFormatParseInfoTree.Builder childParseTreeBuilder = |
parseTreeBuilder.getBuilderForSubMessageField(field); |
consumeFieldValues(tokenizer, extensionRegistry, target, field, extension, |
- childParseTreeBuilder, unknownFields); |
+ childParseTreeBuilder); |
} else { |
consumeFieldValues(tokenizer, extensionRegistry, target, field, extension, |
- parseTreeBuilder, unknownFields); |
+ parseTreeBuilder); |
} |
} else { |
tokenizer.consume(":"); // required |
- consumeFieldValues(tokenizer, extensionRegistry, target, field, |
- extension, parseTreeBuilder, unknownFields); |
+ consumeFieldValues( |
+ tokenizer, extensionRegistry, target, field, extension, parseTreeBuilder); |
} |
if (parseTreeBuilder != null) { |
@@ -1570,32 +1544,23 @@ public final class TextFormat { |
final MessageReflection.MergeTarget target, |
final FieldDescriptor field, |
final ExtensionRegistry.ExtensionInfo extension, |
- final TextFormatParseInfoTree.Builder parseTreeBuilder, |
- List<String> unknownFields) |
+ final TextFormatParseInfoTree.Builder parseTreeBuilder) |
throws ParseException { |
// Support specifying repeated field values as a comma-separated list. |
// Ex."foo: [1, 2, 3]" |
if (field.isRepeated() && tokenizer.tryConsume("[")) { |
- if (!tokenizer.tryConsume("]")) { // Allow "foo: []" to be treated as empty. |
- while (true) { |
- consumeFieldValue( |
- tokenizer, |
- extensionRegistry, |
- target, |
- field, |
- extension, |
- parseTreeBuilder, |
- unknownFields); |
- if (tokenizer.tryConsume("]")) { |
- // End of list. |
- break; |
- } |
- tokenizer.consume(","); |
+ while (true) { |
+ consumeFieldValue(tokenizer, extensionRegistry, target, field, extension, |
+ parseTreeBuilder); |
+ if (tokenizer.tryConsume("]")) { |
+ // End of list. |
+ break; |
} |
+ tokenizer.consume(","); |
} |
} else { |
- consumeFieldValue(tokenizer, extensionRegistry, target, field, |
- extension, parseTreeBuilder, unknownFields); |
+ consumeFieldValue( |
+ tokenizer, extensionRegistry, target, field, extension, parseTreeBuilder); |
} |
} |
@@ -1609,8 +1574,7 @@ public final class TextFormat { |
final MessageReflection.MergeTarget target, |
final FieldDescriptor field, |
final ExtensionRegistry.ExtensionInfo extension, |
- final TextFormatParseInfoTree.Builder parseTreeBuilder, |
- List<String> unknownFields) |
+ final TextFormatParseInfoTree.Builder parseTreeBuilder) |
throws ParseException { |
Object value = null; |
@@ -1632,8 +1596,7 @@ public final class TextFormat { |
throw tokenizer.parseException( |
"Expected \"" + endToken + "\"."); |
} |
- mergeField(tokenizer, extensionRegistry, subField, parseTreeBuilder, |
- unknownFields); |
+ mergeField(tokenizer, extensionRegistry, subField, parseTreeBuilder); |
} |
value = subField.finish(); |