package org.codehaus.groovy.eclipse.quickfix.templates; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.codehaus.groovy.eclipse.quickfix.GroovyQuickFixPlugin; import org.codehaus.jdt.groovy.model.GroovyCompilationUnit; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.internal.corext.template.java.JavaContext; import org.eclipse.jdt.internal.ui.text.template.contentassist.TemplateProposal; import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer; import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.templates.ContextTypeRegistry; import org.eclipse.jface.text.templates.Template; import org.eclipse.jface.text.templates.TemplateContextType; import org.eclipse.jface.text.templates.persistence.TemplateStore; public class TemplateProposalComputer implements IJavaCompletionProposalComputer { private static final int EMPTY_PREFIX_TEMPLATE_RELEVANCE = 20; public void sessionStarted() { } public List<ICompletionProposal> computeCompletionProposals( ContentAssistInvocationContext context, IProgressMonitor monitor) { try { if (!(context instanceof JavaContentAssistInvocationContext)) { return Collections.emptyList(); } JavaContentAssistInvocationContext javaContext = (JavaContentAssistInvocationContext) context; if (!(javaContext.getCompilationUnit() instanceof GroovyCompilationUnit)) { return Collections.emptyList(); } TemplateStore codeTemplates = GroovyQuickFixPlugin.getDefault().getTemplateStore(); List<ICompletionProposal> templates = new ArrayList<ICompletionProposal>(); Region region = new Region(javaContext.getInvocationOffset(), 0); ContextTypeRegistry templateContextRegistry= GroovyQuickFixPlugin.getDefault().getTemplateContextRegistry(); TemplateContextType contextType= templateContextRegistry.getContextType(GroovyQuickFixPlugin.GROOVY_CONTEXT_TYPE); IDocument document = javaContext.getDocument(); JavaContext templateContext = new GroovyContext(contextType, document, context.getInvocationOffset(), 0, javaContext.getCompilationUnit()); String prefix = String.valueOf(context.computeIdentifierPrefix()); templateContext.setForceEvaluation(true); templateContext.setVariable("selection", document.get(region.getOffset(), region.getLength())); for (Template template : codeTemplates.getTemplates()) { if (isApplicable(template, prefix)) { TemplateProposal templateProposal = new TemplateProposal(template, templateContext, region, null); if (prefix.length() == 0) { templateProposal.setRelevance(EMPTY_PREFIX_TEMPLATE_RELEVANCE); } templates.add(templateProposal); } } return templates; } catch (BadLocationException e) { GroovyQuickFixPlugin.log(e); return Collections.emptyList(); } } private boolean isApplicable(Template template, String prefix) { return template.getName().startsWith(prefix); } public List<IContextInformation> computeContextInformation( ContentAssistInvocationContext context, IProgressMonitor monitor) { return Collections.emptyList(); } public String getErrorMessage() { return null; } public void sessionEnded() { } }