/******************************************************************************* * Copyright (c) 2000, orporation 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 * Sebastian Davids: sdavids@gmx.de - see bug 25376 *******************************************************************************/ package net.sourceforge.phpdt.internal.corext.template.php; import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IJavaProject; import net.sourceforge.phpdt.internal.corext.codemanipulation.StubUtility; 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.TemplateVariableResolver; /** * A context type for java code. */ public class JavaContextType extends CompilationUnitContextType { public static final String NAME = "php"; //$NON-NLS-1$ // protected static class Array extends TemplateVariableResolver { // public Array() { // super("array", // TemplateMessages.getString("JavaContextType.variable.description.array")); // //$NON-NLS-1$ //$NON-NLS-2$ // } // protected String[] resolveAll(TemplateContext context) { // return ((JavaContext) context).guessArrays(); // } // /* // * @see // org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, // org.eclipse.jface.text.templates.TemplateContext) // */ // public void resolve(TemplateVariable variable, TemplateContext context) { // if (variable instanceof MultiVariable) { // JavaContext jc= (JavaContext) context; // MultiVariable mv= (MultiVariable) variable; // String[] bindings= resolveAll(context); // if (bindings.length > 0) { // mv.setValues(bindings); // MultiVariableGuess guess= jc.getMultiVariableGuess(); // if (guess == null) { // guess= new MultiVariableGuess(mv); // jc.setMultiVariableGuess(guess); // } // } // if (bindings.length > 1) // variable.setUnambiguous(false); // else // variable.setUnambiguous(isUnambiguous(context)); // } else // super.resolve(variable, context); // } // } // // protected static class ArrayType extends TemplateVariableResolver { // public ArrayType() { // super("array_type", // TemplateMessages.getString("JavaContextType.variable.description.array.type")); // //$NON-NLS-1$ //$NON-NLS-2$ // } // protected String[] resolveAll(TemplateContext context) { // // String[] arrayTypes= ((JavaContext) context).guessArrayTypes(); // if (arrayTypes != null) // return arrayTypes; // else // return super.resolveAll(context); // } // // /* // * @see // org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, // org.eclipse.jface.text.templates.TemplateContext) // */ // public void resolve(TemplateVariable variable, TemplateContext context) { // if (variable instanceof MultiVariable) { // MultiVariable mv= (MultiVariable) variable; // String[] arrays= ((JavaContext) context).guessArrays(); // String[][] types= ((JavaContext) context).guessGroupedArrayTypes(); // // for (int i= 0; i < arrays.length; i++) { // mv.setValues(arrays[i], types[i]); // } // // if (arrays.length > 1 || types.length == 1 && types[0].length > 1) // variable.setUnambiguous(false); // else // variable.setUnambiguous(isUnambiguous(context)); // // } else // super.resolve(variable, context); // } // } // // protected static class ArrayElement extends TemplateVariableResolver { // public ArrayElement() { // super("array_element", // TemplateMessages.getString("JavaContextType.variable.description.array.element")); // //$NON-NLS-1$ //$NON-NLS-2$ // } // protected String[] resolveAll(TemplateContext context) { // return ((JavaContext) context).guessArrayElements(); // } // // /* // * @see // org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, // org.eclipse.jface.text.templates.TemplateContext) // */ // public void resolve(TemplateVariable variable, TemplateContext context) { // if (variable instanceof MultiVariable) { // MultiVariable mv= (MultiVariable) variable; // String[] arrays= ((JavaContext) context).guessArrays(); // String[][] elems= ((JavaContext) context).guessGroupedArrayElements(); // // for (int i= 0; i < arrays.length; i++) { // mv.setValues(arrays[i], elems[i]); // } // // if (arrays.length > 1 || elems.length == 1 && elems[0].length > 1) // variable.setUnambiguous(false); // else // variable.setUnambiguous(isUnambiguous(context)); // // } else // super.resolve(variable, context); // } // } // // protected static class Index extends TemplateVariableResolver { // public Index() { // super("index", // TemplateMessages.getString("JavaContextType.variable.description.index")); // //$NON-NLS-1$ //$NON-NLS-2$ // } // protected String resolve(TemplateContext context) { // return ((JavaContext) context).getIndex(); // } // } // // protected static class Collection extends TemplateVariableResolver { // public Collection() { // super("collection", // TemplateMessages.getString("JavaContextType.variable.description.collection")); // //$NON-NLS-1$ //$NON-NLS-2$ // } // // protected String[] resolveAll(TemplateContext context) { // String[] collections= ((JavaContext) context).guessCollections(); // if (collections.length > 0) // return collections; // else // return super.resolveAll(context); // } // } // // protected static class Iterator extends TemplateVariableResolver { // // public Iterator() { // super("iterator", // TemplateMessages.getString("JavaContextType.variable.description.iterator")); // //$NON-NLS-1$ //$NON-NLS-2$ // } // protected String resolve(TemplateContext context) { // JavaContext javaContext= (JavaContext) context; // // if (!context.isReadOnly()) // javaContext.addIteratorImport(); // // return javaContext.getIterator(); // } // } // protected static class Todo extends TemplateVariableResolver { public Todo() { super( "todo", JavaTemplateMessages.getString("JavaContextType.variable.description.todo")); //$NON-NLS-1$ //$NON-NLS-2$ } protected String resolve(TemplateContext context) { JavaContext javaContext = (JavaContext) context; ICompilationUnit compilationUnit = javaContext.getCompilationUnit(); if (compilationUnit == null) return "XXX"; //$NON-NLS-1$ IJavaProject javaProject = compilationUnit.getJavaProject(); String todoTaskTag = StubUtility.getTodoTaskTag(javaProject); if (todoTaskTag == null) return "XXX"; //$NON-NLS-1$ return todoTaskTag; } } /* * protected static class Arguments extends SimpleVariableResolver { public * Arguments() { super("arguments", * TemplateMessages.getString("JavaContextType.variable.description.arguments"), * ""); } } */ /** * Creates a java context type. */ public JavaContextType() { super(NAME); // global addResolver(new GlobalTemplateVariables.Cursor()); addResolver(new GlobalTemplateVariables.WordSelection()); addResolver(new GlobalTemplateVariables.LineSelection()); addResolver(new GlobalTemplateVariables.Dollar()); addResolver(new GlobalTemplateVariables.Date()); addResolver(new GlobalTemplateVariables.Year()); addResolver(new GlobalTemplateVariables.Time()); addResolver(new GlobalTemplateVariables.User()); // compilation unit addResolver(new File()); addResolver(new PrimaryTypeName()); addResolver(new ReturnType()); addResolver(new Method()); addResolver(new Type()); addResolver(new Package()); addResolver(new Project()); addResolver(new Arguments()); // java // addResolver(new Array()); // addResolver(new ArrayType()); // addResolver(new ArrayElement()); // addResolver(new Index()); // addResolver(new Iterator()); // addResolver(new Collection()); addResolver(new Todo()); } /* * (non-Javadoc) * * @see net.sourceforge.phpdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, * int, int, net.sourceforge.phpdt.core.ICompilationUnit) */ public CompilationUnitContext createContext(IDocument document, int offset, int length, ICompilationUnit compilationUnit) { return new JavaContext(this, document, offset, length, compilationUnit); } }