/* * generated by Xtext */ package com.framsticks.framclipse.ui.contentassist; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import com.framsticks.framclipse.framScript.Proposable; import com.google.common.base.Function; import com.google.inject.Inject; /** * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content * assistant */ public class FramScriptProposalProvider extends AbstractFramScriptProposalProvider { @Inject private DescriptorProvider descripter; @Override protected Function getProposalFactory(String ruleName, ContentAssistContext contentAssistContext) { return new FramScriptProposalCreator(contentAssistContext, ruleName); } protected class FramScriptProposalCreator extends DefaultProposalCreator { private final ContentAssistContext cac; protected FramScriptProposalCreator(ContentAssistContext contentAssistContext, String ruleName) { super(contentAssistContext, ruleName); this.cac = contentAssistContext; } public ICompletionProposal apply(IEObjectDescription candidate) { if (candidate != null && candidate.getEObjectOrProxy() instanceof Proposable) { return createCompletionProposal((Proposable) candidate.getEObjectOrProxy(), cac); } else { return super.apply(candidate); } } } public ICompletionProposal createCompletionProposal(Proposable proposable, ContentAssistContext contentAssistContext) { String proposal = proposable.proposal(); StyledString display = descripter.display(proposable.display()); String description = descripter.description(proposable.description()); Image image = getLabelProvider().getImage(proposable); ConfigurableCompletionProposal p = (ConfigurableCompletionProposal) createCompletionProposal( proposal, display, image, contentAssistContext); if (p != null) { p.setAutoInsertable(true); p.setAdditionalProposalInfo(description); getPriorityHelper().adjustCrossReferencePriority(p, contentAssistContext.getPrefix()); } return p; } }