Added unit tests. Cleaned up code.
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
new file mode 100644
index 0000000..a8ae9e5
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
@@ -0,0 +1,64 @@
+/*
+ * 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.util;
+
+import static com.google.eclipse.protobuf.junit.Finder.findProperty;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNull.nullValue;
+import static org.junit.Assert.assertThat;
+
+import org.junit.*;
+
+import com.google.eclipse.protobuf.junit.XtextRule;
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Enum;
+
+/**
+ * Tests for <code>{@link ProtobufElementFinder#enumTypeOf(Property)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufElementFinder_enumTypeOf_Test {
+
+  @Rule public XtextRule xtext = new XtextRule();
+
+  private ProtobufElementFinder finder;
+
+  @Before public void setUp() {
+    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+  }
+
+  @Test public void should_return_enum_if_property_type_is_enum() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("enum PhoneType {              ")
+         .append("  MOBILE = 0;                 ")
+         .append("  HOME = 1;                   ")
+         .append("  WORK = 2;                   ")
+         .append("}                             ")
+         .append("                              ")
+         .append("message PhoneNumber {         ")
+         .append("  optional PhoneType type = 1;")
+         .append("}                             ");
+    Protobuf root = xtext.parse(proto);
+    Property type = findProperty("type", root);
+    Enum phoneType = finder.enumTypeOf(type);
+    assertThat(phoneType.getName(), equalTo("PhoneType"));
+  }
+
+  @Test public void should_return_null_if_property_type_is_not_enum() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("message Person {           ")
+         .append("  optional string name = 1;")
+         .append("}                          ");
+    Protobuf root = xtext.parse(proto);
+    Property name = findProperty("name", root);
+    Enum anEnum = finder.enumTypeOf(name);
+    assertThat(anEnum, nullValue());
+  }
+}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
new file mode 100644
index 0000000..e1da903
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
@@ -0,0 +1,61 @@
+/*
+ * 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.util;
+
+import static com.google.eclipse.protobuf.junit.Finder.findProperty;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNull.nullValue;
+import static org.junit.Assert.assertThat;
+
+import org.eclipse.emf.ecore.EObject;
+import org.junit.*;
+
+import com.google.eclipse.protobuf.junit.XtextRule;
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Package;
+
+/**
+ * Tests for <code>{@link ProtobufElementFinder#packageOf(EObject)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufElementFinder_packageOf_Test {
+
+  @Rule public XtextRule xtext = new XtextRule();
+
+  private ProtobufElementFinder finder;
+
+  @Before public void setUp() {
+    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+  }
+
+  @Test public void should_return_package_if_proto_has_one() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("package person.test;    ")
+         .append("                        ")
+         .append("message Person {        ")
+         .append("  optional int32 id = 1;")
+         .append("}                       ");
+    Protobuf root = xtext.parse(proto);
+    Property id = findProperty("id", root);
+    Package aPackage = finder.packageOf(id);
+    assertThat(aPackage.getName(), equalTo("person.test"));
+  }
+
+  @Test public void should_return_null_if_proto_does_not_have_package() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("message Person {        ")
+         .append("  optional int32 id = 1;")
+         .append("}                       ");
+    Protobuf root = xtext.parse(proto);
+    Property id = findProperty("id", root);
+    Package aPackage = finder.packageOf(id);
+    assertThat(aPackage, nullValue());
+  }
+}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
new file mode 100644
index 0000000..2450b54
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
@@ -0,0 +1,46 @@
+/*
+ * 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.util;
+
+import static com.google.eclipse.protobuf.junit.Finder.findProperty;
+import static org.hamcrest.core.IsSame.sameInstance;
+import static org.junit.Assert.assertThat;
+
+import org.eclipse.emf.ecore.EObject;
+import org.junit.*;
+
+import com.google.eclipse.protobuf.junit.XtextRule;
+import com.google.eclipse.protobuf.protobuf.Property;
+import com.google.eclipse.protobuf.protobuf.Protobuf;
+
+/**
+ * Tests for <code>{@link ProtobufElementFinder#rootOf(EObject)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufElementFinder_rootOf_Test {
+
+  @Rule public XtextRule xtext = new XtextRule();
+
+  private ProtobufElementFinder finder;
+
+  @Before public void setUp() {
+    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+  }
+
+  @Test public void should_return_root_of_proto() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("message Person {           ")
+         .append("  optional string name = 1;")
+         .append("}                          ");
+    Protobuf root = xtext.parse(proto);
+    Property name = findProperty("name", root);
+    assertThat(finder.rootOf(name), sameInstance(root));
+  }
+}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
new file mode 100644
index 0000000..7b12cc5
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
@@ -0,0 +1,63 @@
+/*
+ * 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.util;
+
+import static com.google.eclipse.protobuf.junit.Finder.findProperty;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNull.nullValue;
+import static org.junit.Assert.assertThat;
+
+import org.junit.*;
+
+import com.google.eclipse.protobuf.junit.XtextRule;
+import com.google.eclipse.protobuf.protobuf.*;
+
+/**
+ * Tests for <code>{@link ProtobufElementFinder#scalarTypeOf(Property)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufElementFinder_scalarTypeOf_Test {
+
+  @Rule public XtextRule xtext = new XtextRule();
+
+  private ProtobufElementFinder finder;
+
+  @Before public void setUp() {
+    finder = xtext.getInstanceOf(ProtobufElementFinder.class);
+  }
+
+  @Test public void should_return_scalar_if_property_type_is_scalar() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("message Person {        ")
+         .append("  optional int32 id = 1;")
+         .append("}                       ");
+    Protobuf root = xtext.parse(proto);
+    Property id = findProperty("id", root);
+    ScalarType int32 = finder.scalarTypeOf(id);
+    assertThat(int32.getName(), equalTo("int32"));
+  }
+
+  @Test public void should_return_null_if_property_type_is_not_scalar() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("enum PhoneType {              ")
+         .append("  MOBILE = 0;                 ")
+         .append("  HOME = 1;                   ")
+         .append("  WORK = 2;                   ")
+         .append("}                             ")
+         .append("                              ")
+         .append("message PhoneNumber {         ")
+         .append("  optional PhoneType type = 1;")
+         .append("}                             ");
+    Protobuf root = xtext.parse(proto);
+    Property type = findProperty("type", root);
+    ScalarType scalar = finder.scalarTypeOf(type);
+    assertThat(scalar, nullValue());
+  }
+}
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 9f58cae..af4f45e 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
@@ -30,7 +30,7 @@
 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;
+import com.google.eclipse.protobuf.util.ProtobufElementFinder;
 import com.google.inject.Inject;
 
 /**
@@ -40,7 +40,7 @@
  */
 public class ProtobufProposalProvider extends AbstractProtobufProposalProvider {
 
-  @Inject private EObjectFinder finder;
+  @Inject private ProtobufElementFinder finder;
   @Inject private Globals globals;
   @Inject private PluginImageHelper imageHelper;
   @Inject private Images imageRegistry;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
index 42c6f3c..4b4ee83 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
@@ -21,7 +21,7 @@
 
 import com.google.common.base.Function;
 import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.EObjectFinder;
+import com.google.eclipse.protobuf.util.ProtobufElementFinder;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
@@ -35,7 +35,7 @@
   @Inject private IQualifiedNameConverter converter = new IQualifiedNameConverter.DefaultImpl();
   @Inject private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
 
-  @Inject private EObjectFinder finder;
+  @Inject private ProtobufElementFinder finder;
   
   private Function<EObject, String> resolver = newResolver(String.class, "name");
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
index 4e77ddc..4af752b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -38,7 +38,7 @@
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 import com.google.eclipse.protobuf.protobuf.Type;
 import com.google.eclipse.protobuf.protobuf.TypeReference;
-import com.google.eclipse.protobuf.util.EObjectFinder;
+import com.google.eclipse.protobuf.util.ProtobufElementFinder;
 import com.google.inject.Inject;
 
 /**
@@ -52,7 +52,7 @@
 
   private static final boolean DO_NOT_IGNORE_CASE = false;
 
-  @Inject private EObjectFinder finder;
+  @Inject private ProtobufElementFinder finder;
   @Inject private Globals globals;
   @Inject private IQualifiedNameProvider nameProvider;
   @Inject private ImportUriResolver uriResolver;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/EObjectFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/EObjectFinder.java
deleted file mode 100644
index b5375c2..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/EObjectFinder.java
+++ /dev/null
@@ -1,49 +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.util;
-
-import org.eclipse.emf.ecore.EObject;
-
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.inject.Singleton;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-@Singleton
-public class EObjectFinder {
-
-  public Enum enumTypeOf(Property p) {
-    AbstractTypeReference aTypeRef = (p).getType();
-    if (aTypeRef instanceof TypeReference) {
-      Type type = ((TypeReference) aTypeRef).getType();
-      if (type instanceof Enum) return (Enum) type;
-    }
-    return null;
-  }
-
-  public ScalarType scalarTypeOf(Property p) {
-    AbstractTypeReference aTypeRef = (p).getType();
-    if (aTypeRef instanceof ScalarTypeReference)
-      return ((ScalarTypeReference) aTypeRef).getScalar();
-    return null;
-  }
-
-  public Package packageOf(EObject o) {
-    return rootOf(o).getPackage();
-  }
-  
-  public Protobuf rootOf(EObject o) {
-    EObject current = o;
-    while (!(current instanceof Protobuf)) current = current.eContainer();
-    return (Protobuf) current;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ProtobufElementFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ProtobufElementFinder.java
new file mode 100644
index 0000000..952cdf0
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/ProtobufElementFinder.java
@@ -0,0 +1,72 @@
+/*
+ * 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.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Enum;
+import com.google.eclipse.protobuf.protobuf.Package;
+import com.google.inject.Singleton;
+
+/**
+ * Utility methods to find elements in a parser proto file.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+public class ProtobufElementFinder {
+
+  /**
+   * Returns the enum type of the given property, only if the type of the given property is an enum.
+   * @param p the given property.
+   * @return the enum type of the given property or {@code null} if the type of the given property is not enum.
+   */
+  public Enum enumTypeOf(Property p) {
+    AbstractTypeReference aTypeRef = (p).getType();
+    if (aTypeRef instanceof TypeReference) {
+      Type type = ((TypeReference) aTypeRef).getType();
+      if (type instanceof Enum) return (Enum) type;
+    }
+    return null;
+  }
+
+  /**
+   * Returns the scalar type of the given property, only if the type of the given property is a scalar.
+   * @param p the given property.
+   * @return the scalar type of the given property or {@code null} if the type of the given property is not a scalar.
+   */
+  public ScalarType scalarTypeOf(Property p) {
+    AbstractTypeReference aTypeRef = (p).getType();
+    if (aTypeRef instanceof ScalarTypeReference)
+      return ((ScalarTypeReference) aTypeRef).getScalar();
+    return null;
+  }
+
+  /**
+   * Returns the package of the proto file containing the given object.
+   * @param o the given object.
+   * @return the package of the proto file containing the given object or {@code null} if the proto file does not have a
+   * package.
+   */
+  public Package packageOf(EObject o) {
+    return rootOf(o).getPackage();
+  }
+
+  /**
+   * Returns the root element of the proto file containing the given object.
+   * @param o the given object.
+   * @return the root element of the proto file containing the given object.
+   */
+  public Protobuf rootOf(EObject o) {
+    EObject current = o;
+    while (!(current instanceof Protobuf)) current = current.eContainer();
+    return (Protobuf) current;
+  }
+}