/******************************************************************************* * Copyright (c) 2012 BMW Car IT and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ /* * generated by Xtext */ package org.jnario.suite.ui.contentassist; import static org.jnario.util.Strings.trim; import org.eclipse.emf.ecore.EObject; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.xtext.Assignment; import org.eclipse.xtext.common.types.xtext.ui.TypeMatchFilters; import org.eclipse.xtext.naming.IQualifiedNameConverter; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.scoping.IScope; import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import org.eclipse.xtext.xbase.XbaseQualifiedNameConverter; import org.eclipse.xtext.xbase.annotations.xAnnotations.XAnnotationsPackage; import org.eclipse.xtext.xbase.conversion.XbaseQualifiedNameValueConverter; import org.jnario.suite.suite.SuitePackage; import org.jnario.ui.contentassist.ImportingTypesProposalProvider.FQNImporter; @SuppressWarnings("restriction") public class SuiteProposalProvider extends AbstractSuiteProposalProvider { @Override public void completeXAnnotation_AnnotationType(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { completeJavaTypes(context, XAnnotationsPackage.Literals.XANNOTATION__ANNOTATION_TYPE, TypeMatchFilters.all(IJavaSearchConstants.ANNOTATION_TYPE), acceptor); } @Override public void completeSpecReference_Spec(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { final IScope scope = getScopeProvider().getScope(model, SuitePackage.Literals.SPEC_REFERENCE__SPEC); XbaseQualifiedNameValueConverter qualifiedNameValueConverter = new XbaseQualifiedNameValueConverter(){ @Override public String toString(String value) { int end = value.lastIndexOf('.'); String result = value.substring(1, end) + ".*"; return result; } }; final IQualifiedNameConverter qualifiedNameConverter = new XbaseQualifiedNameConverter(){ @Override public QualifiedName toQualifiedName(String qualifiedNameAsString) { return new QualifiedName(qualifiedNameAsString.split("\\.")){ public String getLastSegment() { return "\"" + super.getLastSegment(); }; }; } }; final FQNImporter fqnImporter = new FQNImporter(context.getResource(), context.getViewer(), scope, qualifiedNameConverter, null, qualifiedNameValueConverter); final ICompletionProposalAcceptor scopeAware = new ICompletionProposalAcceptor.Delegate(acceptor) { @Override public void accept(ICompletionProposal proposal) { if (proposal instanceof ConfigurableCompletionProposal) { ConfigurableCompletionProposal configurableCompletionProposal = (ConfigurableCompletionProposal) proposal; String string = configurableCompletionProposal.getReplacementString(); string = trim(string, '"'); QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(string); IEObjectDescription element = scope.getSingleElement(qualifiedName); if(element == null){ return; } configurableCompletionProposal.setTextApplier(fqnImporter); } super.accept(proposal); } }; super.completeSpecReference_Spec(model, assignment, context, scopeAware); } }