1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / CodeTemplateContextType.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.corext.template.php;
12
13 import java.util.ArrayList;
14
15 import net.sourceforge.phpdt.core.ToolFactory;
16 import net.sourceforge.phpdt.core.compiler.IScanner;
17 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
18 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols.TokenName;
19 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
20 import net.sourceforge.phpdt.internal.corext.codemanipulation.StubUtility;
21
22 import org.eclipse.jface.text.templates.ContextTypeRegistry;
23 import org.eclipse.jface.text.templates.GlobalTemplateVariables;
24 import org.eclipse.jface.text.templates.TemplateContext;
25 import org.eclipse.jface.text.templates.TemplateContextType;
26 import org.eclipse.jface.text.templates.TemplateException;
27 import org.eclipse.jface.text.templates.TemplateVariable;
28 import org.eclipse.jface.text.templates.TemplateVariableResolver;
29
30 /**
31  */
32 public class CodeTemplateContextType extends TemplateContextType {
33
34         /* context types */
35         public static final String CATCHBLOCK_CONTEXTTYPE = "php_catchblock_context"; //$NON-NLS-1$
36
37         public static final String METHODBODY_CONTEXTTYPE = "php_methodbody_context"; //$NON-NLS-1$
38
39         public static final String CONSTRUCTORBODY_CONTEXTTYPE = "php_constructorbody_context"; //$NON-NLS-1$
40
41         public static final String GETTERBODY_CONTEXTTYPE = "php_getterbody_context"; //$NON-NLS-1$
42
43         public static final String SETTERBODY_CONTEXTTYPE = "php_setterbody_context"; //$NON-NLS-1$
44
45         public static final String NEWTYPE_CONTEXTTYPE = "php_newtype_context"; //$NON-NLS-1$
46
47         public static final String NEWHTML_CONTEXTTYPE = "php_newhtml_context"; //$NON-NLS-1$
48
49         public static final String TYPECOMMENT_CONTEXTTYPE = "php_typecomment_context"; //$NON-NLS-1$
50
51         public static final String FIELDCOMMENT_CONTEXTTYPE = "php_fieldcomment_context"; //$NON-NLS-1$
52
53         public static final String METHODCOMMENT_CONTEXTTYPE = "php_methodcomment_context"; //$NON-NLS-1$
54
55         public static final String CONSTRUCTORCOMMENT_CONTEXTTYPE = "php_constructorcomment_context"; //$NON-NLS-1$
56
57         public static final String OVERRIDECOMMENT_CONTEXTTYPE = "php_overridecomment_context"; //$NON-NLS-1$
58
59         public static final String GETTERCOMMENT_CONTEXTTYPE = "php_gettercomment_context"; //$NON-NLS-1$
60
61         public static final String SETTERCOMMENT_CONTEXTTYPE = "php_settercomment_context"; //$NON-NLS-1$
62
63         /* templates */
64         public static final String COMMENT_SUFFIX = "comment"; //$NON-NLS-1$
65
66         public static final String CATCHBLOCK = "catchblock"; //$NON-NLS-1$
67
68         public static final String METHODSTUB = "methodbody"; //$NON-NLS-1$     
69
70         public static final String NEWTYPE = "newtype"; //$NON-NLS-1$   
71
72         public static final String NEWHTML = "newhtml"; //$NON-NLS-1$   
73
74         public static final String CONSTRUCTORSTUB = "constructorbody"; //$NON-NLS-1$
75
76         public static final String GETTERSTUB = "getterbody"; //$NON-NLS-1$
77
78         public static final String SETTERSTUB = "setterbody"; //$NON-NLS-1$
79
80         public static final String TYPECOMMENT = "type" + COMMENT_SUFFIX; //$NON-NLS-1$
81
82         public static final String FIELDCOMMENT = "field" + COMMENT_SUFFIX; //$NON-NLS-1$
83
84         public static final String METHODCOMMENT = "method" + COMMENT_SUFFIX; //$NON-NLS-1$
85
86         public static final String CONSTRUCTORCOMMENT = "constructor" + COMMENT_SUFFIX; //$NON-NLS-1$
87
88         public static final String OVERRIDECOMMENT = "override" + COMMENT_SUFFIX; //$NON-NLS-1$
89
90         public static final String GETTERCOMMENT = "getter" + COMMENT_SUFFIX; //$NON-NLS-1$
91
92         public static final String SETTERCOMMENT = "setter" + COMMENT_SUFFIX; //$NON-NLS-1$
93
94         /* resolver types */
95         public static final String EXCEPTION_TYPE = "exception_type"; //$NON-NLS-1$
96
97         public static final String EXCEPTION_VAR = "exception_var"; //$NON-NLS-1$
98
99         public static final String ENCLOSING_METHOD = "enclosing_method"; //$NON-NLS-1$
100
101         public static final String ENCLOSING_TYPE = "enclosing_type"; //$NON-NLS-1$
102
103         public static final String BODY_STATEMENT = "body_statement"; //$NON-NLS-1$
104
105         public static final String FIELD = "field"; //$NON-NLS-1$
106
107         public static final String FIELD_TYPE = "field_type"; //$NON-NLS-1$
108
109         public static final String BARE_FIELD_NAME = "bare_field_name"; //$NON-NLS-1$
110
111         public static final String PARAM = "param"; //$NON-NLS-1$
112
113         public static final String RETURN_TYPE = "return_type"; //$NON-NLS-1$
114
115         public static final String SEE_TAG = "see_to_overridden"; //$NON-NLS-1$
116
117         public static final String TAGS = "tags"; //$NON-NLS-1$
118
119         public static final String TYPENAME = "type_name"; //$NON-NLS-1$
120
121         public static final String FILENAME = "file_name"; //$NON-NLS-1$
122
123         public static final String PACKAGENAME = "package_name"; //$NON-NLS-1$
124
125         public static final String PROJECTNAME = "project_name"; //$NON-NLS-1$
126
127         public static final String PACKAGE_DECLARATION = "package_declaration"; //$NON-NLS-1$
128
129         public static final String TYPE_DECLARATION = "type_declaration"; //$NON-NLS-1$
130
131         public static final String TYPE_COMMENT = "typecomment"; //$NON-NLS-1$
132
133         /**
134          * Resolver that resolves to the variable defined in the context.
135          */
136         public static class CodeTemplateVariableResolver extends
137                         TemplateVariableResolver {
138                 public CodeTemplateVariableResolver(String type, String description) {
139                         super(type, description);
140                 }
141
142                 protected String resolve(TemplateContext context) {
143                         return context.getVariable(getType());
144                 }
145         }
146
147         /**
148          * Resolver for javadoc tags.
149          */
150         public static class TagsVariableResolver extends TemplateVariableResolver {
151                 public TagsVariableResolver() {
152                         super(
153                                         TAGS,
154                                         JavaTemplateMessages
155                                                         .getString("CodeTemplateContextType.variable.description.tags")); //$NON-NLS-1$
156                 }
157
158                 protected String resolve(TemplateContext context) {
159                         return "@"; //$NON-NLS-1$
160                 }
161         }
162
163         /**
164          * Resolver for todo tags.
165          */
166         protected static class Todo extends TemplateVariableResolver {
167
168                 public Todo() {
169                         super(
170                                         "todo", JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.todo")); //$NON-NLS-1$ //$NON-NLS-2$
171                 }
172
173                 protected String resolve(TemplateContext context) {
174                         String todoTaskTag = StubUtility
175                                         .getTodoTaskTag(((CodeTemplateContext) context)
176                                                         .getJavaProject());
177                         if (todoTaskTag == null)
178                                 return "XXX"; //$NON-NLS-1$
179
180                         return todoTaskTag;
181                 }
182         }
183
184         private boolean fIsComment;
185
186         public CodeTemplateContextType(String contextName) {
187                 super(contextName);
188
189                 fIsComment = false;
190
191                 // global
192                 addResolver(new GlobalTemplateVariables.Dollar());
193                 addResolver(new GlobalTemplateVariables.Date());
194                 addResolver(new GlobalTemplateVariables.Year());
195                 addResolver(new GlobalTemplateVariables.Time());
196                 addResolver(new GlobalTemplateVariables.User());
197                 addResolver(new Todo());
198
199                 if (CATCHBLOCK_CONTEXTTYPE.equals(contextName)) {
200                         addResolver(new CodeTemplateVariableResolver(
201                                         EXCEPTION_TYPE,
202                                         JavaTemplateMessages
203                                                         .getString("CodeTemplateContextType.variable.description.exceptiontype"))); //$NON-NLS-1$
204                         addResolver(new CodeTemplateVariableResolver(
205                                         EXCEPTION_VAR,
206                                         JavaTemplateMessages
207                                                         .getString("CodeTemplateContextType.variable.description.exceptionvar"))); //$NON-NLS-1$
208                 } else if (METHODBODY_CONTEXTTYPE.equals(contextName)) {
209                         addResolver(new CodeTemplateVariableResolver(
210                                         ENCLOSING_TYPE,
211                                         JavaTemplateMessages
212                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
213                         addResolver(new CodeTemplateVariableResolver(
214                                         ENCLOSING_METHOD,
215                                         JavaTemplateMessages
216                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
217                         addResolver(new CodeTemplateVariableResolver(
218                                         BODY_STATEMENT,
219                                         JavaTemplateMessages
220                                                         .getString("CodeTemplateContextType.variable.description.bodystatement"))); //$NON-NLS-1$
221                 } else if (CONSTRUCTORBODY_CONTEXTTYPE.equals(contextName)) {
222                         addResolver(new CodeTemplateVariableResolver(
223                                         ENCLOSING_TYPE,
224                                         JavaTemplateMessages
225                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
226                         addResolver(new CodeTemplateVariableResolver(
227                                         BODY_STATEMENT,
228                                         JavaTemplateMessages
229                                                         .getString("CodeTemplateContextType.variable.description.bodystatement"))); //$NON-NLS-1$
230                 } else if (GETTERBODY_CONTEXTTYPE.equals(contextName)) {
231                         addResolver(new CodeTemplateVariableResolver(
232                                         ENCLOSING_TYPE,
233                                         JavaTemplateMessages
234                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
235                         addResolver(new CodeTemplateVariableResolver(
236                                         ENCLOSING_METHOD,
237                                         JavaTemplateMessages
238                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
239                         addResolver(new CodeTemplateVariableResolver(
240                                         FIELD,
241                                         JavaTemplateMessages
242                                                         .getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
243                 } else if (SETTERBODY_CONTEXTTYPE.equals(contextName)) {
244                         addResolver(new CodeTemplateVariableResolver(
245                                         ENCLOSING_TYPE,
246                                         JavaTemplateMessages
247                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
248                         addResolver(new CodeTemplateVariableResolver(
249                                         ENCLOSING_METHOD,
250                                         JavaTemplateMessages
251                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
252                         addResolver(new CodeTemplateVariableResolver(
253                                         FIELD,
254                                         JavaTemplateMessages
255                                                         .getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
256                         addResolver(new CodeTemplateVariableResolver(
257                                         PARAM,
258                                         JavaTemplateMessages
259                                                         .getString("CodeTemplateContextType.variable.description.param"))); //$NON-NLS-1$
260                 } else if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
261                         addResolver(new CodeTemplateVariableResolver(
262                                         TYPENAME,
263                                         JavaTemplateMessages
264                                                         .getString("CodeTemplateContextType.variable.description.typename"))); //$NON-NLS-1$
265                         addResolver(new CodeTemplateVariableResolver(
266                                         PACKAGE_DECLARATION,
267                                         JavaTemplateMessages
268                                                         .getString("CodeTemplateContextType.variable.description.packdeclaration"))); //$NON-NLS-1$
269                         addResolver(new CodeTemplateVariableResolver(
270                                         TYPE_DECLARATION,
271                                         JavaTemplateMessages
272                                                         .getString("CodeTemplateContextType.variable.description.typedeclaration"))); //$NON-NLS-1$
273                         addResolver(new CodeTemplateVariableResolver(
274                                         TYPE_COMMENT,
275                                         JavaTemplateMessages
276                                                         .getString("CodeTemplateContextType.variable.description.typecomment"))); //$NON-NLS-1$
277                         addCompilationUnitVariables();
278                 } else if (NEWHTML_CONTEXTTYPE.equals(contextName)) {
279                         addResolver(new CodeTemplateVariableResolver(
280                                         TYPENAME,
281                                         JavaTemplateMessages
282                                                         .getString("CodeTemplateContextType.variable.description.typename"))); //$NON-NLS-1$
283                         addResolver(new CodeTemplateVariableResolver(
284                                         PACKAGE_DECLARATION,
285                                         JavaTemplateMessages
286                                                         .getString("CodeTemplateContextType.variable.description.packdeclaration"))); //$NON-NLS-1$
287                         addResolver(new CodeTemplateVariableResolver(
288                                         TYPE_DECLARATION,
289                                         JavaTemplateMessages
290                                                         .getString("CodeTemplateContextType.variable.description.typedeclaration"))); //$NON-NLS-1$
291                         addResolver(new CodeTemplateVariableResolver(
292                                         TYPE_COMMENT,
293                                         JavaTemplateMessages
294                                                         .getString("CodeTemplateContextType.variable.description.typecomment"))); //$NON-NLS-1$
295                         addCompilationUnitVariables();
296                 } else if (TYPECOMMENT_CONTEXTTYPE.equals(contextName)) {
297                         addResolver(new CodeTemplateVariableResolver(
298                                         TYPENAME,
299                                         JavaTemplateMessages
300                                                         .getString("CodeTemplateContextType.variable.description.typename"))); //$NON-NLS-1$
301                         addResolver(new CodeTemplateVariableResolver(
302                                         ENCLOSING_TYPE,
303                                         JavaTemplateMessages
304                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
305                         addResolver(new TagsVariableResolver());
306                         addCompilationUnitVariables();
307                         fIsComment = true;
308                 } else if (FIELDCOMMENT_CONTEXTTYPE.equals(contextName)) {
309                         addResolver(new CodeTemplateVariableResolver(
310                                         FIELD_TYPE,
311                                         JavaTemplateMessages
312                                                         .getString("CodeTemplateContextType.variable.description.fieldtype"))); //$NON-NLS-1$
313                         addResolver(new CodeTemplateVariableResolver(
314                                         FIELD,
315                                         JavaTemplateMessages
316                                                         .getString("CodeTemplateContextType.variable.description.fieldname"))); //$NON-NLS-1$
317                         addCompilationUnitVariables();
318                         fIsComment = true;
319                 } else if (METHODCOMMENT_CONTEXTTYPE.equals(contextName)) {
320                         addResolver(new CodeTemplateVariableResolver(
321                                         ENCLOSING_TYPE,
322                                         JavaTemplateMessages
323                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
324                         addResolver(new CodeTemplateVariableResolver(
325                                         ENCLOSING_METHOD,
326                                         JavaTemplateMessages
327                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
328                         addResolver(new CodeTemplateVariableResolver(
329                                         RETURN_TYPE,
330                                         JavaTemplateMessages
331                                                         .getString("CodeTemplateContextType.variable.description.returntype"))); //$NON-NLS-1$
332                         addResolver(new TagsVariableResolver());
333                         addCompilationUnitVariables();
334                         fIsComment = true;
335                 } else if (OVERRIDECOMMENT_CONTEXTTYPE.equals(contextName)) {
336                         addResolver(new CodeTemplateVariableResolver(
337                                         ENCLOSING_TYPE,
338                                         JavaTemplateMessages
339                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
340                         addResolver(new CodeTemplateVariableResolver(
341                                         ENCLOSING_METHOD,
342                                         JavaTemplateMessages
343                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
344                         addResolver(new CodeTemplateVariableResolver(
345                                         SEE_TAG,
346                                         JavaTemplateMessages
347                                                         .getString("CodeTemplateContextType.variable.description.seetag"))); //$NON-NLS-1$
348                         addResolver(new TagsVariableResolver());
349                         addCompilationUnitVariables();
350                         fIsComment = true;
351                 } else if (CONSTRUCTORCOMMENT_CONTEXTTYPE.equals(contextName)) {
352                         addResolver(new CodeTemplateVariableResolver(
353                                         ENCLOSING_TYPE,
354                                         JavaTemplateMessages
355                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
356                         addResolver(new TagsVariableResolver());
357                         addCompilationUnitVariables();
358                         fIsComment = true;
359                 } else if (GETTERCOMMENT_CONTEXTTYPE.equals(contextName)) {
360                         addResolver(new CodeTemplateVariableResolver(
361                                         ENCLOSING_TYPE,
362                                         JavaTemplateMessages
363                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
364                         addResolver(new CodeTemplateVariableResolver(
365                                         FIELD_TYPE,
366                                         JavaTemplateMessages
367                                                         .getString("CodeTemplateContextType.variable.description.getterfieldtype"))); //$NON-NLS-1$
368                         addResolver(new CodeTemplateVariableResolver(
369                                         FIELD,
370                                         JavaTemplateMessages
371                                                         .getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
372                         addResolver(new CodeTemplateVariableResolver(
373                                         ENCLOSING_METHOD,
374                                         JavaTemplateMessages
375                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
376                         addResolver(new CodeTemplateVariableResolver(
377                                         BARE_FIELD_NAME,
378                                         JavaTemplateMessages
379                                                         .getString("CodeTemplateContextType.variable.description.barefieldname"))); //$NON-NLS-1$
380                         addCompilationUnitVariables();
381                         fIsComment = true;
382                 } else if (SETTERCOMMENT_CONTEXTTYPE.equals(contextName)) {
383                         addResolver(new CodeTemplateVariableResolver(
384                                         ENCLOSING_TYPE,
385                                         JavaTemplateMessages
386                                                         .getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
387                         addResolver(new CodeTemplateVariableResolver(
388                                         FIELD_TYPE,
389                                         JavaTemplateMessages
390                                                         .getString("CodeTemplateContextType.variable.description.getterfieldtype"))); //$NON-NLS-1$
391                         addResolver(new CodeTemplateVariableResolver(
392                                         FIELD,
393                                         JavaTemplateMessages
394                                                         .getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
395                         addResolver(new CodeTemplateVariableResolver(
396                                         ENCLOSING_METHOD,
397                                         JavaTemplateMessages
398                                                         .getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
399                         addResolver(new CodeTemplateVariableResolver(
400                                         PARAM,
401                                         JavaTemplateMessages
402                                                         .getString("CodeTemplateContextType.variable.description.param"))); //$NON-NLS-1$
403                         addResolver(new CodeTemplateVariableResolver(
404                                         BARE_FIELD_NAME,
405                                         JavaTemplateMessages
406                                                         .getString("CodeTemplateContextType.variable.description.barefieldname"))); //$NON-NLS-1$
407                         addCompilationUnitVariables();
408                         fIsComment = true;
409                 }
410         }
411
412         private void addCompilationUnitVariables() {
413                 addResolver(new CodeTemplateVariableResolver(
414                                 FILENAME,
415                                 JavaTemplateMessages
416                                                 .getString("CodeTemplateContextType.variable.description.filename"))); //$NON-NLS-1$
417                 addResolver(new CodeTemplateVariableResolver(
418                                 PACKAGENAME,
419                                 JavaTemplateMessages
420                                                 .getString("CodeTemplateContextType.variable.description.packagename"))); //$NON-NLS-1$
421                 addResolver(new CodeTemplateVariableResolver(
422                                 PROJECTNAME,
423                                 JavaTemplateMessages
424                                                 .getString("CodeTemplateContextType.variable.description.projectname"))); //$NON-NLS-1$
425         }
426
427         /*
428          * @see net.sourceforge.phpdt.internal.corext.template.ContextType#validateVariables(net.sourceforge.phpdt.internal.corext.template.TemplateVariable[])
429          */
430         protected void validateVariables(TemplateVariable[] variables)
431                         throws TemplateException {
432                 ArrayList required = new ArrayList(5);
433                 //String contextName = getId();
434                 // if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
435                 // required.add(PACKAGE_DECLARATION);
436                 // required.add(TYPE_DECLARATION);
437                 // }
438                 for (int i = 0; i < variables.length; i++) {
439                         String type = variables[i].getType();
440                         if (getResolver(type) == null) {
441                                 throw new TemplateException(
442                                                 JavaTemplateMessages
443                                                                 .getFormattedString(
444                                                                                 "CodeTemplateContextType.validate.unknownvariable", type)); //$NON-NLS-1$
445                         }
446                         required.remove(type);
447                 }
448                 if (!required.isEmpty()) {
449                         String missing = (String) required.get(0);
450                         throw new TemplateException(
451                                         JavaTemplateMessages
452                                                         .getFormattedString(
453                                                                         "CodeTemplateContextType.validate.missingvariable", missing)); //$NON-NLS-1$
454                 }
455                 super.validateVariables(variables);
456         }
457
458         /*
459          * (non-Javadoc)
460          * 
461          * @see net.sourceforge.phpdt.internal.corext.template.ContextType#createContext()
462          */
463 //      public TemplateContext createContext() {
464 //              return null;
465 //      }
466
467         public static void registerContextTypes(ContextTypeRegistry registry) {
468                 registry.addContextType(new CodeTemplateContextType(
469                                 CodeTemplateContextType.CATCHBLOCK_CONTEXTTYPE));
470                 registry.addContextType(new CodeTemplateContextType(
471                                 CodeTemplateContextType.METHODBODY_CONTEXTTYPE));
472                 registry.addContextType(new CodeTemplateContextType(
473                                 CodeTemplateContextType.CONSTRUCTORBODY_CONTEXTTYPE));
474                 registry.addContextType(new CodeTemplateContextType(
475                                 CodeTemplateContextType.GETTERBODY_CONTEXTTYPE));
476                 registry.addContextType(new CodeTemplateContextType(
477                                 CodeTemplateContextType.SETTERBODY_CONTEXTTYPE));
478                 registry.addContextType(new CodeTemplateContextType(
479                                 CodeTemplateContextType.NEWTYPE_CONTEXTTYPE));
480                 registry.addContextType(new CodeTemplateContextType(
481                                 CodeTemplateContextType.NEWHTML_CONTEXTTYPE));
482
483                 registry.addContextType(new CodeTemplateContextType(
484                                 CodeTemplateContextType.TYPECOMMENT_CONTEXTTYPE));
485                 registry.addContextType(new CodeTemplateContextType(
486                                 CodeTemplateContextType.FIELDCOMMENT_CONTEXTTYPE));
487                 registry.addContextType(new CodeTemplateContextType(
488                                 CodeTemplateContextType.METHODCOMMENT_CONTEXTTYPE));
489                 registry.addContextType(new CodeTemplateContextType(
490                                 CodeTemplateContextType.CONSTRUCTORCOMMENT_CONTEXTTYPE));
491                 registry.addContextType(new CodeTemplateContextType(
492                                 CodeTemplateContextType.OVERRIDECOMMENT_CONTEXTTYPE));
493                 registry.addContextType(new CodeTemplateContextType(
494                                 CodeTemplateContextType.GETTERCOMMENT_CONTEXTTYPE));
495                 registry.addContextType(new CodeTemplateContextType(
496                                 CodeTemplateContextType.SETTERCOMMENT_CONTEXTTYPE));
497         }
498
499         /*
500          * @see net.sourceforge.phpdt.internal.corext.template.ContextType#validate(java.lang.String)
501          */
502         public void validate(String pattern) throws TemplateException {
503                 super.validate(pattern);
504                 if (fIsComment) {
505                         if (!isValidComment(pattern)) {
506                                 throw new TemplateException(
507                                                 JavaTemplateMessages
508                                                                 .getString("CodeTemplateContextType.validate.invalidcomment")); //$NON-NLS-1$
509                         }
510                 }
511         }
512
513         private boolean isValidComment(String template) {
514                 IScanner scanner = ToolFactory.createScanner(true, false, false, true);// false);
515                 scanner.setSource(template.toCharArray());
516                 try {
517                         TokenName next = scanner.getNextToken();
518                         while (next == ITerminalSymbols.TokenName.COMMENT_LINE
519                                         || next == ITerminalSymbols.TokenName.COMMENT_PHPDOC
520                                         || next == ITerminalSymbols.TokenName.COMMENT_BLOCK) {
521                                 next = scanner.getNextToken();
522                         }
523                         return next == ITerminalSymbols.TokenName.EOF;
524                 } catch (InvalidInputException e) {
525                 }
526                 return false;
527         }
528
529 }