Fixed: [Issue 21] ProtobufQualifiedNameProvider assumes package names do not contain dots.
http://code.google.com/p/protobuf-dt/issues/detail?id=21

We split package names into segments and verify that the qualified name contains all the segments of the package name.
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 2019edc..5e77a2f 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
@@ -28,14 +28,32 @@
 
   /** {@inheritDoc} */
   @Override public QualifiedName getFullyQualifiedName(EObject obj) {
-    QualifiedName fqn = super.getFullyQualifiedName(obj);
-    if (fqn == null || obj instanceof Package) return fqn;
+    QualifiedName qualifiedName = super.getFullyQualifiedName(obj);
+    if (qualifiedName == null || obj instanceof Package) return qualifiedName;
     Package p = finder.findPackage(obj);
-    if (p == null) return fqn;
-    List<String> segments = new ArrayList<String>(fqn.getSegments());
+    if (p == null) return qualifiedName;
+    List<String> newQualifiedNameSegments = new ArrayList<String>();
+    List<String> qualifiedNameSegments = qualifiedName.getSegments();
     String packageName = p.getName();
-    if (packageName != null && !segments.isEmpty() && !packageName.equals(segments.get(0))) 
-      segments.add(0, packageName);
-    return QualifiedName.create(segments.toArray(new String[segments.size()]));
+    if (packageName != null) {
+      String[] packageNameSegments = packageName.split("\\.");
+      if (!qualifiedNameContainsPackageName(qualifiedNameSegments, packageNameSegments)) {
+        // add package to the new FQN
+        for (String packageSegment : packageNameSegments) newQualifiedNameSegments.add(packageSegment);
+      }
+    }
+    newQualifiedNameSegments.addAll(qualifiedNameSegments);
+    return QualifiedName.create(newQualifiedNameSegments.toArray(new String[newQualifiedNameSegments.size()]));
+  }
+
+  private boolean qualifiedNameContainsPackageName(List<String> qualifiedNameSegments, String[] packageNameSegments) {
+    int fqnLength = qualifiedNameSegments.size();
+    int packageSegmentCount = packageNameSegments.length;
+    if (fqnLength <= packageSegmentCount) return false;
+    for (int i = 0; i < fqnLength; i++) {
+      if (i == packageSegmentCount) break;
+      if (!qualifiedNameSegments.get(i).equals(packageNameSegments[i])) return false;
+    }
+    return true;
   }
 }