Syntax highlighting is changeable.
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / CompilationUnitContextType.java
index aa3f8ad..d19bf3f 100644 (file)
@@ -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 <code>null</code> */
-       //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$
+                               }
+                       }
+               }
        }
 
 }