/plugins/PHPParser/tags/PHPParser-1.4.2/src/net/sourceforge/phpdt/internal/compiler/ast/ForStatement.java

# · Java · 232 lines · 185 code · 12 blank · 35 comment · 66 complexity · 596c171e3e37e34b8fa9deb6708cf37b MD5 · raw file

  1. package net.sourceforge.phpdt.internal.compiler.ast;
  2. import gatchan.phpparser.parser.PHPParser;
  3. import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
  4. import java.util.List;
  5. /**
  6. * A For statement.
  7. * for(initializations;condition;increments) action
  8. *
  9. * @author Matthieu Casanova
  10. */
  11. public class ForStatement extends Statement
  12. {
  13. /**
  14. * the initializations.
  15. */
  16. private final Expression[] initializations;
  17. /**
  18. * the condition.
  19. */
  20. private final Expression condition;
  21. /**
  22. * the increments.
  23. */
  24. private final Expression[] increments;
  25. private final Statement action;
  26. public ForStatement(Expression[] initializations,
  27. Expression condition,
  28. Expression[] increments,
  29. Statement action,
  30. int sourceStart,
  31. int sourceEnd,
  32. int beginLine,
  33. int endLine,
  34. int beginColumn,
  35. int endColumn)
  36. {
  37. super(sourceStart, sourceEnd, beginLine, endLine, beginColumn, endColumn);
  38. this.initializations = initializations;
  39. this.condition = condition;
  40. this.increments = increments;
  41. this.action = action;
  42. }
  43. @Override
  44. public String toString(int tab)
  45. {
  46. StringBuilder buff = new StringBuilder(tabString(tab));
  47. buff.append("for ("); //$NON-NLS-1$
  48. //inits
  49. if (initializations != null)
  50. {
  51. for (int i = 0; i < initializations.length; i++)
  52. {
  53. buff.append(initializations[i].toStringExpression());
  54. if (i != (initializations.length - 1))
  55. buff.append(" , ");
  56. }
  57. }
  58. buff.append("; ");
  59. //cond
  60. if (condition != null)
  61. {
  62. buff.append(condition.toStringExpression());
  63. }
  64. buff.append("; ");
  65. //updates
  66. if (increments != null)
  67. {
  68. for (int i = 0; i < increments.length; i++)
  69. {
  70. //nice only with expressions
  71. buff.append(increments[i].toStringExpression());
  72. if (i != (increments.length - 1))
  73. buff.append(" , ");
  74. }
  75. }
  76. buff.append(") ");
  77. //block
  78. if (action == null)
  79. buff.append("{}");
  80. else
  81. buff.append(action.toString(tab + 1));
  82. return buff.toString();
  83. }
  84. /**
  85. * Get the variables from outside (parameters, globals ...)
  86. *
  87. * @param list the list where we will put variables
  88. */
  89. @Override
  90. public void getOutsideVariable(List<VariableUsage> list)
  91. {
  92. if (condition != null)
  93. {
  94. condition.getOutsideVariable(list);
  95. }
  96. if (action != null)
  97. {
  98. action.getOutsideVariable(list);
  99. }
  100. if (initializations != null)
  101. {
  102. for (int i = 0; i < initializations.length; i++)
  103. {
  104. initializations[i].getOutsideVariable(list);
  105. }
  106. }
  107. if (increments != null)
  108. {
  109. for (int i = 0; i < increments.length; i++)
  110. {
  111. increments[i].getOutsideVariable(list);
  112. }
  113. }
  114. }
  115. /**
  116. * get the modified variables.
  117. *
  118. * @param list the list where we will put variables
  119. */
  120. @Override
  121. public void getModifiedVariable(List<VariableUsage> list)
  122. {
  123. if (condition != null)
  124. {
  125. condition.getModifiedVariable(list);
  126. }
  127. if (action != null)
  128. {
  129. action.getModifiedVariable(list);
  130. }
  131. if (initializations != null)
  132. {
  133. for (int i = 0; i < initializations.length; i++)
  134. {
  135. initializations[i].getModifiedVariable(list);
  136. }
  137. }
  138. if (increments != null)
  139. {
  140. for (int i = 0; i < increments.length; i++)
  141. {
  142. increments[i].getModifiedVariable(list);
  143. }
  144. }
  145. }
  146. /**
  147. * Get the variables used.
  148. *
  149. * @param list the list where we will put variables
  150. */
  151. @Override
  152. public void getUsedVariable(List<VariableUsage> list)
  153. {
  154. if (condition != null)
  155. {
  156. condition.getUsedVariable(list);
  157. }
  158. if (action != null)
  159. {
  160. action.getUsedVariable(list);
  161. }
  162. if (initializations != null)
  163. {
  164. for (int i = 0; i < initializations.length; i++)
  165. {
  166. initializations[i].getUsedVariable(list);
  167. }
  168. }
  169. if (increments != null)
  170. {
  171. for (int i = 0; i < increments.length; i++)
  172. {
  173. increments[i].getUsedVariable(list);
  174. }
  175. }
  176. }
  177. @Override
  178. public AstNode subNodeAt(int line, int column)
  179. {
  180. if (condition != null && condition.isAt(line, column)) return condition;
  181. if (action != null && action.isAt(line, column)) return action.subNodeAt(line, column);
  182. if (initializations != null)
  183. {
  184. for (int i = 0; i < initializations.length; i++)
  185. {
  186. Expression initialization = initializations[i];
  187. if (initialization.isAt(line, column)) return initialization;
  188. }
  189. }
  190. if (increments != null)
  191. {
  192. for (int i = 0; i < increments.length; i++)
  193. {
  194. Expression increment = increments[i];
  195. if (increment.isAt(line, column)) return increment;
  196. }
  197. }
  198. return null;
  199. }
  200. @Override
  201. public void analyzeCode(PHPParser parser)
  202. {
  203. if (initializations != null)
  204. {
  205. for (int i = 0; i < initializations.length; i++)
  206. {
  207. initializations[i].analyzeCode(parser);
  208. }
  209. }
  210. if (condition != null) condition.analyzeCode(parser);
  211. if (increments != null)
  212. {
  213. for (int i = 0; i < increments.length; i++)
  214. {
  215. increments[i].analyzeCode(parser);
  216. }
  217. }
  218. action.analyzeCode(parser);
  219. }
  220. }