Allow "reserved" within a group. Change-Id: Icd620b8325237976a2f09c182f961818af0894bc
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java index 2732377..195f33f 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java
@@ -224,4 +224,34 @@ private void verifyError(String message, EObject errorSource, EStructuralFeature errorFeature) { verify(messageAcceptor).acceptError(message, errorSource, errorFeature, -1, null); } + + // syntax = "proto2"; + // + // message Person { + // group foo = 10 { + // reserved 1 to 3; + // optional bool in_same_group = 1; + // } + // optional bool outside_group = 2; + // group bar = 20 { + // optional bool in_other_group = 3; + // } + // } + @Test public void should_error_on_conflict_with_reserved_in_group() { + validator.checkForIndexConflicts(xtext.findFirst(Message.class)); + List<MessageField> messageFields = xtext.findAll(MessageField.class); + verifyError( + "Tag number 1 conflicts with reserved 1 to 3.", + messageFields.get(0), + ProtobufPackage.Literals.MESSAGE_FIELD__INDEX); + verifyError( + "Tag number 2 conflicts with reserved 1 to 3.", + messageFields.get(1), + ProtobufPackage.Literals.MESSAGE_FIELD__INDEX); + verifyError( + "Tag number 3 conflicts with reserved 1 to 3.", + messageFields.get(2), + ProtobufPackage.Literals.MESSAGE_FIELD__INDEX); + verifyNoMoreInteractions(messageAcceptor); + } }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java index 074c5ea..c934b8a 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java
@@ -10,6 +10,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule; import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith; @@ -98,6 +99,36 @@ verifyZeroInteractions(messageAcceptor); } + // syntax = "proto2"; + // + // message Person { + // group foo = 10 { + // reserved "in_same_group", "outside_group", "in_other_group"; + // optional bool in_same_group = 1; + // } + // optional bool outside_group = 2; + // group bar = 20 { + // optional bool in_other_group = 3; + // } + // } + @Test public void should_error_on_conflict_with_reserved_in_group() { + validator.checkForReservedNameConflicts(xtext.findFirst(Message.class)); + List<MessageField> messageFields = xtext.findAll(MessageField.class); + verifyError( + "Name \"in_same_group\" conflicts with reserved \"in_same_group\".", + messageFields.get(0), + ProtobufPackage.Literals.MESSAGE_FIELD__NAME); + verifyError( + "Name \"outside_group\" conflicts with reserved \"outside_group\".", + messageFields.get(1), + ProtobufPackage.Literals.MESSAGE_FIELD__NAME); + verifyError( + "Name \"in_other_group\" conflicts with reserved \"in_other_group\".", + messageFields.get(2), + ProtobufPackage.Literals.MESSAGE_FIELD__NAME); + verifyNoMoreInteractions(messageAcceptor); + } + private void verifyError(String message, EObject errorSource) { verifyError(message, errorSource, null); }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext index 05242a4..1017681 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -73,7 +73,7 @@ '}' (';')?; GroupElement: - =>Option | MessageField | ComplexType | TypeExtension | Extensions; + =>Option | MessageField | ComplexType | TypeExtension | Extensions | Reserved; OneOf: (isRepeated?='repeated')? =>'oneof' name=Name '{'