Fixed null names when identifiers are keywords.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
index e1fe7fc..665b74a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
@@ -13,6 +13,7 @@
import static org.eclipse.jface.viewers.StyledString.DECORATIONS_STYLER;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.xtext.nodemodel.INode;
@@ -36,10 +37,6 @@
@Inject private Fields properties;
public Object labelFor(Object o) {
- if (o instanceof ComplexType) {
- ComplexType type = (ComplexType) o;
- return labelFor(type);
- }
if (o instanceof Extensions) {
Extensions extensions = (Extensions) o;
return labelFor(extensions);
@@ -68,12 +65,11 @@
Rpc rpc = (Rpc) o;
return labelFor(rpc);
}
+ if (o instanceof EObject) {
+ return nameResolver.nameOf((EObject) o);
+ }
return null;
}
-
- private Object labelFor(ComplexType type) {
- return nameResolver.nameOf(type);
- }
private Object labelFor(Extensions extensions) {
StringBuilder builder = new StringBuilder();
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
index d6d73c0..1dfcd33 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
@@ -17,7 +17,7 @@
import org.eclipse.xtext.scoping.impl.ImportUriResolver;
import org.eclipse.xtext.validation.IResourceValidator;
-import com.google.eclipse.protobuf.conversion.ProtobufTerminalConverters;
+import com.google.eclipse.protobuf.conversion.*;
import com.google.eclipse.protobuf.linking.ProtobufResource;
import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameProvider;
import com.google.eclipse.protobuf.parser.Proto2OnlyParser;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java
new file mode 100644
index 0000000..e738673
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/NameValueConverter.java
@@ -0,0 +1,41 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.eclipse.protobuf.conversion;
+
+import static org.eclipse.xtext.GrammarUtil.getAllKeywords;
+
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.conversion.impl.*;
+import org.eclipse.xtext.nodemodel.INode;
+
+import java.util.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ *
+ */
+public class NameValueConverter extends AbstractLexerBasedConverter<Name> {
+
+ @Inject
+ private IGrammarAccess grammarAccess;
+
+ @Override public Name toValue(String string, INode node) {
+ String value = value(string, node);
+ if (value == null) return null;
+ Name name = ProtobufFactory.eINSTANCE.createName();
+ name.setValue(value);
+ return name;
+ }
+
+ private String value(String string, INode node) {
+ if (string != null) return string;
+ String text = node.getText();
+ if (text == null) return text;
+ text = text.trim();
+ Set<String> allKeywords = getAllKeywords(grammarAccess.getGrammar());
+ return allKeywords.contains(text) ? text : null;
+ }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
index d778e94..50289cb 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
@@ -10,6 +10,7 @@
import org.eclipse.xtext.common.services.DefaultTerminalConverters;
import org.eclipse.xtext.conversion.*;
+import com.google.eclipse.protobuf.protobuf.Name;
import com.google.inject.Inject;
@@ -21,6 +22,7 @@
@Inject private DOUBLEValueConverter doubleValueConverter;
@Inject private HEXValueConverter hexValueConverter;
@Inject private LONGValueConverter longValueConverter;
+ @Inject private NameValueConverter nameValueConverter;
@Inject private STRINGValueConverter stringValueConverter;
@ValueConverter(rule = "DOUBLE")
@@ -42,4 +44,9 @@
@Override public IValueConverter<String> STRING() {
return stringValueConverter;
}
+
+ @ValueConverter(rule = "Name")
+ public IValueConverter<Name> Name() {
+ return nameValueConverter;
+ }
}