Fixed: [ Issue 32 ] Mapping Xtext syntax errors to protoc ones. https://code.google.com/p/protobuf-dt/issues/detail?id=32 Mapped some error messages related to the "syntax" element.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java index 52c5409..c82b6eb 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
@@ -26,4 +26,6 @@ public static String Error_expectedFieldNumber; public static String Error_missingFieldNumber; public static String Error_fieldNumbersMustBePositive; + public static String Error_unrecognizedSyntaxIdentifier; + public static String Error_expectedSyntaxIdentifier; }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties index 6ececf8..dcb7afe 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
@@ -2,3 +2,5 @@ Error_expectedFieldNumber = Expected field number. Error_missingFieldNumber = Missing field number. Error_fieldNumbersMustBePositive = Field numbers must be positive integers. +Error_unrecognizedSyntaxIdentifier = Unrecognized syntax identifier \"%s\". This parser only recognizes \"proto2\". +Error_expectedSyntaxIdentifier = Expected syntax identifier.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java index 94a11a8..84bd3ba 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -9,10 +9,11 @@ package com.google.eclipse.protobuf.validation; import static com.google.eclipse.protobuf.validation.Messages.*; +import static java.lang.String.format; import org.eclipse.xtext.validation.Check; -import com.google.eclipse.protobuf.protobuf.Property; +import com.google.eclipse.protobuf.protobuf.*; /** * @author alruiz@google.com (Alex Ruiz) @@ -31,4 +32,10 @@ error(msg, property.eClass().getEStructuralFeature("index")); } + @Check public void checkSyntaxIsProto2(Syntax syntax) { + String name = syntax.getName(); + if ("proto2".equals(name)) return; + String msg = (name == null) ? Error_expectedSyntaxIdentifier : format(Error_unrecognizedSyntaxIdentifier, name); + error(msg, syntax.eClass().getEStructuralFeature("name")); + } }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java index b35c79a..f22837a 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
@@ -27,18 +27,17 @@ @Override public SyntaxErrorMessage getSyntaxErrorMessage(IParserErrorContext context) { String message = context.getDefaultMessage(); EObject currentContext = context.getCurrentContext(); - if (currentContext instanceof Property) message = mapToProtocMessage((Property) currentContext, message); + if (currentContext instanceof Property) message = mapToProtocMessage(message, (Property) currentContext); + if (currentContext == null && message.contains("RULE_STRING")) return null; return new SyntaxErrorMessage(message, SYNTAX_DIAGNOSITC); } - private String mapToProtocMessage(Property property, String message) { - if (message.contains("RULE_ID") && property.getName() == null) return Error_expectedFieldName; - if (message.equals("mismatched input ';' expecting '='") && property.getIndex() == 0) return Error_missingFieldNumber; + private String mapToProtocMessage(String message, Property property) { + if (message.contains("RULE_ID") && property.getName() == null) + return Error_expectedFieldName; + if (message.equals("mismatched input ';' expecting '='") && property.getIndex() == 0) + return Error_missingFieldNumber; return message; } - @Override public SyntaxErrorMessage getSyntaxErrorMessage(IValueConverterErrorContext context) { - return new SyntaxErrorMessage(context.getDefaultMessage(), SYNTAX_DIAGNOSITC); - } - }