[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);
+ }
}
}