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);
- }
-
}