1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / CompilationUnitContextType.java
index aa3f8ad..085d382 100644 (file)
@@ -1,37 +1,43 @@
-/*
- * (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 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;
 
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.templates.GlobalTemplateVariables;
+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.TemplateVariable;
+import org.eclipse.jface.text.templates.TemplateVariableResolver;
 
 /**
  * Compilation unit context type.
  */
-public abstract class CompilationUnitContextType extends ContextType {
-       
-       /** 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 <code>null</code> */
-       //protected ICompilationUnit fCompilationUnit;
-/*
-       protected static class ReturnType extends TemplateVariable {
-               public ReturnType() {
-                       super(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.return.type"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.return.type")); //$NON-NLS-1$ //$NON-NLS-2$
-               }
-    
-               public String evaluate(TemplateContext context) {
-                       IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD);
+public abstract class CompilationUnitContextType extends TemplateContextType {
+
+       protected static class ReturnType extends TemplateVariableResolver {
+               public ReturnType() {
+                       super(
+                                       "return_type", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.return.type")); //$NON-NLS-1$ //$NON-NLS-2$
+               }
+
+               protected String resolve(TemplateContext context) {
+                       IJavaElement element = ((CompilationUnitContext) context)
+                                       .findEnclosingElement(IJavaElement.METHOD);
                        if (element == null)
                                return null;
 
@@ -41,89 +47,143 @@ 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) {
-                       ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit();
-                       
+
+               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 EnclosingJavaElement extends TemplateVariable {
+       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
+                       TemplateVariableResolver {
                protected final int fElementType;
-               
-               public EnclosingJavaElement(String name, String description, int elementType) {
+
+               public EnclosingJavaElement(String name, String description,
+                               int elementType) {
                        super(name, description);
-                       fElementType= elementType;
+                       fElementType = elementType;
                }
-               public String evaluate(TemplateContext context) {
-                       IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(fElementType);
-                       return (element == null) ? null : element.getElementName();                     
+
+               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 {
+       /*
+        * 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(JavaTemplateMessages.getString("CompilationUnitContextType.variable.name.enclosing.method.arguments"), JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.method.arguments")); //$NON-NLS-1$ //$NON-NLS-2$
+                       super(
+                                       "enclosing_method_arguments", JavaTemplateMessages.getString("CompilationUnitContextType.variable.description.enclosing.method.arguments")); //$NON-NLS-1$ //$NON-NLS-2$
                }
-               public String evaluate(TemplateContext context) {
-                       IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD);
+
+               protected String resolve(TemplateContext context) {
+                       IJavaElement element = ((CompilationUnitContext) context)
+                                       .findEnclosingElement(IJavaElement.METHOD);
                        if (element == null)
                                return null;
-                               
-                       IMethod method= (IMethod) element;
-                       
+
+                       IMethod method = (IMethod) element;
+
                        try {
-                               String[] arguments= method.getParameterNames();
-                               StringBuffer buffer= new StringBuffer();
-                               
-                               for (int i= 0; i < arguments.length; i++) {
+                               String[] arguments = method.getParameterNames();
+                               StringBuffer buffer = new StringBuffer();
+
+                               for (int i = 0; i < arguments.length; i++) {
                                        if (i > 0)
                                                buffer.append(", "); //$NON-NLS-1$
-                                       buffer.append(arguments[i]);                            
+                                       buffer.append(arguments[i]);
                                }
-                               
+
                                return buffer.toString();
 
                        } catch (JavaModelException e) {
@@ -131,23 +191,43 @@ 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)
         */
        public CompilationUnitContextType(String name) {
-               super(name);    
+               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$
+                               }
+                       }
+               }
        }
 
 }