Code cleanup.
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElementsTest.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElementsTest.java
deleted file mode 100644
index 9116109..0000000
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElementsTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.grammar;
-
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.junit.Assert.assertThat;
-
-import org.junit.*;
-
-import com.google.eclipse.protobuf.junit.XtextRule;
-
-/**
- * Tests for <code>{@link CompoundElements}</code>.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class CompoundElementsTest {
-
-  @Rule public XtextRule xtext = new XtextRule();
-  
-  private CompoundElements elements;
-  
-  @Before public void setUp() {
-    elements = xtext.getInstanceOf(CompoundElements.class);
-  }
-  
-  @Test public void should_return_default() {
-    assertThat(elements.defaultValue(), equalTo("default ="));
-  }
-  
-  @Test public void should_return_default_in_brackets() {
-    assertThat(elements.defaultValueInBrackets(), equalTo("[default =]"));
-  }
-  
-  @Test public void should_return_default_for_string() {
-    assertThat(elements.defaultStringValue(), equalTo("default = \"\""));
-  }
-  
-  @Test public void should_return_default_for_string_in_brackets() {
-    assertThat(elements.defaultStringValueInBrackets(), equalTo("[default = \"\"]"));
-  }
-
-  @Test public void should_return_empty_string() {
-    assertThat(elements.emptyString(), equalTo("\"\""));
-  }
-  
-  @Test public void should_return_packed() {
-    assertThat(elements.packed(), equalTo("packed = true"));
-  }
-  
-  @Test public void should_return_packed_in_brackets() {
-    assertThat(elements.packedInBrackets(), equalTo("[packed = true]"));
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/KeywordsTest.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/KeywordsTest.java
deleted file mode 100644
index 47bbe46..0000000
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/KeywordsTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.grammar;
-
-import static com.google.eclipse.protobuf.junit.KeywordHasValueMatcher.hasValue;
-import static org.junit.Assert.assertThat;
-
-import org.junit.*;
-
-import com.google.eclipse.protobuf.junit.XtextRule;
-
-/**
- * Tests for <code>{@link Keywords}</code>.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class KeywordsTest {
-
-  @Rule public XtextRule xtext = new XtextRule();
-
-  private Keywords keywords;
-  
-  @Before public void setUp() {
-    keywords = xtext.getInstanceOf(Keywords.class);
-  }
-  
-  @Test public void should_return_bool() {
-    assertThat(keywords.bool(), hasValue("bool"));
-  }
-
-  @Test public void should_return_true() {
-    assertThat(keywords.boolTrue(), hasValue("true"));
-  }
-
-  @Test public void should_return_false() {
-    assertThat(keywords.boolFalse(), hasValue("false"));
-  }
-  
-  @Test public void should_return_bytes() {
-    assertThat(keywords.bytes(), hasValue("bytes"));
-  }
-  
-  @Test public void should_return_opening_bracket() {
-    assertThat(keywords.openingBracket(), hasValue("["));
-  }
-  
-  @Test public void should_return_closing_bracket() {
-    assertThat(keywords.closingBracket(), hasValue("]"));
-  }
-
-  @Test public void should_return_default() {
-    assertThat(keywords.defaultValue(), hasValue("default"));
-  }
-  
-  @Test public void should_return_equal_sign() {
-    assertThat(keywords.equalSign(), hasValue("="));
-  }
-
-  @Test public void should_return_packed() {
-    assertThat(keywords.packed(), hasValue("packed"));
-  }
-
-  @Test public void should_return_semicolon() {
-    assertThat(keywords.semicolon(), hasValue(";"));
-  }
-
-  @Test public void should_return_string() {
-    assertThat(keywords.string(), hasValue("string"));
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
index c7140ae..b34db80 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
@@ -10,6 +10,7 @@
 
 import static com.google.eclipse.protobuf.protobuf.Modifier.REPEATED;
 import static com.google.eclipse.protobuf.ui.grammar.CommonKeyword.SEMICOLON;
+import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.PACKED_EQUAL_TRUE_IN_BRACKETS;
 
 import java.util.regex.Pattern;
 
@@ -21,11 +22,8 @@
 import org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory;
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
 
-import com.google.eclipse.protobuf.protobuf.Literal;
-import com.google.eclipse.protobuf.protobuf.Property;
-import com.google.eclipse.protobuf.ui.grammar.CompoundElements;
-import com.google.eclipse.protobuf.ui.util.Literals;
-import com.google.eclipse.protobuf.ui.util.Properties;
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.ui.util.*;
 import com.google.inject.Inject;
 
 /**
@@ -42,18 +40,11 @@
   private static final Pattern PROPERTY_WITH_INDEX =
       Pattern.compile("[\\s]+(.*)[\\s]+(.*)[\\s]+(.*)[\\s]+=[\\s]+[\\d]+(.*)");
 
-  private final CompoundElements compoundElements;
-
   @Inject private ParserBasedContentAssistContextFactory contextFactory;
   @Inject private Literals literals;
   @Inject private Properties properties;
 
-  private final String semicolon;
-
-  @Inject public SmartSemicolonHandler(CompoundElements compoundElements) {
-    this.compoundElements = compoundElements;
-    semicolon = SEMICOLON.value;
-  }
+  private final String semicolon = SEMICOLON.toString();
 
   /** {@inheritDoc} */
   @Override protected void insertContent(XtextEditor editor) {
@@ -107,14 +98,14 @@
     if (hasIndexAlready) {
       // we can still insert '[packed = true]' if necessary
       if (shouldInsertPackedOption(property)) {
-        String content = compoundElements.packedInBrackets() + semicolon;
+        String content = PACKED_EQUAL_TRUE_IN_BRACKETS + semicolon;
         return addSpaceAtBeginning(line, content);
       }
       return semicolon;
     }
     int index = properties.calculateTagNumberOf(property);
     if (shouldInsertPackedOption(property)) {
-      String format = "= %d " + compoundElements.packedInBrackets() + "%s";
+      String format = "= %d " + PACKED_EQUAL_TRUE_IN_BRACKETS + "%s";
       return indexAndSemicolonToInsert(format, line, index);
     }
     return defaultIndexAndSemicolonToInsert(line, index);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 008f09c..6c8cf04 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -11,6 +11,7 @@
 import static com.google.eclipse.protobuf.protobuf.Modifier.*;
 import static com.google.eclipse.protobuf.protobuf.ScalarType.STRING;
 import static com.google.eclipse.protobuf.ui.grammar.CommonKeyword.*;
+import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.*;
 import static java.lang.String.valueOf;
 
 import org.eclipse.emf.ecore.EObject;
@@ -25,8 +26,8 @@
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 import com.google.eclipse.protobuf.scoping.Globals;
-import com.google.eclipse.protobuf.ui.grammar.CommonKeyword;
-import com.google.eclipse.protobuf.ui.grammar.CompoundElements;
+import com.google.eclipse.protobuf.ui.grammar.*;
+import com.google.eclipse.protobuf.ui.grammar.CompoundElement;
 import com.google.eclipse.protobuf.ui.labeling.Images;
 import com.google.eclipse.protobuf.ui.util.*;
 import com.google.eclipse.protobuf.util.EObjectFinder;
@@ -39,7 +40,6 @@
  */
 public class ProtobufProposalProvider extends AbstractProtobufProposalProvider {
 
-  @Inject private CompoundElements compoundElements;
   @Inject private EObjectFinder finder;
   @Inject private Globals globals;
   @Inject private PluginImageHelper imageHelper;
@@ -60,10 +60,10 @@
   private void proposeCommonFileOptions(ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     for (Property fileOption : globals.fileOptions()) {
       String displayString = fileOption.getName();
-      String proposalText = displayString + " " + EQUAL.value + " ";
+      String proposalText = displayString + " " + EQUAL + " ";
       boolean isStringOption = properties.isString(fileOption);
       if (isStringOption)
-        proposalText = proposalText + compoundElements.emptyString() + SEMICOLON.value;
+        proposalText = proposalText + EMPTY_STRING + SEMICOLON;
       ICompletionProposal proposal = createCompletionProposal(proposalText, displayString, context);
       if (isStringOption && proposal instanceof ConfigurableCompletionProposal) {
         // set cursor between the proposal's quotes
@@ -100,8 +100,12 @@
 
   private void proposeAndAccept(CommonKeyword[] keywords, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    for (CommonKeyword keyword : keywords)
-      proposeAndAccept(keyword.value, context, acceptor);
+    for (CommonKeyword keyword : keywords) proposeAndAccept(keyword, context, acceptor);
+  }
+
+  private void proposeAndAccept(CommonKeyword keyword, ContentAssistContext context,
+      ICompletionProposalAcceptor acceptor) {
+    proposeAndAccept(keyword.toString(), context, acceptor);
   }
 
   @Override public void complete_ID(EObject model, RuleCall ruleCall, ContentAssistContext context,
@@ -120,7 +124,7 @@
   }
 
   private void proposeEmptyString(ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    ICompletionProposal proposal = createCompletionProposal(compoundElements.emptyString(), context);
+    ICompletionProposal proposal = createCompletionProposal(EMPTY_STRING, context);
     if (proposal instanceof ConfigurableCompletionProposal) {
       ConfigurableCompletionProposal configurable = (ConfigurableCompletionProposal) proposal;
       configurable.setCursorPosition(1);
@@ -129,16 +133,15 @@
   }
 
   private boolean isProposalForDefaultValue(ContentAssistContext context) {
-    return isProposalForAssignment(DEFAULT.value, context);
+    return isProposalForAssignment(DEFAULT, context);
   }
 
-  private boolean isProposalForAssignment(String feature, ContentAssistContext context) {
+  private boolean isProposalForAssignment(CommonKeyword feature, ContentAssistContext context) {
     ImmutableList<AbstractElement> grammarElements = context.getFirstSetGrammarElements();
     for (AbstractElement e : grammarElements) {
       if (!(e instanceof Assignment)) continue;
       Assignment a = (Assignment) e;
-      String equalSign = EQUAL.value;
-      if (feature.equals(a.getFeature()) && equalSign.equals(a.getOperator())) return true;
+      if (feature.hasValueEqualTo(a.getFeature()) && EQUAL.hasValueEqualTo(a.getOperator())) return true;
     }
     return false;
   }
@@ -191,10 +194,10 @@
     Property p = (Property) model;
     Modifier modifier = p.getModifier();
     if (OPTIONAL.equals(modifier)) {
-      String display = compoundElements.defaultValueInBrackets();
-      int cursorPosition = display.indexOf(CLOSING_BRACKET.value);
+      CompoundElement display = DEFAULT_EQUAL_IN_BRACKETS;
+      int cursorPosition = display.indexOf(CLOSING_BRACKET);
       if (isStringProperty(p)) {
-        display = compoundElements.defaultStringValueInBrackets();
+        display = DEFAULT_EQUAL_STRING_IN_BRACKETS;
         cursorPosition++;
       }
       ICompletionProposal proposal = createCompletionProposal(display, context);
@@ -205,7 +208,7 @@
       acceptor.accept(proposal);
     }
     if (REPEATED.equals(modifier) && properties.isPrimitive(p))
-      proposeAndAccept(compoundElements.packedInBrackets(), context, acceptor);
+      proposeAndAccept(PACKED_EQUAL_TRUE_IN_BRACKETS, context, acceptor);
     return true;
   }
 
@@ -214,16 +217,21 @@
     if (p == null) return;
     Modifier modifier = p.getModifier();
     if (!REPEATED.equals(modifier) || !properties.isPrimitive(p)) return;
-    proposeAndAccept(compoundElements.packed(), context, acceptor);
+    proposeAndAccept(PACKED_EQUAL_TRUE, context, acceptor);
+  }
+
+  private void proposeAndAccept(CompoundElement proposalText, ContentAssistContext context,
+      ICompletionProposalAcceptor acceptor) {
+    proposeAndAccept(proposalText.toString(), context, acceptor);
   }
 
   private void proposeDefaultValue(ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     Modifier modifier = extractModifierFromModel(context);
     if (!OPTIONAL.equals(modifier)) return;
-    String display = compoundElements.defaultValue();
-    int cursorPosition = display.length();
+    CompoundElement display = DEFAULT_EQUAL;
+    int cursorPosition = display.charCount();
     if (isStringProperty((Property) context.getCurrentModel())) {
-      display = compoundElements.defaultStringValue();
+      display = DEFAULT_EQUAL_STRING;
       cursorPosition++;
     }
     ICompletionProposal proposal = createCompletionProposal(display, context);
@@ -251,6 +259,10 @@
     return STRING.equals(finder.scalarTypeOf(p));
   }
 
+  private ICompletionProposal createCompletionProposal(CompoundElement proposal, ContentAssistContext context) {
+    return createCompletionProposal(proposal.toString(), context);
+  }
+
   @Override public void completeLiteral_Index(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
     int index = literals.calculateIndexOf((Literal) model);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java
index f156559..24efb42 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java
@@ -11,16 +11,19 @@
 import org.eclipse.xtext.Keyword;
 
 /**
- * Set of common keywords (it may or may not include all the keywords in the grammar.)
+ * A commonly used keyword.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
 public enum CommonKeyword {
 
-  BOOL("bool"), TRUE("true"), FALSE("false"), BYTES("bytes"), OPENING_BRACKET("["), CLOSING_BRACKET("]"),
-  DEFAULT("default"), EQUAL("="), PACKED("packet"), SEMICOLON(":"), STRING("string");
+  // we used to get keywords from IGrammarAccess. The problem was that we still had to hardcode the keyword we were
+  // looking for. The code was too complicated and we had to change our implementation anyway.
 
-  public final String value;
+  BOOL("bool"), TRUE("true"), FALSE("false"), BYTES("bytes"), OPENING_BRACKET("["), CLOSING_BRACKET("]"),
+    DEFAULT("default"), EQUAL("="), PACKED("packet"), SEMICOLON(";"), STRING("string");
+
+  private final String value;
 
   private CommonKeyword(String value) {
     this.value = value;
@@ -33,4 +36,8 @@
   public boolean hasValueEqualTo(String s) {
     return value.equals(s);
   }
+
+  @Override public String toString() {
+    return value;
+  }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
new file mode 100644
index 0000000..5fe9ed8
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.grammar;
+
+import static com.google.eclipse.protobuf.ui.grammar.CommonKeyword.*;
+
+/**
+ * Element composed of one or more keywords.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public enum CompoundElement {
+
+  DEFAULT_EQUAL(join(DEFAULT, EQUAL)),
+  DEFAULT_EQUAL_IN_BRACKETS(inBrackets(DEFAULT_EQUAL)),
+  EMPTY_STRING("\"\""),
+  DEFAULT_EQUAL_STRING(join(DEFAULT_EQUAL, EMPTY_STRING)),
+  DEFAULT_EQUAL_STRING_IN_BRACKETS(inBrackets(DEFAULT_EQUAL_STRING)),
+  PACKED_EQUAL_TRUE(join(PACKED, EQUAL, TRUE)),
+  PACKED_EQUAL_TRUE_IN_BRACKETS(inBrackets(PACKED_EQUAL_TRUE));
+
+  private final String value;
+
+  private static String join(CommonKeyword...keywords) {
+    StringBuilder buffer = new StringBuilder();
+    int count = keywords.length;
+    for (int i = 0; i < count; i++) {
+      buffer.append(keywords[i].toString());
+      if (i < count - 1) buffer.append(" ");
+    }
+    return buffer.toString();
+  }
+
+  private static String join(CompoundElement...elements) {
+    StringBuilder buffer = new StringBuilder();
+    int count = elements.length;
+    for (int i = 0; i < count; i++) {
+      buffer.append(elements[i].value);
+      if (i < count - 1) buffer.append(" ");
+    }
+    return buffer.toString();
+  }
+
+  private static String inBrackets(CompoundElement element) {
+    return String.format("[%s]", element.value);
+  }
+
+  private CompoundElement(String value) {
+    this.value = value;
+  }
+
+  public int charCount() {
+    return value.length();
+  }
+
+  public int indexOf(CommonKeyword keyword) {
+    return value.indexOf(keyword.toString());
+  }
+
+  @Override public String toString() {
+    return value;
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElements.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElements.java
deleted file mode 100644
index a619471..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElements.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.grammar;
-
-import org.eclipse.xtext.Keyword;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-/**
- * Common grammar elements composed of one or more keywords.
- * 
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton
-public class CompoundElements {
-
-  private static final String EMPTY_STRING = "\"\"";
-
-  private final String inBracketsFormat;
-
-  private final String defaultValue;
-  private final String defaultValueInBrackets;
-  private final String defaultStringValue;
-  private final String defaultStringValueInBrackets;
-  private final String packed;
-  private final String packedInBrackets;
-
-  /**
-   * Creates a new </code>{@link CompoundElements}</code>.
-   * @param keywords the keywords in our grammar.
-   */
-  @Inject public CompoundElements(Keywords keywords) {
-    inBracketsFormat = keywords.openingBracket().getValue() + "%s" + keywords.closingBracket().getValue();
-    defaultValue = format("%s %s", keywords.defaultValue(), keywords.equalSign());
-    defaultValueInBrackets = inBrackets(defaultValue);
-    defaultStringValue = format("%s %s %s", keywords.defaultValue(), keywords.equalSign(), EMPTY_STRING);
-    defaultStringValueInBrackets = inBrackets(defaultStringValue);
-    packed = format("%s %s %s", keywords.packed(), keywords.equalSign(), keywords.boolTrue());
-    packedInBrackets = inBrackets(packed);
-  }
-
-  private static String format(String format, Object...values) {
-    int count = values.length;
-    Object[] cleanValues = new Object[count];
-    for (int i = 0; i < count; i++) {
-      Object value = values[i];
-      cleanValues[i] = (value instanceof Keyword) ? ((Keyword) value).getValue() : value;
-    }
-    return String.format(format, cleanValues);
-  }
-
-  private String inBrackets(String element) {
-    return String.format(inBracketsFormat, element);
-  }
-
-  /**
-   * Returns 'default ='.
-   * @return 'default ='.
-   */
-  public String defaultValue() {
-    return defaultValue;
-  }
-
-  /**
-   * Returns '[default =]'.
-   * @return '[default =]'.
-   */
-  public String defaultValueInBrackets() {
-    return defaultValueInBrackets;
-  }
-
-  /**
-   * Returns 'default = ""'.
-   * @return 'default = ""'.
-   */
-  public String defaultStringValue() {
-    return defaultStringValue;
-  }
-
-  /**
-   * Returns '[default = ""]'.
-   * @return '[default = ""]'.
-   */
-  public String defaultStringValueInBrackets() {
-    return defaultStringValueInBrackets;
-  }
-
-  /**
-   * Returns '""'.
-   * @return '""'.
-   */
-  public String emptyString() {
-    return EMPTY_STRING;
-  }
-
-  /**
-   * Returns 'packed = true'.
-   * @return 'packed = true'.
-   */
-  public String packed() {
-    return packed;
-  }
-
-  /**
-   * Returns '[packed = true]'.
-   * @return '[packed = true]'.
-   */
-  public String packedInBrackets() {
-    return packedInBrackets;
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/Keywords.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/Keywords.java
deleted file mode 100644
index a8695c2..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/Keywords.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.grammar;
-
-import static org.eclipse.xtext.GrammarUtil.containedKeywords;
-
-import java.util.List;
-
-import org.eclipse.xtext.IGrammarAccess;
-import org.eclipse.xtext.Keyword;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-/**
- * Common keywords used in the code base.
- * 
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton
-public class Keywords {
-
-  private Keyword bool;
-  private Keyword boolTrue;
-  private Keyword boolFalse;
-  private Keyword bytes;
-  private Keyword openingBracket;
-  private Keyword closingBracket;
-  private Keyword defaultValue;
-  private Keyword equalSign;
-  private Keyword packed;
-  private Keyword semicolon;
-  private Keyword string;
-
-  /**
-   * Creates a new </code>{@link Keywords}</code>.
-   * @param grammarAccess contains the grammar whose keywords we'll be extracting.
-   */
-  @Inject public Keywords(IGrammarAccess grammarAccess) {
-    List<Keyword> allKeywords = containedKeywords(grammarAccess.getGrammar());
-    for (Keyword k : allKeywords) {
-      if (assignIfIsBool(k)) continue;
-      if (assignIfIsBoolTrue(k)) continue;
-      if (assignIfIsBoolFalse(k)) continue;
-      if (assignIfIsBytes(k)) continue;
-      if (assignIfIsOpeningBracket(k)) continue;
-      if (assignIfIsClosingBracket(k)) continue;
-      if (assignIfIsDefaultValue(k)) continue;
-      if (assignIfIsEqualSign(k)) continue;
-      if (assignIfIsPacked(k)) continue;
-      if (assignIfIsSemicolon(k)) continue;
-      if (assignIfIsString(k)) continue;
-    }
-  }
-
-  private boolean assignIfIsBool(Keyword k) {
-    if (!isKeywordValue(k, "bool")) return false;
-    bool = k;
-    return true;
-  }
-
-  private boolean assignIfIsBoolTrue(Keyword k) {
-    if (!isKeywordValue(k, "true")) return false;
-    boolTrue = k;
-    return true;
-  }
-
-  private boolean assignIfIsBoolFalse(Keyword k) {
-    if (!isKeywordValue(k, "false")) return false;
-    boolFalse = k;
-    return true;
-  }
-
-  private boolean assignIfIsBytes(Keyword k) {
-    if (!isKeywordValue(k, "bytes")) return false;
-    bytes = k;
-    return true;
-  }
-
-  private boolean assignIfIsOpeningBracket(Keyword k) {
-    if (!isKeywordValue(k, "[")) return false;
-    openingBracket = k;
-    return true;
-  }
-
-  private boolean assignIfIsClosingBracket(Keyword k) {
-    if (!isKeywordValue(k, "]")) return false;
-    closingBracket = k;
-    return true;
-  }
-
-  private boolean assignIfIsDefaultValue(Keyword k) {
-    if (!isKeywordValue(k, "default")) return false;
-    defaultValue = k;
-    return true;
-  }
-
-  private boolean assignIfIsEqualSign(Keyword k) {
-    if (!isKeywordValue(k, "=")) return false;
-    equalSign = k;
-    return true;
-  }
-
-  private boolean assignIfIsPacked(Keyword k) {
-    if (!isKeywordValue(k, "packed")) return false;
-    packed = k;
-    return true;
-  }
-
-  private boolean assignIfIsSemicolon(Keyword k) {
-    if (!isKeywordValue(k, ";")) return false;
-    semicolon = k;
-    return true;
-  }
-
-  private boolean assignIfIsString(Keyword k) {
-    if (!isKeywordValue(k, "string")) return false;
-    string = k;
-    return true;
-  }
-
-  private static boolean isKeywordValue(Keyword k, String expectedValue) {
-    return expectedValue.equals(k.getValue());
-  }
-
-  /**
-   * Returns the representation of the keyword "bool".
-   * @return the representation of the keyword "bool".
-   */
-  public Keyword bool() {
-    return bool;
-  }
-
-  /**
-   * Returns the representation of the keyword "true".
-   * @return the representation of the keyword "true".
-   */
-  public Keyword boolTrue() {
-    return boolTrue;
-  }
-
-  /**
-   * Returns the representation of the keyword "false".
-   * @return the representation of the keyword "false".
-   */
-  public Keyword boolFalse() {
-    return boolFalse;
-  }
-
-  /**
-   * Returns the representation of the keyword "bytes".
-   * @return the representation of the keyword "bytes".
-   */
-  public Keyword bytes() {
-    return bytes;
-  }
-
-  /**
-   * Returns the representation of the keyword "[".
-   * @return the representation of the keyword "[".
-   */
-  public Keyword openingBracket() {
-    return openingBracket;
-  }
-
-  /**
-   * Returns the representation of the keyword "]".
-   * @return the representation of the keyword "]".
-   */
-  public Keyword closingBracket() {
-    return closingBracket;
-  }
-
-  /**
-   * Returns the representation of the keyword "default".
-   * @return the representation of the keyword "default".
-   */
-  public Keyword defaultValue() {
-    return defaultValue;
-  }
-
-  /**
-   * Returns the representation of the keyword "=".
-   * @return the representation of the keyword "=".
-   */
-  public Keyword equalSign() {
-    return equalSign;
-  }
-
-  /**
-   * Returns the representation of the keyword "packed".
-   * @return the representation of the keyword "packed".
-   */
-  public Keyword packed() {
-    return packed;
-  }
-
-  /**
-   * Returns the representation of the keyword ";".
-   * @return the representation of the keyword ";".
-   */
-  public Keyword semicolon() {
-    return semicolon;
-  }
-
-  /**
-   * Returns the representation of the keyword "string".
-   * @return the representation of the keyword "string".
-   */
-  public Keyword string() {
-    return string;
-  }
-}