package org.eclipse.jdt.postfixcompletion.core;
import org.eclipse.jdt.internal.ui.text.template.contentassist.TemplateProposal;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContext;
import org.eclipse.swt.graphics.Image;
/**
* This is an extension to the existing {@link TemplateProposal} class.
* <br/>
* The class overrides the methods {@link #getReplaceEndOffset()} and {@link #validate(IDocument, int, DocumentEvent)} to
* allow replacement of existing code input and fixes a bug in the {@link TemplateProposal#validate(IDocument, int, DocumentEvent)} method. The <code>validate(..)</code> method
* in the super implementation should not use {@link #getReplaceEndOffset()} to determine the prefix of the typed in template name.
*/
@SuppressWarnings("restriction")
public class PostfixTemplateProposal extends TemplateProposal {
public PostfixTemplateProposal(Template template, TemplateContext context,
IRegion region, Image image) {
super(template, context, region, image);
}
/*
* (non-Javadoc)
* @see org.eclipse.jdt.internal.ui.text.template.contentassist.TemplateProposal#validate(org.eclipse.jface.text.IDocument, int, org.eclipse.jface.text.DocumentEvent)
*/
@Override
public boolean validate(IDocument document, int offset, DocumentEvent event) {
if (getContext() instanceof JavaStatementPostfixContext) {
JavaStatementPostfixContext c = (JavaStatementPostfixContext) getContext();
try {
int start = c.getStart() + c.getAffectedSourceRegion().getLength() + 1;
String content = document.get(start, offset - start);
return this.getTemplate().getName().toLowerCase().startsWith(content.toLowerCase());
} catch (BadLocationException e) {
e.printStackTrace();
}
}
return super.validate(document, offset, event);
}
}