EMMA Coverage Report (generated Thu Dec 06 15:52:10 GMT 2007)
[all classes][com.sun.tools.javac.tree]

COVERAGE SUMMARY FOR SOURCE FILE [TreeTranslator.java]

nameclass, %method, %block, %line, %
TreeTranslator.java100% (1/1)19%  (11/58)20%  (179/911)19%  (40.1/212)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TreeTranslator100% (1/1)19%  (11/58)20%  (179/911)19%  (40.1/212)
translateCases (List): List 0%   (0/1)0%   (0/18)0%   (0/3)
translateCatchers (List): List 0%   (0/1)0%   (0/18)0%   (0/3)
visitAnnotation (JCTree$JCAnnotation): void 0%   (0/1)0%   (0/16)0%   (0/4)
visitApply (JCTree$JCMethodInvocation): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitAssert (JCTree$JCAssert): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitAssign (JCTree$JCAssign): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitAssignop (JCTree$JCAssignOp): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitBinary (JCTree$JCBinary): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitBreak (JCTree$JCBreak): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitCase (JCTree$JCCase): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitCatch (JCTree$JCCatch): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitConditional (JCTree$JCConditional): void 0%   (0/1)0%   (0/25)0%   (0/5)
visitContinue (JCTree$JCContinue): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitDoLoop (JCTree$JCDoWhileLoop): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitErroneous (JCTree$JCErroneous): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitForLoop (JCTree$JCForLoop): void 0%   (0/1)0%   (0/30)0%   (0/6)
visitForeachLoop (JCTree$JCEnhancedForLoop): void 0%   (0/1)0%   (0/25)0%   (0/5)
visitIdent (JCTree$JCIdent): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitIf (JCTree$JCIf): void 0%   (0/1)0%   (0/25)0%   (0/5)
visitImport (JCTree$JCImport): void 0%   (0/1)0%   (0/10)0%   (0/3)
visitIndexed (JCTree$JCArrayAccess): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitLabelled (JCTree$JCLabeledStatement): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitLetExpr (JCTree$LetExpr): void 0%   (0/1)0%   (0/16)0%   (0/4)
visitLiteral (JCTree$JCLiteral): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitNewArray (JCTree$JCNewArray): void 0%   (0/1)0%   (0/23)0%   (0/5)
visitNewClass (JCTree$JCNewClass): void 0%   (0/1)0%   (0/31)0%   (0/6)
visitParens (JCTree$JCParens): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitReturn (JCTree$JCReturn): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitSelect (JCTree$JCFieldAccess): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitSkip (JCTree$JCSkip): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitSwitch (JCTree$JCSwitch): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitSynchronized (JCTree$JCSynchronized): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitThrow (JCTree$JCThrow): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitTopLevel (JCTree$JCCompilationUnit): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitTree (JCTree): void 0%   (0/1)0%   (0/5)0%   (0/1)
visitTry (JCTree$JCTry): void 0%   (0/1)0%   (0/24)0%   (0/5)
visitTypeApply (JCTree$JCTypeApply): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitTypeArray (JCTree$JCArrayTypeTree): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitTypeBoundKind (JCTree$TypeBoundKind): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitTypeCast (JCTree$JCTypeCast): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitTypeIdent (JCTree$JCPrimitiveTypeTree): void 0%   (0/1)0%   (0/4)0%   (0/2)
visitTypeParameter (JCTree$JCTypeParameter): void 0%   (0/1)0%   (0/10)0%   (0/3)
visitTypeTest (JCTree$JCInstanceOf): void 0%   (0/1)0%   (0/17)0%   (0/4)
visitUnary (JCTree$JCUnary): void 0%   (0/1)0%   (0/11)0%   (0/3)
visitVarDef (JCTree$JCVariableDecl): void 0%   (0/1)0%   (0/25)0%   (0/5)
visitWhileLoop (JCTree$JCWhileLoop): void 0%   (0/1)0%   (0/18)0%   (0/4)
visitWildcard (JCTree$JCWildcard): void 0%   (0/1)0%   (0/17)0%   (0/4)
translateAnnotations (List): List 100% (1/1)39%  (7/18)44%  (1.3/3)
translateTypeParams (List): List 100% (1/1)39%  (7/18)44%  (1.3/3)
translate (List): List 100% (1/1)91%  (20/22)88%  (3.5/4)
TreeTranslator (): void 100% (1/1)100% (3/3)100% (1/1)
translate (JCTree): JCTree 100% (1/1)100% (15/15)100% (6/6)
translateVarDefs (List): List 100% (1/1)100% (18/18)100% (3/3)
visitBlock (JCTree$JCBlock): void 100% (1/1)100% (10/10)100% (3/3)
visitClassDef (JCTree$JCClassDecl): void 100% (1/1)100% (35/35)100% (7/7)
visitExec (JCTree$JCExpressionStatement): void 100% (1/1)100% (11/11)100% (3/3)
visitMethodDef (JCTree$JCMethodDecl): void 100% (1/1)100% (43/43)100% (8/8)
visitModifiers (JCTree$JCModifiers): void 100% (1/1)100% (10/10)100% (3/3)

1/*
2 * Copyright 1999-2006 Sun Microsystems, Inc.  All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25 
26package com.sun.tools.javac.tree;
27 
28import com.sun.tools.javac.util.*;
29import com.sun.tools.javac.tree.JCTree.*;
30 
31/** A subclass of Tree.Visitor, this class defines
32 *  a general tree translator pattern. Translation proceeds recursively in
33 *  left-to-right order down a tree, constructing translated nodes by
34 *  overwriting existing ones. There is one visitor method in this class
35 *  for every possible kind of tree node.  To obtain a specific
36 *  translator, it suffices to override those visitor methods which
37 *  do some interesting work. The translator class itself takes care of all
38 *  navigational aspects.
39 *
40 *  <p><b>This is NOT part of any API supported by Sun Microsystems.  If
41 *  you write code that depends on this, you do so at your own risk.
42 *  This code and its internal interfaces are subject to change or
43 *  deletion without notice.</b>
44 */
45public class TreeTranslator extends JCTree.Visitor {
46 
47    /** Visitor result field: a tree
48     */
49    protected JCTree result;
50 
51    /** Visitor method: Translate a single node.
52     */
53    @SuppressWarnings("unchecked")
54    public <T extends JCTree> T translate(T tree) {
55        if (tree == null) {
56            return null;
57        } else {
58            tree.accept(this);
59            JCTree result = this.result;
60            this.result = null;
61            return (T)result; // XXX cast
62        }
63    }
64 
65    /** Visitor method: translate a list of nodes.
66     */
67    public <T extends JCTree> List<T> translate(List<T> trees) {
68        if (trees == null) return null;
69        for (List<T> l = trees; l.nonEmpty(); l = l.tail)
70            l.head = translate(l.head);
71        return trees;
72    }
73 
74    /**  Visitor method: translate a list of variable definitions.
75     */
76    public List<JCVariableDecl> translateVarDefs(List<JCVariableDecl> trees) {
77        for (List<JCVariableDecl> l = trees; l.nonEmpty(); l = l.tail)
78            l.head = translate(l.head);
79        return trees;
80    }
81 
82    /**  Visitor method: translate a list of type parameters.
83     */
84    public List<JCTypeParameter> translateTypeParams(List<JCTypeParameter> trees) {
85        for (List<JCTypeParameter> l = trees; l.nonEmpty(); l = l.tail)
86            l.head = translate(l.head);
87        return trees;
88    }
89 
90    /**  Visitor method: translate a list of case parts of switch statements.
91     */
92    public List<JCCase> translateCases(List<JCCase> trees) {
93        for (List<JCCase> l = trees; l.nonEmpty(); l = l.tail)
94            l.head = translate(l.head);
95        return trees;
96    }
97 
98    /**  Visitor method: translate a list of catch clauses in try statements.
99     */
100    public List<JCCatch> translateCatchers(List<JCCatch> trees) {
101        for (List<JCCatch> l = trees; l.nonEmpty(); l = l.tail)
102            l.head = translate(l.head);
103        return trees;
104    }
105 
106    /**  Visitor method: translate a list of catch clauses in try statements.
107     */
108    public List<JCAnnotation> translateAnnotations(List<JCAnnotation> trees) {
109        for (List<JCAnnotation> l = trees; l.nonEmpty(); l = l.tail)
110            l.head = translate(l.head);
111        return trees;
112    }
113 
114/* ***************************************************************************
115 * Visitor methods
116 ****************************************************************************/
117 
118    public void visitTopLevel(JCCompilationUnit tree) {
119        tree.pid = translate(tree.pid);
120        tree.defs = translate(tree.defs);
121        result = tree;
122    }
123 
124    public void visitImport(JCImport tree) {
125        tree.qualid = translate(tree.qualid);
126        result = tree;
127    }
128 
129    public void visitClassDef(JCClassDecl tree) {
130        tree.mods = translate(tree.mods);
131        tree.typarams = translateTypeParams(tree.typarams);
132        tree.extending = translate(tree.extending);
133        tree.implementing = translate(tree.implementing);
134        tree.defs = translate(tree.defs);
135        result = tree;
136    }
137 
138    public void visitMethodDef(JCMethodDecl tree) {
139        tree.mods = translate(tree.mods);
140        tree.restype = translate(tree.restype);
141        tree.typarams = translateTypeParams(tree.typarams);
142        tree.params = translateVarDefs(tree.params);
143        tree.thrown = translate(tree.thrown);
144        tree.body = translate(tree.body);
145        result = tree;
146    }
147 
148    public void visitVarDef(JCVariableDecl tree) {
149        tree.mods = translate(tree.mods);
150        tree.vartype = translate(tree.vartype);
151        tree.init = translate(tree.init);
152        result = tree;
153    }
154 
155    public void visitSkip(JCSkip tree) {
156        result = tree;
157    }
158 
159    public void visitBlock(JCBlock tree) {
160        tree.stats = translate(tree.stats);
161        result = tree;
162    }
163 
164    public void visitDoLoop(JCDoWhileLoop tree) {
165        tree.body = translate(tree.body);
166        tree.cond = translate(tree.cond);
167        result = tree;
168    }
169 
170    public void visitWhileLoop(JCWhileLoop tree) {
171        tree.cond = translate(tree.cond);
172        tree.body = translate(tree.body);
173        result = tree;
174    }
175 
176    public void visitForLoop(JCForLoop tree) {
177        tree.init = translate(tree.init);
178        tree.cond = translate(tree.cond);
179        tree.step = translate(tree.step);
180        tree.body = translate(tree.body);
181        result = tree;
182    }
183 
184    public void visitForeachLoop(JCEnhancedForLoop tree) {
185        tree.var = translate(tree.var);
186        tree.expr = translate(tree.expr);
187        tree.body = translate(tree.body);
188        result = tree;
189    }
190 
191    public void visitLabelled(JCLabeledStatement tree) {
192        tree.body = translate(tree.body);
193        result = tree;
194    }
195 
196    public void visitSwitch(JCSwitch tree) {
197        tree.selector = translate(tree.selector);
198        tree.cases = translateCases(tree.cases);
199        result = tree;
200    }
201 
202    public void visitCase(JCCase tree) {
203        tree.pat = translate(tree.pat);
204        tree.stats = translate(tree.stats);
205        result = tree;
206    }
207 
208    public void visitSynchronized(JCSynchronized tree) {
209        tree.lock = translate(tree.lock);
210        tree.body = translate(tree.body);
211        result = tree;
212    }
213 
214    public void visitTry(JCTry tree) {
215        tree.body = translate(tree.body);
216        tree.catchers = translateCatchers(tree.catchers);
217        tree.finalizer = translate(tree.finalizer);
218        result = tree;
219    }
220 
221    public void visitCatch(JCCatch tree) {
222        tree.param = translate(tree.param);
223        tree.body = translate(tree.body);
224        result = tree;
225    }
226 
227    public void visitConditional(JCConditional tree) {
228        tree.cond = translate(tree.cond);
229        tree.truepart = translate(tree.truepart);
230        tree.falsepart = translate(tree.falsepart);
231        result = tree;
232    }
233 
234    public void visitIf(JCIf tree) {
235        tree.cond = translate(tree.cond);
236        tree.thenpart = translate(tree.thenpart);
237        tree.elsepart = translate(tree.elsepart);
238        result = tree;
239    }
240 
241    public void visitExec(JCExpressionStatement tree) {
242        tree.expr = translate(tree.expr);
243        result = tree;
244    }
245 
246    public void visitBreak(JCBreak tree) {
247        result = tree;
248    }
249 
250    public void visitContinue(JCContinue tree) {
251        result = tree;
252    }
253 
254    public void visitReturn(JCReturn tree) {
255        tree.expr = translate(tree.expr);
256        result = tree;
257    }
258 
259    public void visitThrow(JCThrow tree) {
260        tree.expr = translate(tree.expr);
261        result = tree;
262    }
263 
264    public void visitAssert(JCAssert tree) {
265        tree.cond = translate(tree.cond);
266        tree.detail = translate(tree.detail);
267        result = tree;
268    }
269 
270    public void visitApply(JCMethodInvocation tree) {
271        tree.meth = translate(tree.meth);
272        tree.args = translate(tree.args);
273        result = tree;
274    }
275 
276    public void visitNewClass(JCNewClass tree) {
277        tree.encl = translate(tree.encl);
278        tree.clazz = translate(tree.clazz);
279        tree.args = translate(tree.args);
280        tree.def = translate(tree.def);
281        result = tree;
282    }
283 
284    public void visitNewArray(JCNewArray tree) {
285        tree.elemtype = translate(tree.elemtype);
286        tree.dims = translate(tree.dims);
287        tree.elems = translate(tree.elems);
288        result = tree;
289    }
290 
291    public void visitParens(JCParens tree) {
292        tree.expr = translate(tree.expr);
293        result = tree;
294    }
295 
296    public void visitAssign(JCAssign tree) {
297        tree.lhs = translate(tree.lhs);
298        tree.rhs = translate(tree.rhs);
299        result = tree;
300    }
301 
302    public void visitAssignop(JCAssignOp tree) {
303        tree.lhs = translate(tree.lhs);
304        tree.rhs = translate(tree.rhs);
305        result = tree;
306    }
307 
308    public void visitUnary(JCUnary tree) {
309        tree.arg = translate(tree.arg);
310        result = tree;
311    }
312 
313    public void visitBinary(JCBinary tree) {
314        tree.lhs = translate(tree.lhs);
315        tree.rhs = translate(tree.rhs);
316        result = tree;
317    }
318 
319    public void visitTypeCast(JCTypeCast tree) {
320        tree.clazz = translate(tree.clazz);
321        tree.expr = translate(tree.expr);
322        result = tree;
323    }
324 
325    public void visitTypeTest(JCInstanceOf tree) {
326        tree.expr = translate(tree.expr);
327        tree.clazz = translate(tree.clazz);
328        result = tree;
329    }
330 
331    public void visitIndexed(JCArrayAccess tree) {
332        tree.indexed = translate(tree.indexed);
333        tree.index = translate(tree.index);
334        result = tree;
335    }
336 
337    public void visitSelect(JCFieldAccess tree) {
338        tree.selected = translate(tree.selected);
339        result = tree;
340    }
341 
342    public void visitIdent(JCIdent tree) {
343        result = tree;
344    }
345 
346    public void visitLiteral(JCLiteral tree) {
347        result = tree;
348    }
349 
350    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
351        result = tree;
352    }
353 
354    public void visitTypeArray(JCArrayTypeTree tree) {
355        tree.elemtype = translate(tree.elemtype);
356        result = tree;
357    }
358 
359    public void visitTypeApply(JCTypeApply tree) {
360        tree.clazz = translate(tree.clazz);
361        tree.arguments = translate(tree.arguments);
362        result = tree;
363    }
364 
365    public void visitTypeParameter(JCTypeParameter tree) {
366        tree.bounds = translate(tree.bounds);
367        result = tree;
368    }
369 
370    @Override
371    public void visitWildcard(JCWildcard tree) {
372        tree.kind = translate(tree.kind);
373        tree.inner = translate(tree.inner);
374        result = tree;
375    }
376 
377    @Override
378    public void visitTypeBoundKind(TypeBoundKind tree) {
379        result = tree;
380    }
381 
382    public void visitErroneous(JCErroneous tree) {
383        result = tree;
384    }
385 
386    public void visitLetExpr(LetExpr tree) {
387        tree.defs = translateVarDefs(tree.defs);
388        tree.expr = translate(tree.expr);
389        result = tree;
390    }
391 
392    public void visitModifiers(JCModifiers tree) {
393        tree.annotations = translateAnnotations(tree.annotations);
394        result = tree;
395    }
396 
397    public void visitAnnotation(JCAnnotation tree) {
398        tree.annotationType = translate(tree.annotationType);
399        tree.args = translate(tree.args);
400        result = tree;
401    }
402 
403    public void visitTree(JCTree tree) {
404        throw new AssertionError(tree);
405    }
406}

[all classes][com.sun.tools.javac.tree]
EMMA 2.0.5312 (C) Vladimir Roubtsov