KickJava   Java API By Example, From Geeks To Geeks.

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


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  * John Kaplan, johnkaplantech@gmail.com - 108071 [code templates] template for body of newly created class
11  *******************************************************************************/

12 package org.eclipse.jdt.internal.corext.template.java;
13
14 import java.util.ArrayList JavaDoc;
15
16 import org.eclipse.jface.text.templates.ContextTypeRegistry;
17 import org.eclipse.jface.text.templates.GlobalTemplateVariables;
18 import org.eclipse.jface.text.templates.TemplateContext;
19 import org.eclipse.jface.text.templates.TemplateContextType;
20 import org.eclipse.jface.text.templates.TemplateException;
21 import org.eclipse.jface.text.templates.TemplateVariable;
22 import org.eclipse.jface.text.templates.TemplateVariableResolver;
23
24 import org.eclipse.jdt.core.ToolFactory;
25 import org.eclipse.jdt.core.compiler.IScanner;
26 import org.eclipse.jdt.core.compiler.ITerminalSymbols;
27 import org.eclipse.jdt.core.compiler.InvalidInputException;
28
29 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
30 import org.eclipse.jdt.internal.corext.dom.TokenScanner;
31 import org.eclipse.jdt.internal.corext.util.Messages;
32
33 /**
34   */

35 public class CodeTemplateContextType extends TemplateContextType {
36     
37     /* context types */
38     public static final String JavaDoc CATCHBLOCK_CONTEXTTYPE= "catchblock_context"; //$NON-NLS-1$
39
public static final String JavaDoc METHODBODY_CONTEXTTYPE= "methodbody_context"; //$NON-NLS-1$
40
public static final String JavaDoc CONSTRUCTORBODY_CONTEXTTYPE= "constructorbody_context"; //$NON-NLS-1$
41
public static final String JavaDoc GETTERBODY_CONTEXTTYPE= "getterbody_context"; //$NON-NLS-1$
42
public static final String JavaDoc SETTERBODY_CONTEXTTYPE= "setterbody_context"; //$NON-NLS-1$
43
public static final String JavaDoc NEWTYPE_CONTEXTTYPE= "newtype_context"; //$NON-NLS-1$
44
public static final String JavaDoc CLASSBODY_CONTEXTTYPE= "classbody_context"; //$NON-NLS-1$
45
public static final String JavaDoc INTERFACEBODY_CONTEXTTYPE= "interfacebody_context"; //$NON-NLS-1$
46
public static final String JavaDoc ENUMBODY_CONTEXTTYPE= "enumbody_context"; //$NON-NLS-1$
47
public static final String JavaDoc ANNOTATIONBODY_CONTEXTTYPE= "annotationbody_context"; //$NON-NLS-1$
48
public static final String JavaDoc FILECOMMENT_CONTEXTTYPE= "filecomment_context"; //$NON-NLS-1$
49
public static final String JavaDoc TYPECOMMENT_CONTEXTTYPE= "typecomment_context"; //$NON-NLS-1$
50
public static final String JavaDoc FIELDCOMMENT_CONTEXTTYPE= "fieldcomment_context"; //$NON-NLS-1$
51
public static final String JavaDoc METHODCOMMENT_CONTEXTTYPE= "methodcomment_context"; //$NON-NLS-1$
52
public static final String JavaDoc CONSTRUCTORCOMMENT_CONTEXTTYPE= "constructorcomment_context"; //$NON-NLS-1$
53
public static final String JavaDoc OVERRIDECOMMENT_CONTEXTTYPE= "overridecomment_context"; //$NON-NLS-1$
54
public static final String JavaDoc DELEGATECOMMENT_CONTEXTTYPE= "delegatecomment_context"; //$NON-NLS-1$
55
public static final String JavaDoc GETTERCOMMENT_CONTEXTTYPE= "gettercomment_context"; //$NON-NLS-1$
56
public static final String JavaDoc SETTERCOMMENT_CONTEXTTYPE= "settercomment_context"; //$NON-NLS-1$
57

58     /* templates */
59     
60     private static final String JavaDoc CODETEMPLATES_PREFIX= "org.eclipse.jdt.ui.text.codetemplates."; //$NON-NLS-1$
61
public static final String JavaDoc COMMENT_SUFFIX= "comment"; //$NON-NLS-1$
62

63     public static final String JavaDoc CATCHBLOCK_ID= CODETEMPLATES_PREFIX + "catchblock"; //$NON-NLS-1$
64
public static final String JavaDoc METHODSTUB_ID= CODETEMPLATES_PREFIX + "methodbody"; //$NON-NLS-1$
65
public static final String JavaDoc NEWTYPE_ID= CODETEMPLATES_PREFIX + "newtype"; //$NON-NLS-1$
66
public static final String JavaDoc CONSTRUCTORSTUB_ID= CODETEMPLATES_PREFIX + "constructorbody"; //$NON-NLS-1$
67
public static final String JavaDoc GETTERSTUB_ID= CODETEMPLATES_PREFIX + "getterbody"; //$NON-NLS-1$
68
public static final String JavaDoc SETTERSTUB_ID= CODETEMPLATES_PREFIX + "setterbody"; //$NON-NLS-1$
69
public static final String JavaDoc FILECOMMENT_ID= CODETEMPLATES_PREFIX + "file" + COMMENT_SUFFIX; //$NON-NLS-1$
70
public static final String JavaDoc TYPECOMMENT_ID= CODETEMPLATES_PREFIX + "type" + COMMENT_SUFFIX; //$NON-NLS-1$
71
public static final String JavaDoc CLASSBODY_ID= CODETEMPLATES_PREFIX + "classbody"; //$NON-NLS-1$
72
public static final String JavaDoc INTERFACEBODY_ID= CODETEMPLATES_PREFIX + "interfacebody"; //$NON-NLS-1$
73
public static final String JavaDoc ENUMBODY_ID= CODETEMPLATES_PREFIX + "enumbody"; //$NON-NLS-1$
74
public static final String JavaDoc ANNOTATIONBODY_ID= CODETEMPLATES_PREFIX + "annotationbody"; //$NON-NLS-1$
75
public static final String JavaDoc FIELDCOMMENT_ID= CODETEMPLATES_PREFIX + "field" + COMMENT_SUFFIX; //$NON-NLS-1$
76
public static final String JavaDoc METHODCOMMENT_ID= CODETEMPLATES_PREFIX + "method" + COMMENT_SUFFIX; //$NON-NLS-1$
77
public static final String JavaDoc CONSTRUCTORCOMMENT_ID= CODETEMPLATES_PREFIX + "constructor" + COMMENT_SUFFIX; //$NON-NLS-1$
78
public static final String JavaDoc OVERRIDECOMMENT_ID= CODETEMPLATES_PREFIX + "override" + COMMENT_SUFFIX; //$NON-NLS-1$
79
public static final String JavaDoc DELEGATECOMMENT_ID= CODETEMPLATES_PREFIX + "delegate" + COMMENT_SUFFIX; //$NON-NLS-1$
80
public static final String JavaDoc GETTERCOMMENT_ID= CODETEMPLATES_PREFIX + "getter" + COMMENT_SUFFIX; //$NON-NLS-1$
81
public static final String JavaDoc SETTERCOMMENT_ID= CODETEMPLATES_PREFIX + "setter" + COMMENT_SUFFIX; //$NON-NLS-1$
82

83     /* resolver types */
84     public static final String JavaDoc EXCEPTION_TYPE= "exception_type"; //$NON-NLS-1$
85
public static final String JavaDoc EXCEPTION_VAR= "exception_var"; //$NON-NLS-1$
86
public static final String JavaDoc ENCLOSING_METHOD= "enclosing_method"; //$NON-NLS-1$
87
public static final String JavaDoc ENCLOSING_TYPE= "enclosing_type"; //$NON-NLS-1$
88
public static final String JavaDoc BODY_STATEMENT= "body_statement"; //$NON-NLS-1$
89
public static final String JavaDoc FIELD= "field"; //$NON-NLS-1$
90
public static final String JavaDoc FIELD_TYPE= "field_type"; //$NON-NLS-1$
91
public static final String JavaDoc BARE_FIELD_NAME= "bare_field_name"; //$NON-NLS-1$
92

93     public static final String JavaDoc PARAM= "param"; //$NON-NLS-1$
94
public static final String JavaDoc RETURN_TYPE= "return_type"; //$NON-NLS-1$
95
public static final String JavaDoc SEE_TO_OVERRIDDEN_TAG= "see_to_overridden"; //$NON-NLS-1$
96
public static final String JavaDoc SEE_TO_TARGET_TAG= "see_to_target"; //$NON-NLS-1$
97

98     public static final String JavaDoc TAGS= "tags"; //$NON-NLS-1$
99

100     public static final String JavaDoc TYPENAME= "type_name"; //$NON-NLS-1$
101
public static final String JavaDoc FILENAME= "file_name"; //$NON-NLS-1$
102
public static final String JavaDoc PACKAGENAME= "package_name"; //$NON-NLS-1$
103
public static final String JavaDoc PROJECTNAME= "project_name"; //$NON-NLS-1$
104

105     public static final String JavaDoc PACKAGE_DECLARATION= "package_declaration"; //$NON-NLS-1$
106
public static final String JavaDoc TYPE_DECLARATION= "type_declaration"; //$NON-NLS-1$
107
public static final String JavaDoc CLASS_BODY= "classbody"; //$NON-NLS-1$
108
public static final String JavaDoc INTERFACE_BODY= "interfacebody"; //$NON-NLS-1$
109
public static final String JavaDoc ENUM_BODY= "enumbody"; //$NON-NLS-1$
110
public static final String JavaDoc ANNOTATION_BODY= "annotationbody"; //$NON-NLS-1$
111
public static final String JavaDoc TYPE_COMMENT= "typecomment"; //$NON-NLS-1$
112
public static final String JavaDoc FILE_COMMENT= "filecomment"; //$NON-NLS-1$
113

114     
115     /**
116      * Resolver that resolves to the variable defined in the context.
117      */

118     public static class CodeTemplateVariableResolver extends TemplateVariableResolver {
119         public CodeTemplateVariableResolver(String JavaDoc type, String JavaDoc description) {
120             super(type, description);
121         }
122         
123         protected String JavaDoc resolve(TemplateContext context) {
124             return context.getVariable(getType());
125         }
126     }
127     
128     /**
129      * Resolver for javadoc tags.
130      */

131     public static class TagsVariableResolver extends TemplateVariableResolver {
132         public TagsVariableResolver() {
133             super(TAGS, JavaTemplateMessages.CodeTemplateContextType_variable_description_tags);
134         }
135         
136         protected String JavaDoc resolve(TemplateContext context) {
137             return "@"; //$NON-NLS-1$
138
}
139     }
140         
141     /**
142      * Resolver for todo tags.
143      */

144     protected static class Todo extends TemplateVariableResolver {
145
146         public Todo() {
147             super("todo", JavaTemplateMessages.CodeTemplateContextType_variable_description_todo); //$NON-NLS-1$
148
}
149         
150         protected String JavaDoc resolve(TemplateContext context) {
151             String JavaDoc todoTaskTag= StubUtility.getTodoTaskTag(((CodeTemplateContext) context).getJavaProject());
152             if (todoTaskTag == null)
153                 return "XXX"; //$NON-NLS-1$
154

155             return todoTaskTag;
156         }
157     }
158     
159     private boolean fIsComment;
160     
161     public CodeTemplateContextType(String JavaDoc contextName) {
162         super(contextName);
163         
164         fIsComment= false;
165         
166         // global
167
addResolver(new GlobalTemplateVariables.Dollar());
168         addResolver(new GlobalTemplateVariables.Date());
169         addResolver(new GlobalTemplateVariables.Year());
170         addResolver(new GlobalTemplateVariables.Time());
171         addResolver(new GlobalTemplateVariables.User());
172         addResolver(new Todo());
173         
174         if (CATCHBLOCK_CONTEXTTYPE.equals(contextName)) {
175             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
176             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
177             
178             addResolver(new CodeTemplateVariableResolver(EXCEPTION_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_exceptiontype));
179             addResolver(new CodeTemplateVariableResolver(EXCEPTION_VAR, JavaTemplateMessages.CodeTemplateContextType_variable_description_exceptionvar));
180         } else if (METHODBODY_CONTEXTTYPE.equals(contextName)) {
181             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
182             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
183             addResolver(new CodeTemplateVariableResolver(BODY_STATEMENT, JavaTemplateMessages.CodeTemplateContextType_variable_description_bodystatement));
184         } else if (CONSTRUCTORBODY_CONTEXTTYPE.equals(contextName)) {
185             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
186             addResolver(new CodeTemplateVariableResolver(BODY_STATEMENT, JavaTemplateMessages.CodeTemplateContextType_variable_description_bodystatement));
187         } else if (GETTERBODY_CONTEXTTYPE.equals(contextName)) {
188             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
189             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
190             addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.CodeTemplateContextType_variable_description_getterfieldname));
191         } else if (SETTERBODY_CONTEXTTYPE.equals(contextName)) {
192             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
193             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
194             addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.CodeTemplateContextType_variable_description_getterfieldname));
195             addResolver(new CodeTemplateVariableResolver(PARAM, JavaTemplateMessages.CodeTemplateContextType_variable_description_param));
196         } else if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
197             addResolver(new CodeTemplateVariableResolver(TYPENAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_typename));
198             addResolver(new CodeTemplateVariableResolver(PACKAGE_DECLARATION, JavaTemplateMessages.CodeTemplateContextType_variable_description_packdeclaration));
199             addResolver(new CodeTemplateVariableResolver(TYPE_DECLARATION, JavaTemplateMessages.CodeTemplateContextType_variable_description_typedeclaration));
200             addResolver(new CodeTemplateVariableResolver(TYPE_COMMENT, JavaTemplateMessages.CodeTemplateContextType_variable_description_typecomment));
201             addResolver(new CodeTemplateVariableResolver(FILE_COMMENT, JavaTemplateMessages.CodeTemplateContextType_variable_description_filecomment));
202             addCompilationUnitVariables();
203         } else if (CLASSBODY_CONTEXTTYPE.equals(contextName) ||
204                 INTERFACEBODY_CONTEXTTYPE.equals(contextName) ||
205                 ENUMBODY_CONTEXTTYPE.equals(contextName) ||
206                 ANNOTATIONBODY_CONTEXTTYPE.equals(contextName)) {
207             addResolver(new CodeTemplateVariableResolver(TYPENAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_typename));
208             addCompilationUnitVariables();
209         } else if (TYPECOMMENT_CONTEXTTYPE.equals(contextName)) {
210             addResolver(new CodeTemplateVariableResolver(TYPENAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_typename));
211             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
212             addResolver(new TagsVariableResolver());
213             addCompilationUnitVariables();
214             fIsComment= true;
215         } else if (FILECOMMENT_CONTEXTTYPE.equals(contextName)) {
216             addResolver(new CodeTemplateVariableResolver(TYPENAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_typename));
217             addCompilationUnitVariables();
218             fIsComment= true;
219         } else if (FIELDCOMMENT_CONTEXTTYPE.equals(contextName)) {
220             addResolver(new CodeTemplateVariableResolver(FIELD_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_fieldtype));
221             addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.CodeTemplateContextType_variable_description_fieldname));
222             addCompilationUnitVariables();
223             fIsComment= true;
224         } else if (METHODCOMMENT_CONTEXTTYPE.equals(contextName)) {
225             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
226             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
227             addResolver(new CodeTemplateVariableResolver(RETURN_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_returntype));
228             addResolver(new TagsVariableResolver());
229             addCompilationUnitVariables();
230             fIsComment= true;
231         } else if (OVERRIDECOMMENT_CONTEXTTYPE.equals(contextName)) {
232             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
233             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
234             addResolver(new CodeTemplateVariableResolver(SEE_TO_OVERRIDDEN_TAG, JavaTemplateMessages.CodeTemplateContextType_variable_description_see_overridden_tag));
235             addResolver(new TagsVariableResolver());
236             addCompilationUnitVariables();
237             fIsComment= true;
238         } else if (DELEGATECOMMENT_CONTEXTTYPE.equals(contextName)) {
239             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
240             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
241             addResolver(new CodeTemplateVariableResolver(SEE_TO_TARGET_TAG, JavaTemplateMessages.CodeTemplateContextType_variable_description_see_target_tag));
242             addResolver(new TagsVariableResolver());
243             addCompilationUnitVariables();
244             fIsComment= true;
245         } else if (CONSTRUCTORCOMMENT_CONTEXTTYPE.equals(contextName)) {
246             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
247             addResolver(new TagsVariableResolver());
248             addCompilationUnitVariables();
249             fIsComment= true;
250         } else if (GETTERCOMMENT_CONTEXTTYPE.equals(contextName)) {
251             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
252             addResolver(new CodeTemplateVariableResolver(FIELD_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_getterfieldtype));
253             addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.CodeTemplateContextType_variable_description_getterfieldname));
254             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
255             addResolver(new CodeTemplateVariableResolver(BARE_FIELD_NAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_barefieldname));
256             addCompilationUnitVariables();
257             fIsComment= true;
258         } else if (SETTERCOMMENT_CONTEXTTYPE.equals(contextName)) {
259             addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingtype));
260             addResolver(new CodeTemplateVariableResolver(FIELD_TYPE, JavaTemplateMessages.CodeTemplateContextType_variable_description_getterfieldtype));
261             addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.CodeTemplateContextType_variable_description_getterfieldname));
262             addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD, JavaTemplateMessages.CodeTemplateContextType_variable_description_enclosingmethod));
263             addResolver(new CodeTemplateVariableResolver(PARAM, JavaTemplateMessages.CodeTemplateContextType_variable_description_param));
264             addResolver(new CodeTemplateVariableResolver(BARE_FIELD_NAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_barefieldname));
265             addCompilationUnitVariables();
266             fIsComment= true;
267         }
268     }
269     
270     private void addCompilationUnitVariables() {
271         addResolver(new CodeTemplateVariableResolver(FILENAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_filename));
272         addResolver(new CodeTemplateVariableResolver(PACKAGENAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_packagename));
273         addResolver(new CodeTemplateVariableResolver(PROJECTNAME, JavaTemplateMessages.CodeTemplateContextType_variable_description_projectname));
274     }
275     
276     /*
277      * @see org.eclipse.jdt.internal.corext.template.ContextType#validateVariables(org.eclipse.jdt.internal.corext.template.TemplateVariable[])
278      */

279     protected void validateVariables(TemplateVariable[] variables) throws TemplateException {
280         ArrayList JavaDoc required= new ArrayList JavaDoc(5);
281         String JavaDoc contextName= getId();
282         if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
283             required.add(PACKAGE_DECLARATION);
284             required.add(TYPE_DECLARATION);
285         }
286         for (int i= 0; i < variables.length; i++) {
287             String JavaDoc type= variables[i].getType();
288             if (getResolver(type) == null) {
289                 throw new TemplateException(Messages.format(JavaTemplateMessages.CodeTemplateContextType_validate_unknownvariable, type));
290             }
291             required.remove(type);
292         }
293         if (!required.isEmpty()) {
294             String JavaDoc missing= (String JavaDoc) required.get(0);
295             throw new TemplateException(Messages.format(JavaTemplateMessages.CodeTemplateContextType_validate_missingvariable, missing));
296         }
297         super.validateVariables(variables);
298     }
299
300     /* (non-Javadoc)
301      * @see org.eclipse.jdt.internal.corext.template.ContextType#createContext()
302      */

303     public TemplateContext createContext() {
304         return null;
305     }
306
307     public static void registerContextTypes(ContextTypeRegistry registry) {
308         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CATCHBLOCK_CONTEXTTYPE));
309         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.METHODBODY_CONTEXTTYPE));
310         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CONSTRUCTORBODY_CONTEXTTYPE));
311         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.GETTERBODY_CONTEXTTYPE));
312         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.SETTERBODY_CONTEXTTYPE));
313         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.NEWTYPE_CONTEXTTYPE));
314         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CLASSBODY_CONTEXTTYPE));
315         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.INTERFACEBODY_CONTEXTTYPE));
316         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.ENUMBODY_CONTEXTTYPE));
317         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.ANNOTATIONBODY_CONTEXTTYPE));
318         
319         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.FILECOMMENT_CONTEXTTYPE));
320         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.TYPECOMMENT_CONTEXTTYPE));
321         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.FIELDCOMMENT_CONTEXTTYPE));
322         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.METHODCOMMENT_CONTEXTTYPE));
323         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CONSTRUCTORCOMMENT_CONTEXTTYPE));
324         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.OVERRIDECOMMENT_CONTEXTTYPE));
325         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.DELEGATECOMMENT_CONTEXTTYPE));
326         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.GETTERCOMMENT_CONTEXTTYPE));
327         registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.SETTERCOMMENT_CONTEXTTYPE));
328     }
329
330     /*
331      * @see org.eclipse.jdt.internal.corext.template.ContextType#validate(java.lang.String)
332      */

333     public void validate(String JavaDoc pattern) throws TemplateException {
334         super.validate(pattern);
335         if (fIsComment) {
336             if (!isValidComment(pattern)) {
337                 throw new TemplateException(JavaTemplateMessages.CodeTemplateContextType_validate_invalidcomment);
338             }
339         }
340     }
341         
342     
343     private boolean isValidComment(String JavaDoc template) {
344         IScanner scanner= ToolFactory.createScanner(true, false, false, false);
345         scanner.setSource(template.toCharArray());
346         try {
347             int next= scanner.getNextToken();
348             while (TokenScanner.isComment(next)) {
349                 next= scanner.getNextToken();
350             }
351             return next == ITerminalSymbols.TokenNameEOF;
352         } catch (InvalidInputException e) {
353         }
354         return false;
355     }
356
357 }
358
Popular Tags