Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2008 itemis AG (http://www.itemis.eu) 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 /
  
  package org.eclipse.xtext.ui.editor.templates;
 
 import static org.eclipse.xtext.ui.editor.XtextSourceViewerConfiguration.*;
 
 import  org.eclipse.jface.text.BadLocationException;
 import  org.eclipse.jface.text.IDocument;
 import  org.eclipse.jface.text.Position;
 import  org.eclipse.jface.text.templates.Template;
 import  org.eclipse.jface.text.templates.TemplateContext;
 import  org.eclipse.jface.text.templates.TemplateContextType;
 import  org.eclipse.jface.text.templates.TemplateException;
 import  org.eclipse.jface.text.templates.TemplateProposal;
 import  org.eclipse.swt.graphics.Image;
 
Provides an abstract implementation of interface ITemplateProposalProvider.

Author(s):
Michael Clay - Initial contribution and API
Sebastian Zarnekow - Initial contribution and API
 
 public abstract class AbstractTemplateProposalProvider implements ITemplateProposalProvider {
 	
 	private static final Logger log = Logger.getLogger(AbstractTemplateProposalProvider.class);
 	
 	
 	
 	public void setScopeProvider(IScopeProvider scopeProvider) {
 		this. = scopeProvider;
 	}

Since:
2.7
 
 		return ;
 	}
 	
 	public static class NullSafeTemplateAcceptor extends ITemplateAcceptor.Delegate {
 		
 			super();
 			setDelegate(delegate);
 		}
 		
 		public void accept(TemplateProposal template) {
 			if (template != null)
 				super.accept(template);
 		}
 	}
 	
 	public void createTemplates(ContentAssistContext contextITemplateAcceptor acceptor) {
 		if (!acceptor.canAcceptMoreTemplates())
 			return;
 		TemplateContext[] templateContexts = createTemplateContexts(context);
 		if (templateContexts == null || templateContexts.length == 0)
 			return;
 
 		ITemplateAcceptor nullSafe = new NullSafeTemplateAcceptor(acceptor);
 		for(TemplateContext templateContexttemplateContexts) {
 			if (!nullSafe.canAcceptMoreTemplates())
 				return;
 			templateContext.setVariable("selection"context.getSelectedText()); // name of the selection variables {line, word}_selection //$NON-NLS-1$
 			createTemplates(templateContextcontextnullSafe);
 		}
 	}
 	
 	protected abstract void createTemplates(TemplateContext templateContextContentAssistContext contextITemplateAcceptor acceptor);
 	
 	protected TemplateProposal createProposal(Template template, TemplateContext templateContext,
 			ContentAssistContext context, Image imageint relevance) {
 		if (!validate(templatecontext))
 			return null;
 		return doCreateProposal(templatetemplateContextcontextimagerelevance);
 	}
 
 	protected TemplateProposal doCreateProposal(Template template, TemplateContext templateContext,
 			ContentAssistContext context, Image imageint relevance) {
		return new XtextTemplateProposal(templatetemplateContextcontext.getReplaceRegion(), imagerelevance);
	}
	protected boolean validate(Template templateContentAssistContext context) {
		boolean result = context.getMatcher().isCandidateMatchingPrefix(template.getName(), context.getPrefix());
		if (result) {
			try {
				String pattern = template.getPattern();
				if (.existsConflict(patterncontext)) {
					result = false;
				}
catch(Exception e) {
				result = false;
			}
		}
		return result;
	}
	protected boolean validate(Template template, TemplateContext context) {
		try {
			context.getContextType().validate(template.getPattern());
catch (TemplateException e) {
			return false;
		}
		if (context instanceof XtextTemplateContext) {
			try {
				//pre-fill context state and check. 
				return context.canEvaluate(template);
catch (BadLocationException e) {
				return false;
catch (TemplateException e) {
				return false;
			}
		}
		return true;
	}
	protected TemplateContext[] createTemplateContexts(ContentAssistContext context) {
		TemplateContextType[] contextTypes = getContextTypes(context);
		if (contextTypes != null && contextTypes.length != 0) {
			TemplateContext[] result = new TemplateContext[contextTypes.length];
			for(int i = 0; i < contextTypes.length; i++) {
				result[i] = doCreateTemplateContext(contextTypes[i], context);
			}
			return result;
		}
		return null;
	}
	protected TemplateContext doCreateTemplateContext(TemplateContextType contextTypeContentAssistContext context) {
		return new XtextTemplateContext(contextTypecontext.getDocument(),
				contextgetScopeProvider());
	}

Positions created for template contexts have to be added to the document so they are updated when the document is modified.

Since:
2.8
	protected Position createPosition(ContentAssistContext context) {
		Position position = new Position(context.getReplaceRegion().getOffset(), context.getReplaceRegion().getLength());
		IDocument document = context.getDocument();
		if (document.containsPositionCategory()) {
			try {
				document.addPosition(position);
catch (Exception e) {
			}
		}
		return position;
	}
	protected abstract TemplateContextType[] getContextTypes(ContentAssistContext context);
New to GrepCode? Check out our FAQ X