PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/bundles/plugins-trunk/XML/sidekick/ecmascript/parser/EcmaScriptVisitorAdapter.java

#
Java | 351 lines | 262 code | 68 blank | 21 comment | 10 complexity | c9e36859605cc654264c67ee15eabb87 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. /*
  2. Copyright (c) 2004-2005, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml <http://dojotoolkit.org/community/licensing.shtml>
  7. Code donated to the Dojo Foundation by AOL LLC under the terms of
  8. the Dojo CCLA (http://dojotoolkit.org/ccla.txt).
  9. */
  10. package sidekick.ecmascript.parser;
  11. import java.util.*;
  12. import sidekick.ecmascript.parser.ASTAllocationExpression;
  13. import sidekick.ecmascript.parser.ASTAndExpressionSequence;
  14. import sidekick.ecmascript.parser.ASTArrayLiteral;
  15. import sidekick.ecmascript.parser.ASTAssignmentExpression;
  16. import sidekick.ecmascript.parser.ASTBinaryExpressionSequence;
  17. import sidekick.ecmascript.parser.ASTBreakStatement;
  18. import sidekick.ecmascript.parser.ASTCaseGroup;
  19. import sidekick.ecmascript.parser.ASTCaseGroups;
  20. import sidekick.ecmascript.parser.ASTCaseGuard;
  21. import sidekick.ecmascript.parser.ASTCatchClause;
  22. import sidekick.ecmascript.parser.ASTConditionalExpression;
  23. import sidekick.ecmascript.parser.ASTContinueStatement;
  24. import sidekick.ecmascript.parser.ASTDoStatement;
  25. import sidekick.ecmascript.parser.ASTEmptyExpression;
  26. import sidekick.ecmascript.parser.ASTEmptyStatement;
  27. import sidekick.ecmascript.parser.ASTExpressionList;
  28. import sidekick.ecmascript.parser.ASTExpressionStatement;
  29. import sidekick.ecmascript.parser.ASTFinallyClause;
  30. import sidekick.ecmascript.parser.ASTForInStatement;
  31. import sidekick.ecmascript.parser.ASTForStatement;
  32. import sidekick.ecmascript.parser.ASTForVarInStatement;
  33. import sidekick.ecmascript.parser.ASTForVarStatement;
  34. import sidekick.ecmascript.parser.ASTFormalParameterList;
  35. import sidekick.ecmascript.parser.ASTFunctionCallParameters;
  36. import sidekick.ecmascript.parser.ASTFunctionExpression;
  37. import sidekick.ecmascript.parser.ASTIfStatement;
  38. import sidekick.ecmascript.parser.ASTLiteralField;
  39. import sidekick.ecmascript.parser.ASTObjectLiteral;
  40. import sidekick.ecmascript.parser.ASTOrExpressionSequence;
  41. import sidekick.ecmascript.parser.ASTParenExpression;
  42. import sidekick.ecmascript.parser.ASTPostfixExpression;
  43. import sidekick.ecmascript.parser.ASTPropertyIdentifierReference;
  44. import sidekick.ecmascript.parser.ASTPropertyValueReference;
  45. import sidekick.ecmascript.parser.ASTReturnStatement;
  46. import sidekick.ecmascript.parser.ASTStatementList;
  47. import sidekick.ecmascript.parser.ASTSwitchStatement;
  48. import sidekick.ecmascript.parser.ASTThisReference;
  49. import sidekick.ecmascript.parser.ASTThrowStatement;
  50. import sidekick.ecmascript.parser.ASTTryStatement;
  51. import sidekick.ecmascript.parser.ASTUnaryExpression;
  52. import sidekick.ecmascript.parser.ASTVariableDeclaration;
  53. import sidekick.ecmascript.parser.ASTVariableDeclarationList;
  54. import sidekick.ecmascript.parser.ASTVariableStatement;
  55. import sidekick.ecmascript.parser.ASTWhileStatement;
  56. import sidekick.ecmascript.parser.ASTWithStatement;
  57. import sidekick.ecmascript.parser.EcmaScriptVisitor;
  58. public class EcmaScriptVisitorAdapter extends Object implements
  59. EcmaScriptVisitor {
  60. protected LinkedList scopes;
  61. protected ASTFunctionDeclaration enteringFunction;
  62. protected EcmaScriptVisitorDelegate delegate;
  63. protected EcmaScriptVisitorAdapter() {
  64. this(null);
  65. }
  66. public EcmaScriptVisitorAdapter(EcmaScriptVisitorDelegate delegate) {
  67. super();
  68. this.delegate = delegate;
  69. scopes = new LinkedList();
  70. }
  71. public SimpleNode getScope() {
  72. return scopes.size() == 0 ? null : (SimpleNode) scopes.getLast();
  73. }
  74. protected void pre(SimpleNode node, Object data) {
  75. if (delegate != null) {
  76. delegate.willVisit(node, data);
  77. }
  78. }
  79. protected void post(SimpleNode node, Object data) {
  80. if (delegate != null) {
  81. delegate.didVisit(node, data);
  82. }
  83. }
  84. protected Object visitImpl(SimpleNode node, Object data) {
  85. pre(node, data);
  86. data = node.childrenAccept(this, data);
  87. post(node, data);
  88. return data;
  89. }
  90. public Object visit(SimpleNode node, Object data) {
  91. return visitImpl(node, data);
  92. }
  93. public Object visit(ASTLiteral node, Object data) {
  94. return visitImpl(node, data);
  95. }
  96. public Object visit(ASTIdentifier node, Object data) {
  97. return visitImpl(node, data);
  98. }
  99. public Object visit(ASTObjectLiteral node, Object data) {
  100. return visitImpl(node, data);
  101. }
  102. public Object visit(ASTLiteralField node, Object data) {
  103. return visitImpl(node, data);
  104. }
  105. public Object visit(ASTArrayLiteral node, Object data) {
  106. return visitImpl(node, data);
  107. }
  108. public Object visit(ASTThisReference node, Object data) {
  109. return visitImpl(node, data);
  110. }
  111. public Object visit(ASTCompositeReference node, Object data) {
  112. return visitImpl(node, data);
  113. }
  114. public Object visit(ASTFunctionCallParameters node, Object data) {
  115. return visitImpl(node, data);
  116. }
  117. public Object visit(ASTFunctionExpression node, Object data) {
  118. return visitImpl(node, data);
  119. }
  120. public Object visit(ASTPropertyValueReference node, Object data) {
  121. return visitImpl(node, data);
  122. }
  123. public Object visit(ASTPropertyIdentifierReference node, Object data) {
  124. return visitImpl(node, data);
  125. }
  126. public Object visit(ASTAllocationExpression node, Object data) {
  127. return visitImpl(node, data);
  128. }
  129. public Object visit(ASTParenExpression node, Object data) {
  130. return visitImpl(node, data);
  131. }
  132. public Object visit(ASTOperator node, Object data) {
  133. return visitImpl(node, data);
  134. }
  135. public Object visit(ASTPostfixExpression node, Object data) {
  136. return visitImpl(node, data);
  137. }
  138. public Object visit(ASTUnaryExpression node, Object data) {
  139. return visitImpl(node, data);
  140. }
  141. public Object visit(ASTBinaryExpressionSequence node, Object data) {
  142. return visitImpl(node, data);
  143. }
  144. public Object visit(ASTAndExpressionSequence node, Object data) {
  145. return visitImpl(node, data);
  146. }
  147. public Object visit(ASTOrExpressionSequence node, Object data) {
  148. return visitImpl(node, data);
  149. }
  150. public Object visit(ASTConditionalExpression node, Object data) {
  151. return visitImpl(node, data);
  152. }
  153. public Object visit(ASTAssignmentExpression node, Object data) {
  154. return visitImpl(node, data);
  155. }
  156. public Object visit(ASTExpressionList node, Object data) {
  157. return visitImpl(node, data);
  158. }
  159. public Object visit(ASTStatementList node, Object data) {
  160. return visitImpl(node, data);
  161. }
  162. public Object visit(ASTVariableDeclaration node, Object data) {
  163. return visitImpl(node, data);
  164. }
  165. public Object visit(ASTExpressionStatement node, Object data) {
  166. return visitImpl(node, data);
  167. }
  168. public Object visit(ASTIfStatement node, Object data) {
  169. return visitImpl(node, data);
  170. }
  171. public Object visit(ASTWhileStatement node, Object data) {
  172. return visitImpl(node, data);
  173. }
  174. public Object visit(ASTForStatement node, Object data) {
  175. return visitImpl(node, data);
  176. }
  177. public Object visit(ASTEmptyExpression node, Object data) {
  178. return visitImpl(node, data);
  179. }
  180. public Object visit(ASTForVarStatement node, Object data) {
  181. return visitImpl(node, data);
  182. }
  183. public Object visit(ASTForInStatement node, Object data) {
  184. return visitImpl(node, data);
  185. }
  186. public Object visit(ASTForVarInStatement node, Object data) {
  187. return visitImpl(node, data);
  188. }
  189. public Object visit(ASTContinueStatement node, Object data) {
  190. return visitImpl(node, data);
  191. }
  192. /*
  193. * public Object visit(ASTDebuggerStatement node, Object data) { return
  194. * visitImpl(node, data); }
  195. */
  196. public Object visit(ASTBreakStatement node, Object data) {
  197. return visitImpl(node, data);
  198. }
  199. public Object visit(ASTReturnStatement node, Object data) {
  200. return visitImpl(node, data);
  201. }
  202. public Object visit(ASTWithStatement node, Object data) {
  203. return visitImpl(node, data);
  204. }
  205. public Object visit(ASTFunctionDeclaration node, Object data) {
  206. pre(node, data);
  207. enteringFunction = node;
  208. data = node.childrenAccept(this, data);
  209. post(node, data);
  210. return data;
  211. }
  212. public Object visit(ASTFormalParameterList node, Object data) {
  213. return visitImpl(node, data);
  214. }
  215. /*
  216. * public Object visit(ASTActiveXReference node, Object data) { return
  217. * visitImpl(node, data); }
  218. */
  219. public Object visit(ASTBlock node, Object data) {
  220. boolean addedScope = false;
  221. if ((enteringFunction != null)
  222. && (node.jjtGetParent() == enteringFunction)) {
  223. scopes.add(node);
  224. addedScope = true;
  225. enteringFunction = null;
  226. }
  227. pre(node, data);
  228. data = node.childrenAccept(this, data);
  229. post(node, data);
  230. if (addedScope) {
  231. scopes.removeLast();
  232. }
  233. return data;
  234. }
  235. public Object visit(ASTSwitchStatement node, Object data) {
  236. return visitImpl(node, data);
  237. }
  238. public Object visit(ASTCaseGroups node, Object data) {
  239. return visitImpl(node, data);
  240. }
  241. public Object visit(ASTCaseGroup node, Object data) {
  242. return visitImpl(node, data);
  243. }
  244. public Object visit(ASTCaseGuard node, Object data) {
  245. return visitImpl(node, data);
  246. }
  247. public Object visit(ASTTryStatement node, Object data) {
  248. return visitImpl(node, data);
  249. }
  250. public Object visit(ASTCatchClause node, Object data) {
  251. return visitImpl(node, data);
  252. }
  253. public Object visit(ASTFinallyClause node, Object data) {
  254. return visitImpl(node, data);
  255. }
  256. public Object visit(ASTThrowStatement node, Object data) {
  257. return visitImpl(node, data);
  258. }
  259. public Object visit(ASTDoStatement node, Object data) {
  260. return visitImpl(node, data);
  261. }
  262. public Object visit(ASTVariableStatement node, Object data) {
  263. return visitImpl(node, data);
  264. }
  265. public Object visit(ASTVariableDeclarationList node, Object data) {
  266. return visitImpl(node, data);
  267. }
  268. public Object visit(ASTEmptyStatement node, Object data) {
  269. return visitImpl(node, data);
  270. }
  271. public Object visit(ASTProgram node, Object data) {
  272. scopes.add(node);
  273. pre(node, data);
  274. data = node.childrenAccept(this, data);
  275. post(node, data);
  276. scopes.removeLast();
  277. return data;
  278. }
  279. }