Fixed: [ Issue 24 ] 	Fix qualified names
https://code.google.com/p/protobuf-dt/issues/detail?id=24

Fixed for real.
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 3281bed..4e77ddc 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
@@ -8,16 +8,19 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static org.eclipse.emf.common.util.URI.createFileURI;
+import static org.eclipse.emf.common.util.URI.createURI;
+import static org.eclipse.emf.ecore.util.EcoreUtil.getAllContents;
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
 import static org.eclipse.xtext.resource.EObjectDescription.create;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.xtext.naming.IQualifiedNameProvider;
 import org.eclipse.xtext.resource.IEObjectDescription;
@@ -57,22 +60,39 @@
   @SuppressWarnings("unused")
   IScope scope_TypeReference_type(TypeReference typeRef, EReference reference) {
     Protobuf root = finder.rootOf(typeRef);
-    resolveImports(root);
     List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
     for (Type type : getAllContentsOfType(root, Type.class)) {
-      descriptions.add(create(nameProvider.getFullyQualifiedName(type), type));
+      descriptions.add(describeUsingQualifiedName(type));
       descriptions.add(create(type.getName(), type));
     }
+    descriptions.addAll(importedTypes(root));
     return createScope(descriptions);
   }
 
-  private void resolveImports(Protobuf root) {
-    EList<Import> imports = root.getImports();
+  private List<IEObjectDescription> importedTypes(Protobuf root) {
     ResourceSet resourceSet = root.eResource().getResourceSet();
-    for (Import imp : imports) {
-      String importURI = uriResolver.apply(imp);
-      resourceSet.getResource(createFileURI(importURI), true);
+    List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
+    for (Import anImport : root.getImports()) {
+      URI importUri = createURI(uriResolver.apply(anImport));
+      Resource imported = resourceSet.getResource(importUri, true);
+      descriptions.addAll(describeTypesUsingQualifiedNames(imported));
     }
+    return descriptions;
+  }
+
+  private List<IEObjectDescription> describeTypesUsingQualifiedNames(Resource resource) {
+    List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
+    TreeIterator<Object> contents = getAllContents(resource, true);
+    while (contents.hasNext()) {
+      Object next = contents.next();
+      if (!(next instanceof Type)) continue;
+      descriptions.add(describeUsingQualifiedName((Type) next));
+    }
+    return descriptions;
+  }
+  
+  private IEObjectDescription describeUsingQualifiedName(Type type) {
+    return create(nameProvider.getFullyQualifiedName(type), type);
   }
   
   @SuppressWarnings("unused")
@@ -80,21 +100,21 @@
     EObject container = literalRef.eContainer();
     if (container instanceof Property) {
       Enum enumType = finder.enumTypeOf((Property) container);
-      if (enumType != null) return scopeForLiteralsIn(enumType);
+      if (enumType != null) return scopeForLiterals(enumType);
     }
     if (container instanceof Option && globals.isOptimizeForOption((Option) container)) {
       Enum optimizedMode = globals.optimizedMode();
-      return scopeForLiteralsIn(optimizedMode);
+      return scopeForLiterals(optimizedMode);
     }
     return null;
   }
 
-  private static IScope scopeForLiteralsIn(Enum enumType) {
-    List<IEObjectDescription> descriptions = literalDescriptions(enumType);
+  private static IScope scopeForLiterals(Enum enumType) {
+    List<IEObjectDescription> descriptions = describeLiterals(enumType);
     return createScope(descriptions);
   }
 
-  private static List<IEObjectDescription> literalDescriptions(Enum enumType) {
+  private static List<IEObjectDescription> describeLiterals(Enum enumType) {
     List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
     for (Literal literal : enumType.getLiterals())
       descriptions.add(create(literal.getName(), literal));