[468579] Couldn't resolve reference to GenBase 'EDiagnositicChain'
diff --git a/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java b/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java
index a2453b6..30bad2f 100644
--- a/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java
+++ b/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java
@@ -104,6 +104,18 @@
   public void completeXGenericType_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor)
   {
     IScope scope = xcoreScopeProvider.getScope(model, XcorePackage.Literals.XGENERIC_TYPE__TYPE);
+    super.completeXGenericType_Type(model, assignment, context, getImportingProposalAcceptor(scope, context, acceptor));
+  }
+
+  @Override
+  public void completeXAnnotation_Source(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor)
+  {
+    IScope scope = xcoreScopeProvider.getScope(model, XcorePackage.Literals.XANNOTATION__SOURCE);
+    super.completeXAnnotation_Source(model, assignment, context, getImportingProposalAcceptor(scope, context, acceptor));
+  }
+
+  private ICompletionProposalAcceptor getImportingProposalAcceptor(IScope scope, ContentAssistContext context, ICompletionProposalAcceptor acceptor)
+  {
     final IReplacementTextApplier textApplier =
       new ImportingTypesProposalProvider.FQNImporter
         (context.getResource(),
@@ -112,7 +124,7 @@
          qualifiedNameConverter,
          qualifiedNameValueConverter,
          qualifiedNameValueConverter);
-    ICompletionProposalAcceptor scopeAware =
+    ICompletionProposalAcceptor scopeAwareAcceptor =
       new ICompletionProposalAcceptor.Delegate(acceptor)
       {
         @Override
@@ -125,7 +137,7 @@
           super.accept(proposal);
         }
       };
-    super.completeXGenericType_Type(model, assignment, context, scopeAware);
+    return scopeAwareAcceptor;
   }
 
   @Override
diff --git a/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java b/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java
index 4a52494..f5619cc 100644
--- a/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java
+++ b/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java
@@ -32,6 +32,7 @@
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.xcore.XAnnotationDirective;
 import org.eclipse.emf.ecore.xcore.XClass;
 import org.eclipse.emf.ecore.xcore.XImportDirective;
@@ -181,7 +182,8 @@
 
   private IScope getAnnotationScope(final EObject context)
   {
-    String cacheKey = (context instanceof XImportDirective) ? "import.annotation.scope" : "annotation.scope";
+    final boolean isImport = context instanceof XImportDirective;
+    String cacheKey = isImport ? "import.annotation.scope" : "annotation.scope";
     final Resource resource = context.eResource();
     return cache.get(cacheKey, resource, new Provider<IScope>()
     {
@@ -190,7 +192,8 @@
         IScope globalScope = getGlobalScope(resource, XcorePackage.Literals.XANNOTATION__SOURCE);
         ImportNormalizer xcoreLang = new ImportNormalizer(nameConverter.toQualifiedName("xcore.lang"), true, false);
         ImportScope xcoreLangScope = createImportScope(globalScope, singletonList(xcoreLang), null, XcorePackage.Literals.XANNOTATION_DIRECTIVE, false);
-        ImportScope importScope = createImportScope(xcoreLangScope, getImportedNamespaceResolvers(context, false), null, XcorePackage.Literals.XANNOTATION_DIRECTIVE, false);
+        List<ImportNormalizer> importedNamespaceResolvers = isImport ? Collections.<ImportNormalizer>emptyList() : getImportedNamespaceResolvers(EcoreUtil.getRootContainer(context), false);
+        ImportScope importScope = createImportScope(xcoreLangScope, importedNamespaceResolvers, null, XcorePackage.Literals.XANNOTATION_DIRECTIVE, false);
         IScope resourceScope = getLocalAnnotationsScope(resource, importScope);
         return new CachingScope(resourceScope);
       }
@@ -199,7 +202,8 @@
 
   private IScope getClassifierScope(final EObject context)
   {
-    String cacheKey = (context instanceof XImportDirective) ? "import.classifier.scope" : "classifier.scope";
+    final boolean isImport = context instanceof XImportDirective;
+    String cacheKey = isImport ? "import.classifier.scope" : "classifier.scope";
     final Resource resource = context.eResource();
     return cache.get(cacheKey, resource, new Provider<IScope>()
     {
@@ -214,22 +218,27 @@
           }
         });
         EcoreDataTypeAliasingScope aliasingScope = new EcoreDataTypeAliasingScope(globalScope, nameConverter);
-        List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList(getImportedNamespaceResolvers(context, false));
-        Set<String> names = new HashSet<String>();
-        for (ImportNormalizer importNormalizer : importedNamespaceResolvers)
-        {
-          if (!importNormalizer.hasWildCard())
-          {
-            names.add(importNormalizer.getImportedNamespacePrefix().getLastSegment());
-          }
-        }
 
-        for (String implicitImport : IMPLICIT_IMPORTS)
+        List<ImportNormalizer> importedNamespaceResolvers = Collections.emptyList();
+        if (!isImport)
         {
-          ImportNormalizer importedNamespaceResolver = createImportedNamespaceResolver(implicitImport, false);
-          if (!names.contains(importedNamespaceResolver.getImportedNamespacePrefix().getLastSegment()))
+          importedNamespaceResolvers = Lists.newArrayList(getImportedNamespaceResolvers(EcoreUtil.getRootContainer(context), false));
+          Set<String> names = new HashSet<String>();
+          for (ImportNormalizer importNormalizer : importedNamespaceResolvers)
           {
-            importedNamespaceResolvers.add(importedNamespaceResolver);
+            if (!importNormalizer.hasWildCard())
+            {
+              names.add(importNormalizer.getImportedNamespacePrefix().getLastSegment());
+            }
+          }
+  
+          for (String implicitImport : IMPLICIT_IMPORTS)
+          {
+            ImportNormalizer importedNamespaceResolver = createImportedNamespaceResolver(implicitImport, false);
+            if (!names.contains(importedNamespaceResolver.getImportedNamespacePrefix().getLastSegment()))
+            {
+              importedNamespaceResolvers.add(importedNamespaceResolver);
+            }
           }
         }