diff options
author | Ed Merks | 2015-05-28 09:21:05 +0000 |
---|---|---|
committer | Ed Merks | 2015-05-28 09:21:05 +0000 |
commit | 01f4d4dcaf49f62a70bc8272852638adb1dbc206 (patch) | |
tree | 20f0d3d932e056d4076aae486ad3f23b2d0e3b62 | |
parent | de910c3fdbeb4859dc1507f70add0fc55ed3fcac (diff) | |
download | org.eclipse.emf-01f4d4dcaf49f62a70bc8272852638adb1dbc206.tar.gz org.eclipse.emf-01f4d4dcaf49f62a70bc8272852638adb1dbc206.tar.xz org.eclipse.emf-01f4d4dcaf49f62a70bc8272852638adb1dbc206.zip |
2 files changed, 38 insertions, 17 deletions
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 a2453b657..30bad2f90 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 class XcoreProposalProvider extends AbstractXcoreProposalProvider 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 @@ public class XcoreProposalProvider extends AbstractXcoreProposalProvider qualifiedNameConverter, qualifiedNameValueConverter, qualifiedNameValueConverter); - ICompletionProposalAcceptor scopeAware = + ICompletionProposalAcceptor scopeAwareAcceptor = new ICompletionProposalAcceptor.Delegate(acceptor) { @Override @@ -125,7 +137,7 @@ public class XcoreProposalProvider extends AbstractXcoreProposalProvider 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 4a52494d4..f5619cca2 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.EcorePackage; 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 @@ public class XcoreImportedNamespaceAwareScopeProvider extends ImportedNamespaceA 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 @@ public class XcoreImportedNamespaceAwareScopeProvider extends ImportedNamespaceA 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 @@ public class XcoreImportedNamespaceAwareScopeProvider extends ImportedNamespaceA 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 @@ public class XcoreImportedNamespaceAwareScopeProvider extends ImportedNamespaceA } }); EcoreDataTypeAliasingScope aliasingScope = new EcoreDataTypeAliasingScope(globalScope, nameConverter); - List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList(getImportedNamespaceResolvers(context, false)); - Set<String> names = new HashSet<String>(); - for (ImportNormalizer importNormalizer : importedNamespaceResolvers) + + List<ImportNormalizer> importedNamespaceResolvers = Collections.emptyList(); + if (!isImport) { - if (!importNormalizer.hasWildCard()) + importedNamespaceResolvers = Lists.newArrayList(getImportedNamespaceResolvers(EcoreUtil.getRootContainer(context), false)); + Set<String> names = new HashSet<String>(); + for (ImportNormalizer importNormalizer : importedNamespaceResolvers) { - names.add(importNormalizer.getImportedNamespacePrefix().getLastSegment()); + if (!importNormalizer.hasWildCard()) + { + names.add(importNormalizer.getImportedNamespacePrefix().getLastSegment()); + } } - } - - for (String implicitImport : IMPLICIT_IMPORTS) - { - ImportNormalizer importedNamespaceResolver = createImportedNamespaceResolver(implicitImport, false); - if (!names.contains(importedNamespaceResolver.getImportedNamespacePrefix().getLastSegment())) + + for (String implicitImport : IMPLICIT_IMPORTS) { - importedNamespaceResolvers.add(importedNamespaceResolver); + ImportNormalizer importedNamespaceResolver = createImportedNamespaceResolver(implicitImport, false); + if (!names.contains(importedNamespaceResolver.getImportedNamespacePrefix().getLastSegment())) + { + importedNamespaceResolvers.add(importedNamespaceResolver); + } } } |