fix #774 infinite loop in net.sourceforge.phpeclipse.builder.IdentifierIndexManager...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / CodeTemplateContext.java
index e9e4621..07b4032 100644 (file)
@@ -1,10 +1,10 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * 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
  *******************************************************************************/
@@ -14,7 +14,6 @@ import java.util.Iterator;
 
 import net.sourceforge.phpdt.core.ICompilationUnit;
 import net.sourceforge.phpdt.core.IJavaProject;
-import net.sourceforge.phpdt.internal.corext.Assert;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
 import org.eclipse.jface.text.BadLocationException;
@@ -29,14 +28,17 @@ import org.eclipse.jface.text.templates.TemplateTranslator;
 import org.eclipse.jface.text.templates.TemplateVariableResolver;
 
 public class CodeTemplateContext extends TemplateContext {
-       
+
        private String fLineDelimiter;
+
        private IJavaProject fProject;
 
-       public CodeTemplateContext(String contextTypeName, IJavaProject project, String lineDelim) {
-               super(PHPeclipsePlugin.getDefault().getCodeTemplateContextRegistry().getContextType(contextTypeName));
-               fLineDelimiter= lineDelim;
-               fProject= project;
+       public CodeTemplateContext(String contextTypeName, IJavaProject project,
+                       String lineDelim) {
+               super(PHPeclipsePlugin.getDefault().getCodeTemplateContextRegistry()
+                               .getContextType(contextTypeName));
+               fLineDelimiter = lineDelim;
+               fProject = project;
        }
 
        public IJavaProject getJavaProject() {
@@ -46,44 +48,50 @@ public class CodeTemplateContext extends TemplateContext {
        /*
         * @see net.sourceforge.phpdt.internal.corext.template.TemplateContext#evaluate(net.sourceforge.phpdt.internal.corext.template.Template)
         */
-       public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
+       public TemplateBuffer evaluate(Template template)
+                       throws BadLocationException, TemplateException {
                // test that all variables are defined
-               Iterator iterator= getContextType().resolvers();
+               Iterator iterator = getContextType().resolvers();
                while (iterator.hasNext()) {
-                       TemplateVariableResolver var= (TemplateVariableResolver) iterator.next();
+                       TemplateVariableResolver var = (TemplateVariableResolver) iterator
+                                       .next();
                        if (var instanceof CodeTemplateContextType.CodeTemplateVariableResolver) {
-                       //      Assert.isNotNull(getVariable(var.getType()), "Variable " + var.getType() + "not defined"); //$NON-NLS-1$ //$NON-NLS-2$
+                               // Assert.isNotNull(getVariable(var.getType()), "Variable " +
+                               // var.getType() + "not defined"); //$NON-NLS-1$ //$NON-NLS-2$
                        }
                }
 
                if (!canEvaluate(template))
                        return null;
-                       
-               String pattern= changeLineDelimiter(template.getPattern(), fLineDelimiter);
-               
-               TemplateTranslator translator= new TemplateTranslator();
-               TemplateBuffer buffer= translator.translate(pattern);
+
+               String pattern = changeLineDelimiter(template.getPattern(),
+                               fLineDelimiter);
+
+               TemplateTranslator translator = new TemplateTranslator();
+               TemplateBuffer buffer = translator.translate(pattern);
                getContextType().resolve(buffer, this);
 
                return buffer;
        }
-       
+
        private static String changeLineDelimiter(String code, String lineDelim) {
                try {
-                       ILineTracker tracker= new DefaultLineTracker();
+                       ILineTracker tracker = new DefaultLineTracker();
                        tracker.set(code);
-                       int nLines= tracker.getNumberOfLines();
+                       int nLines = tracker.getNumberOfLines();
                        if (nLines == 1) {
                                return code;
                        }
-                       
-                       StringBuffer buf= new StringBuffer();
-                       for (int i= 0; i < nLines; i++) {
+
+                       StringBuffer buf = new StringBuffer();
+                       for (int i = 0; i < nLines; i++) {
                                if (i != 0) {
                                        buf.append(lineDelim);
                                }
                                IRegion region = tracker.getLineInformation(i);
-                               String line= code.substring(region.getOffset(), region.getOffset() + region.getLength());
+                               String line = code.substring(region.getOffset(), region
+                                               .getOffset()
+                                               + region.getLength());
                                buf.append(line);
                        }
                        return buf.toString();
@@ -91,22 +99,27 @@ public class CodeTemplateContext extends TemplateContext {
                        // can not happen
                        return code;
                }
-       }               
+       }
 
-       /* (non-Javadoc)
+       /*
+        * (non-Javadoc)
+        * 
         * @see net.sourceforge.phpdt.internal.corext.template.TemplateContext#canEvaluate(net.sourceforge.phpdt.internal.corext.template.Template)
         */
        public boolean canEvaluate(Template template) {
                return true;
        }
-       
+
        public void setCompilationUnitVariables(ICompilationUnit cu) {
                setVariable(CodeTemplateContextType.FILENAME, cu.getElementName());
-               setVariable(CodeTemplateContextType.PACKAGENAME, cu.getParent().getElementName());
-               setVariable(CodeTemplateContextType.PROJECTNAME, cu.getJavaProject().getElementName());
+               setVariable(CodeTemplateContextType.PACKAGENAME, cu.getParent()
+                               .getElementName());
+               setVariable(CodeTemplateContextType.PROJECTNAME, cu.getJavaProject()
+                               .getElementName());
        }
 
-       public void setFileNameVariable(String filename) {
+       public void setFileNameVariable(String filename, String projectname) {
                setVariable(CodeTemplateContextType.FILENAME, filename);
+               setVariable(CodeTemplateContextType.PROJECTNAME, projectname);
        }
 }