X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/CompilationUnitContextType.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/CompilationUnitContextType.java index aa3f8ad..d19bf3f 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/CompilationUnitContextType.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/CompilationUnitContextType.java @@ -1,36 +1,40 @@ -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ package net.sourceforge.phpdt.internal.corext.template.php; -import net.sourceforge.phpdt.internal.corext.template.ContextType; - import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.templates.TemplateContextType; +import org.eclipse.jface.text.templates.GlobalTemplateVariables; +import org.eclipse.jface.text.templates.TemplateContext; +import org.eclipse.jface.text.templates.TemplateException; +import org.eclipse.jface.text.templates.TemplateVariable; +import org.eclipse.jface.text.templates.TemplateVariableResolver; + +import net.sourceforge.phpdt.core.ICompilationUnit; +import net.sourceforge.phpdt.core.IJavaElement; +import net.sourceforge.phpdt.core.IMethod; +import net.sourceforge.phpdt.core.JavaModelException; +import net.sourceforge.phpdt.core.Signature; + /** * Compilation unit context type. */ -public abstract class CompilationUnitContextType extends ContextType { +public abstract class CompilationUnitContextType extends TemplateContextType { - /** the document */ - protected IDocument fDocument; - - /** the completion position within the document string */ - protected int fOffset; - - /** the completion length */ - protected int fLength; - - /** the associated compilation unit, may be null */ - //protected ICompilationUnit fCompilationUnit; -/* - protected static class ReturnType extends TemplateVariable { + protected static class ReturnType extends TemplateVariableResolver { public ReturnType() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.return.type"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.return.type")); //$NON-NLS-1$ //$NON-NLS-2$ + super("return_type", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.return.type")); //$NON-NLS-1$ //$NON-NLS-2$ } - - public String evaluate(TemplateContext context) { + protected String resolve(TemplateContext context) { IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD); if (element == null) return null; @@ -41,73 +45,112 @@ public abstract class CompilationUnitContextType extends ContextType { return null; } } - - public boolean isResolved(TemplateContext context) { - return evaluate(context) != null; - } } - protected static class File extends TemplateVariable { + protected static class File extends TemplateVariableResolver { public File() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.file"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.file")); //$NON-NLS-1$ //$NON-NLS-2$ + super("file", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.file")); //$NON-NLS-1$ //$NON-NLS-2$ } - public String evaluate(TemplateContext context) { + protected String resolve(TemplateContext context) { ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit(); return (unit == null) ? null : unit.getElementName(); - return null; } - public boolean isResolved(TemplateContext context) { - return evaluate(context) != null; - } + + /* + * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext) + */ + protected boolean isUnambiguous(TemplateContext context) { + return resolve(context) != null; + } + } + + protected static class PrimaryTypeName extends TemplateVariableResolver { + public PrimaryTypeName() { + super("primary_type_name", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.primary.type.name")); //$NON-NLS-1$ //$NON-NLS-2$ + + } + protected String resolve(TemplateContext context) { + ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit(); + if (unit == null) + return null; + String elementName= unit.getElementName(); + return elementName.substring(0, elementName.lastIndexOf('.')); + } + + /* + * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext) + */ + protected boolean isUnambiguous(TemplateContext context) { + return resolve(context) != null; + } } - protected static class EnclosingJavaElement extends TemplateVariable { + protected static class EnclosingJavaElement extends TemplateVariableResolver { protected final int fElementType; public EnclosingJavaElement(String name, String description, int elementType) { super(name, description); fElementType= elementType; } - public String evaluate(TemplateContext context) { + protected String resolve(TemplateContext context) { IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(fElementType); return (element == null) ? null : element.getElementName(); } - public boolean isResolved(TemplateContext context) { - return evaluate(context) != null; + + /* + * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext) + */ + protected boolean isUnambiguous(TemplateContext context) { + return resolve(context) != null; } } protected static class Method extends EnclosingJavaElement { public Method() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.enclosing.method"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.method"), IJavaElement.METHOD); //$NON-NLS-1$ //$NON-NLS-2$ + super("enclosing_method", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.method"), IJavaElement.METHOD); //$NON-NLS-1$ //$NON-NLS-2$ } } protected static class Type extends EnclosingJavaElement { public Type() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.enclosing.type"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.type"), IJavaElement.TYPE); //$NON-NLS-1$ //$NON-NLS-2$ + super("enclosing_type", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.type"), IJavaElement.TYPE); //$NON-NLS-1$ //$NON-NLS-2$ } } - +/* + protected static class SuperClass extends EnclosingJavaElement { + public Type() { + super("super_class", TemplateMessages.getString("JavaContextType.variable.description.type"), IJavaElement.TYPE); + } + } +*/ protected static class Package extends EnclosingJavaElement { public Package() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.enclosing.package"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.package"), IJavaElement.PACKAGE_FRAGMENT); //$NON-NLS-1$ //$NON-NLS-2$ + super("enclosing_package", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.package"), IJavaElement.PACKAGE_FRAGMENT); //$NON-NLS-1$ //$NON-NLS-2$ } } protected static class Project extends EnclosingJavaElement { public Project() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.enclosing.project"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.project"), IJavaElement.JAVA_PROJECT); //$NON-NLS-1$ //$NON-NLS-2$ + super("enclosing_project", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.project"), IJavaElement.JAVA_PROJECT); //$NON-NLS-1$ //$NON-NLS-2$ } } - - - protected static class Arguments extends TemplateVariable { - public Arguments() { - super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.enclosing.method.arguments"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.method.arguments")); //$NON-NLS-1$ //$NON-NLS-2$ +/* + protected static class Project2 extends TemplateVariableResolver { + public Project2() { + super("project", TemplateMessages.getString("JavaContextType.variable.description.project")); } public String evaluate(TemplateContext context) { + ICompilationUnit unit= ((JavaContext) context).getUnit(); + return (unit == null) ? null : unit.getJavaProject().getElementName(); + } + } +*/ + protected static class Arguments extends TemplateVariableResolver { + public Arguments() { + super("enclosing_method_arguments", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.method.arguments")); //$NON-NLS-1$ //$NON-NLS-2$ + } + protected String resolve(TemplateContext context) { IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD); if (element == null) return null; @@ -131,7 +174,17 @@ public abstract class CompilationUnitContextType extends ContextType { } } } -*/ + +/* + protected static class Line extends TemplateVariableResolver { + public Line() { + super("line", TemplateMessages.getString("CompilationUnitContextType.variable.description.line")); + } + public String evaluate(TemplateContext context) { + return ((JavaTemplateContext) context).guessLineNumber(); + } + } +*/ /* * @see ContextType#ContextType(String) @@ -140,14 +193,22 @@ public abstract class CompilationUnitContextType extends ContextType { super(name); } - /** - * Sets context parameters. Needs to be called before createContext(). + public abstract CompilationUnitContext createContext(IDocument document, int completionPosition, int length, ICompilationUnit compilationUnit); + + + /* (non-Javadoc) + * @see net.sourceforge.phpdt.internal.corext.template.ContextType#validateVariables(net.sourceforge.phpdt.internal.corext.template.TemplateVariable[]) */ - public void setContextParameters(IDocument document, int position, int length) {//, ICompilationUnit compilationUnit) { - fDocument= document; - fOffset= position; - fLength= length; -// fCompilationUnit= compilationUnit; + protected void validateVariables(TemplateVariable[] variables) throws TemplateException { + // check for multiple cursor variables + for (int i= 0; i < variables.length; i++) { + TemplateVariable var= variables[i]; + if (var.getType().equals(GlobalTemplateVariables.Cursor.NAME)) { + if (var.getOffsets().length > 1) { + throw new TemplateException(JavaTemplateMessages.getString("ContextType.error.multiple.cursor.variables")); //$NON-NLS-1$ + } + } + } } }