KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > template > java > CompilationUnitContextType


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

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 /**
31  * Compilation unit context type.
32  */

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); //$NON-NLS-1$
38
}
39         protected String JavaDoc 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); //$NON-NLS-1$
55
}
56         protected String JavaDoc resolve(TemplateContext context) {
57             ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit();
58             
59             return (unit == null) ? null : unit.getElementName();
60         }
61         
62         /*
63          * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext)
64          */

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); //$NON-NLS-1$
73

74         }
75         protected String JavaDoc 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         /*
83          * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext)
84          */

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 JavaDoc name, String JavaDoc description, int elementType) {
94             super(name, description);
95             fElementType= elementType;
96         }
97         protected String JavaDoc resolve(TemplateContext context) {
98             IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(fElementType);
99             return (element == null) ? null : element.getElementName();
100         }
101         
102         /*
103          * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext)
104          */

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); //$NON-NLS-1$
113
}
114     }
115
116     protected static class Type extends EnclosingJavaElement {
117         public Type() {
118             super("enclosing_type", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_type, IJavaElement.TYPE); //$NON-NLS-1$
119
}
120     }
121 /*
122     protected static class SuperClass extends EnclosingJavaElement {
123         public Type() {
124             super("super_class", TemplateMessages.getString("JavaContextType.variable.description.type"), IJavaElement.TYPE);
125         }
126     }
127 */

128     protected static class Package extends EnclosingJavaElement {
129         public Package() {
130             super("enclosing_package", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_package, IJavaElement.PACKAGE_FRAGMENT); //$NON-NLS-1$
131
}
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); //$NON-NLS-1$
137
}
138     }
139 /*
140     protected static class Project2 extends TemplateVariableResolver {
141         public Project2() {
142             super("project", TemplateMessages.getString("JavaContextType.variable.description.project"));
143         }
144         public String evaluate(TemplateContext context) {
145             ICompilationUnit unit= ((JavaContext) context).getUnit();
146             return (unit == null) ? null : unit.getJavaProject().getElementName();
147         }
148     }
149 */

150     protected static class Arguments extends TemplateVariableResolver {
151         public Arguments() {
152             super("enclosing_method_arguments", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_method_arguments); //$NON-NLS-1$
153
}
154         protected String JavaDoc 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 JavaDoc[] arguments= method.getParameterNames();
163                 StringBuffer JavaDoc buffer= new StringBuffer JavaDoc();
164                 
165                 for (int i= 0; i < arguments.length; i++) {
166                     if (i > 0)
167                         buffer.append(", "); //$NON-NLS-1$
168
buffer.append(arguments[i]);
169                 }
170                 
171                 return buffer.toString();
172
173             } catch (JavaModelException e) {
174                 return null;
175             }
176         }
177     }
178
179 /*
180     protected static class Line extends TemplateVariableResolver {
181         public Line() {
182             super("line", TemplateMessages.getString("CompilationUnitContextType.variable.description.line"));
183         }
184         public String evaluate(TemplateContext context) {
185             return ((JavaTemplateContext) context).guessLineNumber();
186         }
187     }
188 */

189
190     /*
191      * @see ContextType#ContextType(String)
192      */

193     public CompilationUnitContextType(String JavaDoc 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     /* (non-Javadoc)
201      * @see org.eclipse.jdt.internal.corext.template.ContextType#validateVariables(org.eclipse.jdt.internal.corext.template.TemplateVariable[])
202      */

203     protected void validateVariables(TemplateVariable[] variables) throws TemplateException {
204         // check for multiple cursor variables
205
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