1 11 package org.eclipse.jdt.internal.corext.template.java; 12 13 import org.eclipse.jface.text.IDocument; 14 import org.eclipse.jface.text.Position; 15 import org.eclipse.jface.text.templates.TemplateContextType; 16 import org.eclipse.jface.text.templates.GlobalTemplateVariables; 17 import org.eclipse.jface.text.templates.TemplateContext; 18 import org.eclipse.jface.text.templates.TemplateException; 19 import org.eclipse.jface.text.templates.TemplateVariable; 20 import org.eclipse.jface.text.templates.TemplateVariableResolver; 21 22 import org.eclipse.jdt.core.ICompilationUnit; 23 import org.eclipse.jdt.core.IJavaElement; 24 import org.eclipse.jdt.core.IMethod; 25 import org.eclipse.jdt.core.JavaCore; 26 import org.eclipse.jdt.core.JavaModelException; 27 import org.eclipse.jdt.core.Signature; 28 29 30 33 public abstract class CompilationUnitContextType extends TemplateContextType { 34 35 protected static class ReturnType extends TemplateVariableResolver { 36 public ReturnType() { 37 super("return_type", JavaTemplateMessages.CompilationUnitContextType_variable_description_return_type); } 39 protected String resolve(TemplateContext context) { 40 IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD); 41 if (element == null) 42 return null; 43 44 try { 45 return Signature.toString(((IMethod) element).getReturnType()); 46 } catch (JavaModelException e) { 47 return null; 48 } 49 } 50 } 51 52 protected static class File extends TemplateVariableResolver { 53 public File() { 54 super("file", JavaTemplateMessages.CompilationUnitContextType_variable_description_file); } 56 protected String resolve(TemplateContext context) { 57 ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit(); 58 59 return (unit == null) ? null : unit.getElementName(); 60 } 61 62 65 protected boolean isUnambiguous(TemplateContext context) { 66 return resolve(context) != null; 67 } 68 } 69 70 protected static class PrimaryTypeName extends TemplateVariableResolver { 71 public PrimaryTypeName() { 72 super("primary_type_name", JavaTemplateMessages.CompilationUnitContextType_variable_description_primary_type_name); 74 } 75 protected String resolve(TemplateContext context) { 76 ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit(); 77 if (unit == null) 78 return null; 79 return JavaCore.removeJavaLikeExtension(unit.getElementName()); 80 } 81 82 85 protected boolean isUnambiguous(TemplateContext context) { 86 return resolve(context) != null; 87 } 88 } 89 90 protected static class EnclosingJavaElement extends TemplateVariableResolver { 91 protected final int fElementType; 92 93 public EnclosingJavaElement(String name, String description, int elementType) { 94 super(name, description); 95 fElementType= elementType; 96 } 97 protected String resolve(TemplateContext context) { 98 IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(fElementType); 99 return (element == null) ? null : element.getElementName(); 100 } 101 102 105 protected boolean isUnambiguous(TemplateContext context) { 106 return resolve(context) != null; 107 } 108 } 109 110 protected static class Method extends EnclosingJavaElement { 111 public Method() { 112 super("enclosing_method", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_method, IJavaElement.METHOD); } 114 } 115 116 protected static class Type extends EnclosingJavaElement { 117 public Type() { 118 super("enclosing_type", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_type, IJavaElement.TYPE); } 120 } 121 128 protected static class Package extends EnclosingJavaElement { 129 public Package() { 130 super("enclosing_package", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_package, IJavaElement.PACKAGE_FRAGMENT); } 132 } 133 134 protected static class Project extends EnclosingJavaElement { 135 public Project() { 136 super("enclosing_project", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_project, IJavaElement.JAVA_PROJECT); } 138 } 139 150 protected static class Arguments extends TemplateVariableResolver { 151 public Arguments() { 152 super("enclosing_method_arguments", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_method_arguments); } 154 protected String resolve(TemplateContext context) { 155 IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD); 156 if (element == null) 157 return null; 158 159 IMethod method= (IMethod) element; 160 161 try { 162 String [] arguments= method.getParameterNames(); 163 StringBuffer buffer= new StringBuffer (); 164 165 for (int i= 0; i < arguments.length; i++) { 166 if (i > 0) 167 buffer.append(", "); buffer.append(arguments[i]); 169 } 170 171 return buffer.toString(); 172 173 } catch (JavaModelException e) { 174 return null; 175 } 176 } 177 } 178 179 189 190 193 public CompilationUnitContextType(String name) { 194 super(name); 195 } 196 197 public abstract CompilationUnitContext createContext(IDocument document, int completionPosition, int length, ICompilationUnit compilationUnit); 198 public abstract CompilationUnitContext createContext(IDocument document, Position completionPosition, ICompilationUnit compilationUnit); 199 200 203 protected void validateVariables(TemplateVariable[] variables) throws TemplateException { 204 for (int i= 0; i < variables.length; i++) { 206 TemplateVariable var= variables[i]; 207 if (var.getType().equals(GlobalTemplateVariables.Cursor.NAME)) { 208 if (var.getOffsets().length > 1) { 209 throw new TemplateException(JavaTemplateMessages.ContextType_error_multiple_cursor_variables); 210 } 211 } 212 } 213 } 214 215 } 216 | Popular Tags |