1 package net.sourceforge.pmd.lang.jsp.ast;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.io.Writer;
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import net.sourceforge.pmd.lang.ast.Node;
10
11 public class DumpFacade extends JspParserVisitorAdapter {
12
13 private PrintWriter writer;
14 private boolean recurse;
15
16 public void initializeWith(Writer writer, String prefix, boolean recurse, JspNode node) {
17 this.writer = (writer instanceof PrintWriter) ? (PrintWriter) writer : new PrintWriter(writer);
18 this.recurse = recurse;
19 this.visit(node, prefix);
20 try {
21 writer.flush();
22 } catch (IOException e) {
23 throw new RuntimeException("Problem flushing PrintWriter.", e);
24 }
25 }
26
27 @Override
28 public Object visit(JspNode node, Object data) {
29 dump(node, (String) data);
30 if (recurse) {
31 return super.visit(node, data + " ");
32 } else {
33 return data;
34 }
35 }
36
37 private void dump(Node node, String prefix) {
38
39
40
41
42
43 writer.print(prefix);
44
45
46 writer.print(node.toString());
47
48
49
50
51
52
53
54
55
56 String image = node.getImage();
57
58
59 List<String> extras = new ArrayList<String>();
60
61
62 if (node instanceof ASTAttribute) {
63 extras.add("name=[" + ((ASTAttribute) node).getName() + "]");
64 } else if (node instanceof ASTDeclaration) {
65 extras.add("name=[" + ((ASTDeclaration) node).getName() + "]");
66 } else if (node instanceof ASTDoctypeDeclaration) {
67 extras.add("name=[" + ((ASTDoctypeDeclaration) node).getName() + "]");
68 } else if (node instanceof ASTDoctypeExternalId) {
69 extras.add("uri=[" + ((ASTDoctypeExternalId) node).getUri() + "]");
70 if (((ASTDoctypeExternalId) node).getPublicId().length() > 0) {
71 extras.add("publicId=[" + ((ASTDoctypeExternalId) node).getPublicId() + "]");
72 }
73 } else if (node instanceof ASTElement) {
74 extras.add("name=[" + ((ASTElement) node).getName() + "]");
75 if (((ASTElement) node).isEmpty()) {
76 extras.add("empty");
77 }
78 } else if (node instanceof ASTJspDirective) {
79 extras.add("name=[" + ((ASTJspDirective) node).getName() + "]");
80 } else if (node instanceof ASTJspDirectiveAttribute) {
81 extras.add("name=[" + ((ASTJspDirectiveAttribute) node).getName() + "]");
82 extras.add("value=[" + ((ASTJspDirectiveAttribute) node).getValue() + "]");
83 }
84
85
86 if (image != null || !extras.isEmpty()) {
87 writer.print(':');
88 if (image != null) {
89 writer.print(image);
90 }
91 for (String extra : extras) {
92 writer.print('(');
93 writer.print(extra);
94 writer.print(')');
95 }
96 }
97
98 writer.println();
99 }
100 }