KickJava   Java API By Example, From Geeks To Geeks.

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


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  * Sebastian Davids: sdavids@gmx.de - see bug 25376
11  *******************************************************************************/

12 package org.eclipse.jdt.internal.corext.template.java;
13
14 import org.eclipse.jface.text.IDocument;
15 import org.eclipse.jface.text.Position;
16 import org.eclipse.jface.text.templates.GlobalTemplateVariables;
17 import org.eclipse.jface.text.templates.TemplateContext;
18 import org.eclipse.jface.text.templates.TemplateVariable;
19 import org.eclipse.jface.text.templates.TemplateVariableResolver;
20
21 import org.eclipse.jdt.core.ICompilationUnit;
22 import org.eclipse.jdt.core.IJavaProject;
23
24 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
25 import org.eclipse.jdt.internal.corext.template.java.CompilationUnitCompletion.Variable;
26
27 import org.eclipse.jdt.internal.ui.text.template.contentassist.MultiVariable;
28
29 /**
30  * A context type for java code.
31  */

32 public class JavaContextType extends CompilationUnitContextType {
33
34     public static final String JavaDoc NAME= "java"; //$NON-NLS-1$
35

36     protected static abstract class AbstractIterable extends TemplateVariableResolver {
37         public AbstractIterable(String JavaDoc type, String JavaDoc description) {
38             super(type, description);
39         }
40
41         protected String JavaDoc[] resolveAll(TemplateContext context) {
42             JavaContext jc= (JavaContext) context;
43             Variable[] iterables= getLocalVariables(jc);
44             String JavaDoc[] names= new String JavaDoc[iterables.length];
45             for (int i= 0; i < iterables.length; i++)
46                 names[i]= iterables[i].getName();
47             if (names.length > 0)
48                 jc.markAsUsed(names[0]);
49             return names;
50         }
51
52         abstract protected Variable[] getLocalVariables(JavaContext jc);
53
54         /*
55          * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
56          */

57         public void resolve(TemplateVariable variable, TemplateContext context) {
58             if (variable instanceof MultiVariable) {
59                 JavaContext jc= (JavaContext) context;
60                 JavaVariable jv= (JavaVariable) variable;
61                 Variable[] iterables= getLocalVariables(jc);
62                 if (iterables.length > 0) {
63                     jv.setChoices(iterables);
64                     jc.markAsUsed(iterables[0].getName());
65                     
66                     if (iterables.length > 1)
67                         variable.setUnambiguous(false);
68                     else
69                         variable.setUnambiguous(isUnambiguous(context));
70                     
71                     return;
72                 }
73             }
74             
75             super.resolve(variable, context);
76         }
77     }
78     
79     protected static class Array extends AbstractIterable {
80         public Array() {
81             super("array", JavaTemplateMessages.JavaContextType_variable_description_array); //$NON-NLS-1$
82
}
83         
84         protected Variable[] getLocalVariables(JavaContext jc) {
85             return jc.getArrays();
86         }
87     }
88     
89     protected static class Iterable extends AbstractIterable {
90         public Iterable() {
91             super("iterable", JavaTemplateMessages.JavaContextType_variable_description_iterable); //$NON-NLS-1$
92
}
93         
94         protected Variable[] getLocalVariables(JavaContext jc) {
95             return jc.getIterables();
96         }
97     }
98     
99     protected static abstract class AbstractIterableType extends TemplateVariableResolver {
100         private String JavaDoc fMasterName;
101         
102         public AbstractIterableType(String JavaDoc type, String JavaDoc desc, String JavaDoc master) {
103             super(type, desc);
104             fMasterName= master;
105         }
106         protected String JavaDoc[] resolveAll(TemplateContext context) {
107             JavaContext jc= (JavaContext) context;
108             Variable[] iterables= getLocalVariables(jc);
109             String JavaDoc[] types= new String JavaDoc[iterables.length];
110             for (int i= 0; i < iterables.length; i++)
111                 types[i]= iterables[i].getMemberTypeNames()[0];
112             return types;
113         }
114         
115         abstract protected Variable[] getLocalVariables(JavaContext jc);
116
117         /*
118          * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
119          */

120         public void resolve(TemplateVariable variable, TemplateContext context) {
121             if (variable instanceof MultiVariable) {
122                 JavaContext jc= (JavaContext) context;
123                 MultiVariable mv= (MultiVariable) variable;
124
125                 Variable[] iterables= getLocalVariables(jc);
126                 if (iterables.length > 0) {
127
128                     for (int i= 0; i < iterables.length; i++)
129                         mv.setChoices(iterables[i], iterables[i].getMemberTypeNames());
130
131                     TemplateVariable master= jc.getTemplateVariable(fMasterName);
132                     if (master instanceof MultiVariable) {
133                         final MultiVariable masterMv= (MultiVariable) master;
134                         jc.addDependency(masterMv, mv);
135                         mv.setKey(masterMv.getCurrentChoice());
136                     }
137
138                     if (iterables.length > 1 || iterables.length == 1 && mv.getChoices().length > 1)
139                         variable.setUnambiguous(false);
140                     else
141                         variable.setUnambiguous(isUnambiguous(context));
142
143                     return;
144                 }
145
146             }
147             
148             super.resolve(variable, context);
149         }
150     }
151
152     protected static class ArrayType extends AbstractIterableType {
153         public ArrayType() {
154             super("array_type", JavaTemplateMessages.JavaContextType_variable_description_array_type, "array"); //$NON-NLS-1$ //$NON-NLS-2$
155
}
156         protected Variable[] getLocalVariables(JavaContext jc) {
157             return jc.getArrays();
158         }
159     }
160     
161     protected static class IterableType extends AbstractIterableType {
162         public IterableType() {
163             super("iterable_type", JavaTemplateMessages.JavaContextType_variable_description_iterable_type, "iterable"); //$NON-NLS-1$ //$NON-NLS-2$
164
}
165         protected Variable[] getLocalVariables(JavaContext jc) {
166             return jc.getIterables();
167         }
168     }
169     
170     protected static abstract class AbstractIterableElement extends TemplateVariableResolver {
171         private String JavaDoc fMasterName;
172         
173         public AbstractIterableElement(String JavaDoc type, String JavaDoc desc, String JavaDoc master) {
174             super(type, desc);
175             fMasterName= master;
176         }
177         
178         protected String JavaDoc[] resolveAll(TemplateContext context) {
179             JavaContext jc= (JavaContext) context;
180             Variable[] iterables= getLocalVariables(jc);
181             String JavaDoc[] elements= new String JavaDoc[iterables.length];
182             for (int i= 0; i < iterables.length; i++) {
183                 elements[i]= jc.suggestVariableNames(iterables[i].getMemberTypeNames()[0])[0];
184                 if (i == 0)
185                     jc.markAsUsed(elements[0]);
186             }
187
188             return elements;
189         }
190         
191         abstract protected Variable[] getLocalVariables(JavaContext jc);
192
193         /*
194          * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
195          */

196         public void resolve(TemplateVariable variable, TemplateContext context) {
197             if (variable instanceof MultiVariable) {
198                 JavaContext jc= (JavaContext) context;
199                 MultiVariable mv= (MultiVariable) variable;
200
201                 Variable[] iterables= getLocalVariables(jc);
202                 if (iterables.length > 0) {
203                     for (int i= 0; i < iterables.length; i++) {
204                         String JavaDoc[] elements= jc.suggestVariableNames(iterables[i].getMemberTypeNames()[0]);
205                         mv.setChoices(iterables[i], elements);
206                     }
207
208
209                     TemplateVariable master= jc.getTemplateVariable(fMasterName);
210                     if (master instanceof MultiVariable) {
211                         final MultiVariable masterMv= (MultiVariable) master;
212                         jc.addDependency(masterMv, mv);
213                         mv.setKey(masterMv.getCurrentChoice());
214                     }
215                     jc.markAsUsed(mv.getDefaultValue());
216
217                     if (iterables.length > 1 || iterables.length == 1 && mv.getChoices().length > 1)
218                         variable.setUnambiguous(false);
219                     else
220                         variable.setUnambiguous(isUnambiguous(context));
221
222                     return;
223                 }
224
225             }
226             super.resolve(variable, context);
227         }
228     }
229
230     protected static class ArrayElement extends AbstractIterableElement {
231         public ArrayElement() {
232             super("array_element", JavaTemplateMessages.JavaContextType_variable_description_array_element, "array"); //$NON-NLS-1$ //$NON-NLS-2$
233
}
234         protected Variable[] getLocalVariables(JavaContext jc) {
235             return jc.getArrays();
236         }
237     }
238     
239     protected static class IterableElement extends AbstractIterableElement {
240         public IterableElement() {
241             super("iterable_element", JavaTemplateMessages.JavaContextType_variable_description_iterable_element, "iterable"); //$NON-NLS-1$ //$NON-NLS-2$
242
}
243         protected Variable[] getLocalVariables(JavaContext jc) {
244             return jc.getIterables();
245         }
246     }
247     
248     protected static class Index extends NameResolver {
249         public Index() {
250             super("int"); //$NON-NLS-1$
251
setType("index"); //$NON-NLS-1$
252
setDescription(JavaTemplateMessages.JavaContextType_variable_description_index);
253         }
254     }
255
256     protected static class Collection extends LocalVarResolver {
257         public Collection() {
258             super("java.util.Collection"); //$NON-NLS-1$
259
setType("collection"); //$NON-NLS-1$
260
setDescription(JavaTemplateMessages.JavaContextType_variable_description_collection);
261         }
262     }
263
264     protected static class Iterator extends NameResolver {
265         public Iterator() {
266             super("java.util.Iterator"); //$NON-NLS-1$
267
setType("iterator"); //$NON-NLS-1$
268
setDescription(JavaTemplateMessages.JavaContextType_variable_description_iterator);
269         }
270     }
271     
272     protected static class Todo extends TemplateVariableResolver {
273
274         public Todo() {
275             super("todo", JavaTemplateMessages.JavaContextType_variable_description_todo); //$NON-NLS-1$
276
}
277         protected String JavaDoc resolve(TemplateContext context) {
278             JavaContext javaContext= (JavaContext) context;
279             ICompilationUnit compilationUnit= javaContext.getCompilationUnit();
280             if (compilationUnit == null)
281                 return "XXX"; //$NON-NLS-1$
282

283             IJavaProject javaProject= compilationUnit.getJavaProject();
284             String JavaDoc todoTaskTag= StubUtility.getTodoTaskTag(javaProject);
285             if (todoTaskTag == null)
286                 return "XXX"; //$NON-NLS-1$
287

288             return todoTaskTag;
289         }
290     }
291 /*
292     protected static class Arguments extends SimpleVariableResolver {
293         public Arguments() {
294             super("arguments", TemplateMessages.getString("JavaContextType.variable.description.arguments"), "");
295         }
296     }
297 */

298
299
300     /**
301      * Creates a java context type.
302      */

303     public JavaContextType() {
304         super(NAME);
305         
306         // global
307
addResolver(new GlobalTemplateVariables.Cursor());
308         addResolver(new GlobalTemplateVariables.WordSelection());
309         addResolver(new GlobalTemplateVariables.LineSelection());
310         addResolver(new GlobalTemplateVariables.Dollar());
311         addResolver(new GlobalTemplateVariables.Date());
312         addResolver(new GlobalTemplateVariables.Year());
313         addResolver(new GlobalTemplateVariables.Time());
314         addResolver(new GlobalTemplateVariables.User());
315         
316         // compilation unit
317
addResolver(new File());
318         addResolver(new PrimaryTypeName());
319         addResolver(new ReturnType());
320         addResolver(new Method());
321         addResolver(new Type());
322         addResolver(new Package JavaDoc());
323         addResolver(new Project());
324         addResolver(new Arguments());
325
326         // java
327
addResolver(new Array());
328         addResolver(new ArrayType());
329         addResolver(new ArrayElement());
330         addResolver(new Index());
331         addResolver(new Iterator());
332         addResolver(new Collection());
333         addResolver(new Iterable JavaDoc());
334         addResolver(new IterableType());
335         addResolver(new IterableElement());
336         addResolver(new Todo());
337     }
338     
339
340     /*
341      * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, org.eclipse.jdt.core.ICompilationUnit)
342      */

343     public CompilationUnitContext createContext(IDocument document, int offset, int length, ICompilationUnit compilationUnit) {
344         return new JavaContext(this, document, offset, length, compilationUnit);
345     }
346
347     /*
348      * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.Position, org.eclipse.jdt.core.ICompilationUnit)
349      */

350     public CompilationUnitContext createContext(IDocument document, Position completionPosition, ICompilationUnit compilationUnit) {
351         return new JavaContext(this, document, completionPosition, compilationUnit);
352     }
353 }
354
Popular Tags