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