/* * (c) Copyright IBM Corp. 2000, 2001. * All Rights Reserved. */ package net.sourceforge.phpdt.internal.corext.template.java; import net.sourceforge.phpdt.internal.corext.template.ContextType; import net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext; import net.sourceforge.phpdt.internal.corext.template.Template; import net.sourceforge.phpdt.internal.corext.template.TemplateBuffer; import net.sourceforge.phpdt.internal.corext.template.TemplateTranslator; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; /** * A compilation unit context. */ public class CompilationUnitContext extends DocumentTemplateContext { /** The platform default line delimiter. */ private static final String PLATFORM_LINE_DELIMITER= System.getProperty("line.separator"); //$NON-NLS-1$ /** The compilation unit, may be null. */ // private final ICompilationUnit fCompilationUnit; /** * Creates a compilation unit context. * * @param type the context type. * @param document the document. * @param completionPosition the completion position within the document. * @param compilationUnit the compilation unit (may be null). */ protected CompilationUnitContext(ContextType type, IDocument document, int completionPosition) //,ICompilationUnit compilationUnit) { super(type, document, completionPosition); // fCompilationUnit= compilationUnit; } /* * @see TemplateContext#canEvaluate(Template templates) */ public boolean canEvaluate(Template template) { // return fForceEvaluation || return template.matches(getKey(), getContextType().getName()); } /** * Returns true if template matches the prefix and context, * false otherwise. */ public boolean canEvaluate(String identifier) { String prefix = getKey(); return // fEnabled && // fContextTypeName.equals(contextTypeName) && (prefix.length() != 0) && identifier.toLowerCase().startsWith(prefix.toLowerCase()); } /* * @see TemplateContext#evaluate(Template template) */ public TemplateBuffer evaluate(Template template) throws CoreException { if (!canEvaluate(template)) return null; TemplateTranslator translator= new TemplateTranslator(); TemplateBuffer buffer= translator.translate(template.getPattern()); getContextType().edit(buffer, this); String lineDelimiter= null; try { lineDelimiter= getDocument().getLineDelimiter(0); } catch (BadLocationException e) { } if (lineDelimiter == null) lineDelimiter= PLATFORM_LINE_DELIMITER; // ITemplateEditor formatter= new JavaFormatter(lineDelimiter); // formatter.edit(buffer, this); return buffer; } /* * @see DocumentTemplateContext#getCompletionPosition(); */ public int getStart() { IDocument document= getDocument(); try { int start= getCompletionPosition(); while ( ((start != 0) && Character.isUnicodeIdentifierPart(document.getChar(start - 1))) || ((start != 0) && document.getChar(start - 1)=='$') ) { start--; } if ( ((start != 0) && Character.isUnicodeIdentifierStart(document.getChar(start - 1))) || ((start != 0) && document.getChar(start - 1)=='$')) { start--; } return start; } catch (BadLocationException e) { return getCompletionPosition(); } } /** * Returns the character before start position of completion. */ public char getCharacterBeforeStart() { int start= getStart(); try { return start == 0 ? ' ' : getDocument().getChar(start - 1); } catch (BadLocationException e) { return ' '; } } /** * Returns the compilation unit if one is associated with this context, null otherwise. */ // public final ICompilationUnit getCompilationUnit() { // return fCompilationUnit; // } /** * Returns the enclosing element of a particular element type, null * if no enclosing element of that type exists. */ // public IJavaElement findEnclosingElement(int elementType) { // if (fCompilationUnit == null) // return null; // // try { // IJavaElement element= fCompilationUnit.getElementAt(getStart()); // while (element != null && element.getElementType() != elementType) // element= element.getParent(); // // return element; // // } catch (JavaModelException e) { // return null; // } // } }