/src/main/java/io/proleap/cobol/asg/metamodel/impl/ScopeImpl.java

https://github.com/uwol/proleap-cobol-parser · Java · 2028 lines · 1434 code · 450 blank · 144 comment · 444 complexity · 75b42de3280a6ca1950329379f0738de MD5 · raw file

Large files are truncated click here to view the full file

  1. /*
  2. * Copyright (C) 2017, Ulrich Wolffgang <u.wlauseol@wwu.de>
  3. * All rights reserved.
  4. *
  5. * This software may be modified and distributed under the terms
  6. * of the MIT license. See the LICENSE file for details.
  7. */
  8. package io.proleap.cobol.asg.metamodel.impl;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import org.antlr.v4.runtime.ParserRuleContext;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import io.proleap.cobol.CobolParser.AcceptStatementContext;
  15. import io.proleap.cobol.CobolParser.AddStatementContext;
  16. import io.proleap.cobol.CobolParser.AlterProceedToContext;
  17. import io.proleap.cobol.CobolParser.AlterStatementContext;
  18. import io.proleap.cobol.CobolParser.AtEndPhraseContext;
  19. import io.proleap.cobol.CobolParser.CallStatementContext;
  20. import io.proleap.cobol.CobolParser.CancelCallContext;
  21. import io.proleap.cobol.CobolParser.CancelStatementContext;
  22. import io.proleap.cobol.CobolParser.CdNameContext;
  23. import io.proleap.cobol.CobolParser.CloseFileContext;
  24. import io.proleap.cobol.CobolParser.CloseStatementContext;
  25. import io.proleap.cobol.CobolParser.ComputeStatementContext;
  26. import io.proleap.cobol.CobolParser.ComputeStoreContext;
  27. import io.proleap.cobol.CobolParser.ContinueStatementContext;
  28. import io.proleap.cobol.CobolParser.DeleteStatementContext;
  29. import io.proleap.cobol.CobolParser.DisableStatementContext;
  30. import io.proleap.cobol.CobolParser.DisplayOperandContext;
  31. import io.proleap.cobol.CobolParser.DisplayStatementContext;
  32. import io.proleap.cobol.CobolParser.DivideStatementContext;
  33. import io.proleap.cobol.CobolParser.EnableStatementContext;
  34. import io.proleap.cobol.CobolParser.EntryStatementContext;
  35. import io.proleap.cobol.CobolParser.EvaluateAlsoSelectContext;
  36. import io.proleap.cobol.CobolParser.EvaluateStatementContext;
  37. import io.proleap.cobol.CobolParser.EvaluateWhenPhraseContext;
  38. import io.proleap.cobol.CobolParser.ExecCicsStatementContext;
  39. import io.proleap.cobol.CobolParser.ExecSqlImsStatementContext;
  40. import io.proleap.cobol.CobolParser.ExecSqlStatementContext;
  41. import io.proleap.cobol.CobolParser.ExhibitOperandContext;
  42. import io.proleap.cobol.CobolParser.ExhibitStatementContext;
  43. import io.proleap.cobol.CobolParser.ExitStatementContext;
  44. import io.proleap.cobol.CobolParser.GenerateStatementContext;
  45. import io.proleap.cobol.CobolParser.GoToStatementContext;
  46. import io.proleap.cobol.CobolParser.GobackStatementContext;
  47. import io.proleap.cobol.CobolParser.IdentifierContext;
  48. import io.proleap.cobol.CobolParser.IfStatementContext;
  49. import io.proleap.cobol.CobolParser.InitializeStatementContext;
  50. import io.proleap.cobol.CobolParser.InitiateStatementContext;
  51. import io.proleap.cobol.CobolParser.InspectStatementContext;
  52. import io.proleap.cobol.CobolParser.InvalidKeyPhraseContext;
  53. import io.proleap.cobol.CobolParser.MergeGivingPhraseContext;
  54. import io.proleap.cobol.CobolParser.MergeOnKeyClauseContext;
  55. import io.proleap.cobol.CobolParser.MergeStatementContext;
  56. import io.proleap.cobol.CobolParser.MergeUsingContext;
  57. import io.proleap.cobol.CobolParser.MoveStatementContext;
  58. import io.proleap.cobol.CobolParser.MultiplyStatementContext;
  59. import io.proleap.cobol.CobolParser.NotAtEndPhraseContext;
  60. import io.proleap.cobol.CobolParser.NotInvalidKeyPhraseContext;
  61. import io.proleap.cobol.CobolParser.NotOnExceptionClauseContext;
  62. import io.proleap.cobol.CobolParser.NotOnOverflowPhraseContext;
  63. import io.proleap.cobol.CobolParser.NotOnSizeErrorPhraseContext;
  64. import io.proleap.cobol.CobolParser.OnExceptionClauseContext;
  65. import io.proleap.cobol.CobolParser.OnOverflowPhraseContext;
  66. import io.proleap.cobol.CobolParser.OnSizeErrorPhraseContext;
  67. import io.proleap.cobol.CobolParser.OpenExtendStatementContext;
  68. import io.proleap.cobol.CobolParser.OpenIOStatementContext;
  69. import io.proleap.cobol.CobolParser.OpenInputStatementContext;
  70. import io.proleap.cobol.CobolParser.OpenOutputStatementContext;
  71. import io.proleap.cobol.CobolParser.OpenStatementContext;
  72. import io.proleap.cobol.CobolParser.PerformStatementContext;
  73. import io.proleap.cobol.CobolParser.PurgeStatementContext;
  74. import io.proleap.cobol.CobolParser.ReadStatementContext;
  75. import io.proleap.cobol.CobolParser.ReceiveStatementContext;
  76. import io.proleap.cobol.CobolParser.ReleaseStatementContext;
  77. import io.proleap.cobol.CobolParser.ReportNameContext;
  78. import io.proleap.cobol.CobolParser.ReturnStatementContext;
  79. import io.proleap.cobol.CobolParser.RewriteStatementContext;
  80. import io.proleap.cobol.CobolParser.SearchStatementContext;
  81. import io.proleap.cobol.CobolParser.SearchWhenContext;
  82. import io.proleap.cobol.CobolParser.SendStatementContext;
  83. import io.proleap.cobol.CobolParser.SetStatementContext;
  84. import io.proleap.cobol.CobolParser.SetToStatementContext;
  85. import io.proleap.cobol.CobolParser.SortGivingPhraseContext;
  86. import io.proleap.cobol.CobolParser.SortOnKeyClauseContext;
  87. import io.proleap.cobol.CobolParser.SortStatementContext;
  88. import io.proleap.cobol.CobolParser.SortUsingContext;
  89. import io.proleap.cobol.CobolParser.StartStatementContext;
  90. import io.proleap.cobol.CobolParser.StatementContext;
  91. import io.proleap.cobol.CobolParser.StopStatementContext;
  92. import io.proleap.cobol.CobolParser.StringSendingPhraseContext;
  93. import io.proleap.cobol.CobolParser.StringStatementContext;
  94. import io.proleap.cobol.CobolParser.SubtractStatementContext;
  95. import io.proleap.cobol.CobolParser.TerminateStatementContext;
  96. import io.proleap.cobol.CobolParser.UnstringStatementContext;
  97. import io.proleap.cobol.CobolParser.WriteAtEndOfPagePhraseContext;
  98. import io.proleap.cobol.CobolParser.WriteNotAtEndOfPagePhraseContext;
  99. import io.proleap.cobol.CobolParser.WriteStatementContext;
  100. import io.proleap.cobol.asg.metamodel.ProgramUnit;
  101. import io.proleap.cobol.asg.metamodel.Scope;
  102. import io.proleap.cobol.asg.metamodel.call.Call;
  103. import io.proleap.cobol.asg.metamodel.procedure.AtEndPhrase;
  104. import io.proleap.cobol.asg.metamodel.procedure.InvalidKeyPhrase;
  105. import io.proleap.cobol.asg.metamodel.procedure.NotAtEndPhrase;
  106. import io.proleap.cobol.asg.metamodel.procedure.NotInvalidKeyPhrase;
  107. import io.proleap.cobol.asg.metamodel.procedure.NotOnExceptionClause;
  108. import io.proleap.cobol.asg.metamodel.procedure.NotOnOverflowPhrase;
  109. import io.proleap.cobol.asg.metamodel.procedure.NotOnSizeErrorPhrase;
  110. import io.proleap.cobol.asg.metamodel.procedure.OnExceptionClause;
  111. import io.proleap.cobol.asg.metamodel.procedure.OnOverflowPhrase;
  112. import io.proleap.cobol.asg.metamodel.procedure.OnSizeErrorPhrase;
  113. import io.proleap.cobol.asg.metamodel.procedure.Statement;
  114. import io.proleap.cobol.asg.metamodel.procedure.accept.AcceptStatement;
  115. import io.proleap.cobol.asg.metamodel.procedure.accept.AcceptStatement.AcceptType;
  116. import io.proleap.cobol.asg.metamodel.procedure.accept.impl.AcceptStatementImpl;
  117. import io.proleap.cobol.asg.metamodel.procedure.add.AddStatement;
  118. import io.proleap.cobol.asg.metamodel.procedure.add.impl.AddStatementImpl;
  119. import io.proleap.cobol.asg.metamodel.procedure.alter.AlterStatement;
  120. import io.proleap.cobol.asg.metamodel.procedure.alter.impl.AlterStatementImpl;
  121. import io.proleap.cobol.asg.metamodel.procedure.call.CallStatement;
  122. import io.proleap.cobol.asg.metamodel.procedure.call.impl.CallStatementImpl;
  123. import io.proleap.cobol.asg.metamodel.procedure.cancel.CancelStatement;
  124. import io.proleap.cobol.asg.metamodel.procedure.cancel.impl.CancelStatementImpl;
  125. import io.proleap.cobol.asg.metamodel.procedure.close.CloseStatement;
  126. import io.proleap.cobol.asg.metamodel.procedure.close.impl.CloseStatementImpl;
  127. import io.proleap.cobol.asg.metamodel.procedure.compute.ComputeStatement;
  128. import io.proleap.cobol.asg.metamodel.procedure.compute.impl.ComputeStatementImpl;
  129. import io.proleap.cobol.asg.metamodel.procedure.continuestmt.ContinueStatement;
  130. import io.proleap.cobol.asg.metamodel.procedure.continuestmt.impl.ContinueStatementImpl;
  131. import io.proleap.cobol.asg.metamodel.procedure.delete.DeleteStatement;
  132. import io.proleap.cobol.asg.metamodel.procedure.delete.impl.DeleteStatementImpl;
  133. import io.proleap.cobol.asg.metamodel.procedure.disable.DisableStatement;
  134. import io.proleap.cobol.asg.metamodel.procedure.disable.impl.DisableStatementImpl;
  135. import io.proleap.cobol.asg.metamodel.procedure.display.DisplayStatement;
  136. import io.proleap.cobol.asg.metamodel.procedure.display.impl.DisplayStatementImpl;
  137. import io.proleap.cobol.asg.metamodel.procedure.divide.DivideStatement;
  138. import io.proleap.cobol.asg.metamodel.procedure.divide.impl.DivideStatementImpl;
  139. import io.proleap.cobol.asg.metamodel.procedure.enable.EnableStatement;
  140. import io.proleap.cobol.asg.metamodel.procedure.enable.impl.EnableStatementImpl;
  141. import io.proleap.cobol.asg.metamodel.procedure.entry.EntryStatement;
  142. import io.proleap.cobol.asg.metamodel.procedure.entry.impl.EntryStatementImpl;
  143. import io.proleap.cobol.asg.metamodel.procedure.evaluate.EvaluateStatement;
  144. import io.proleap.cobol.asg.metamodel.procedure.evaluate.impl.EvaluateStatementImpl;
  145. import io.proleap.cobol.asg.metamodel.procedure.execcics.ExecCicsStatement;
  146. import io.proleap.cobol.asg.metamodel.procedure.execcics.impl.ExecCicsStatementImpl;
  147. import io.proleap.cobol.asg.metamodel.procedure.execsql.ExecSqlStatement;
  148. import io.proleap.cobol.asg.metamodel.procedure.execsql.impl.ExecSqlStatementImpl;
  149. import io.proleap.cobol.asg.metamodel.procedure.execsqlims.ExecSqlImsStatement;
  150. import io.proleap.cobol.asg.metamodel.procedure.execsqlims.impl.ExecSqlImsStatementImpl;
  151. import io.proleap.cobol.asg.metamodel.procedure.exhibit.ExhibitStatement;
  152. import io.proleap.cobol.asg.metamodel.procedure.exhibit.impl.ExhibitStatementImpl;
  153. import io.proleap.cobol.asg.metamodel.procedure.exit.ExitStatement;
  154. import io.proleap.cobol.asg.metamodel.procedure.exit.impl.ExitStatementImpl;
  155. import io.proleap.cobol.asg.metamodel.procedure.generate.GenerateStatement;
  156. import io.proleap.cobol.asg.metamodel.procedure.generate.impl.GenerateStatementImpl;
  157. import io.proleap.cobol.asg.metamodel.procedure.goback.GobackStatement;
  158. import io.proleap.cobol.asg.metamodel.procedure.goback.impl.GobackStatementImpl;
  159. import io.proleap.cobol.asg.metamodel.procedure.gotostmt.GoToStatement;
  160. import io.proleap.cobol.asg.metamodel.procedure.gotostmt.impl.GoToStatementImpl;
  161. import io.proleap.cobol.asg.metamodel.procedure.ifstmt.IfStatement;
  162. import io.proleap.cobol.asg.metamodel.procedure.ifstmt.impl.IfStatementImpl;
  163. import io.proleap.cobol.asg.metamodel.procedure.impl.AtEndPhraseImpl;
  164. import io.proleap.cobol.asg.metamodel.procedure.impl.InvalidKeyPhraseImpl;
  165. import io.proleap.cobol.asg.metamodel.procedure.impl.NotAtEndPhraseImpl;
  166. import io.proleap.cobol.asg.metamodel.procedure.impl.NotInvalidKeyPhraseImpl;
  167. import io.proleap.cobol.asg.metamodel.procedure.impl.NotOnExceptionClauseImpl;
  168. import io.proleap.cobol.asg.metamodel.procedure.impl.NotOnOverflowPhraseImpl;
  169. import io.proleap.cobol.asg.metamodel.procedure.impl.NotOnSizeErrorPhraseImpl;
  170. import io.proleap.cobol.asg.metamodel.procedure.impl.OnExceptionClauseImpl;
  171. import io.proleap.cobol.asg.metamodel.procedure.impl.OnOverflowPhraseImpl;
  172. import io.proleap.cobol.asg.metamodel.procedure.impl.OnSizeErrorPhraseImpl;
  173. import io.proleap.cobol.asg.metamodel.procedure.initialize.InitializeStatement;
  174. import io.proleap.cobol.asg.metamodel.procedure.initialize.impl.InitializeStatementImpl;
  175. import io.proleap.cobol.asg.metamodel.procedure.initiate.InitiateStatement;
  176. import io.proleap.cobol.asg.metamodel.procedure.initiate.impl.InitiateStatementImpl;
  177. import io.proleap.cobol.asg.metamodel.procedure.inspect.InspectStatement;
  178. import io.proleap.cobol.asg.metamodel.procedure.inspect.impl.InspectStatementImpl;
  179. import io.proleap.cobol.asg.metamodel.procedure.merge.MergeStatement;
  180. import io.proleap.cobol.asg.metamodel.procedure.merge.impl.MergeStatementImpl;
  181. import io.proleap.cobol.asg.metamodel.procedure.move.MoveStatement;
  182. import io.proleap.cobol.asg.metamodel.procedure.move.impl.MoveStatementImpl;
  183. import io.proleap.cobol.asg.metamodel.procedure.multiply.MultiplyStatement;
  184. import io.proleap.cobol.asg.metamodel.procedure.multiply.impl.MultiplyStatementImpl;
  185. import io.proleap.cobol.asg.metamodel.procedure.open.OpenStatement;
  186. import io.proleap.cobol.asg.metamodel.procedure.open.impl.OpenStatementImpl;
  187. import io.proleap.cobol.asg.metamodel.procedure.perform.PerformStatement;
  188. import io.proleap.cobol.asg.metamodel.procedure.perform.impl.PerformStatementImpl;
  189. import io.proleap.cobol.asg.metamodel.procedure.purge.PurgeStatement;
  190. import io.proleap.cobol.asg.metamodel.procedure.purge.impl.PurgeStatementImpl;
  191. import io.proleap.cobol.asg.metamodel.procedure.read.ReadStatement;
  192. import io.proleap.cobol.asg.metamodel.procedure.read.impl.ReadStatementImpl;
  193. import io.proleap.cobol.asg.metamodel.procedure.receive.ReceiveStatement;
  194. import io.proleap.cobol.asg.metamodel.procedure.receive.impl.ReceiveStatementImpl;
  195. import io.proleap.cobol.asg.metamodel.procedure.release.ReleaseStatement;
  196. import io.proleap.cobol.asg.metamodel.procedure.release.impl.ReleaseStatementImpl;
  197. import io.proleap.cobol.asg.metamodel.procedure.returnstmt.ReturnStatement;
  198. import io.proleap.cobol.asg.metamodel.procedure.returnstmt.impl.ReturnStatementImpl;
  199. import io.proleap.cobol.asg.metamodel.procedure.rewrite.RewriteStatement;
  200. import io.proleap.cobol.asg.metamodel.procedure.rewrite.impl.RewriteStatementImpl;
  201. import io.proleap.cobol.asg.metamodel.procedure.search.SearchStatement;
  202. import io.proleap.cobol.asg.metamodel.procedure.search.impl.SearchStatementImpl;
  203. import io.proleap.cobol.asg.metamodel.procedure.send.SendStatement;
  204. import io.proleap.cobol.asg.metamodel.procedure.send.impl.SendStatementImpl;
  205. import io.proleap.cobol.asg.metamodel.procedure.set.SetStatement;
  206. import io.proleap.cobol.asg.metamodel.procedure.set.impl.SetStatementImpl;
  207. import io.proleap.cobol.asg.metamodel.procedure.sort.SortStatement;
  208. import io.proleap.cobol.asg.metamodel.procedure.sort.impl.SortStatementImpl;
  209. import io.proleap.cobol.asg.metamodel.procedure.start.StartStatement;
  210. import io.proleap.cobol.asg.metamodel.procedure.start.impl.StartStatementImpl;
  211. import io.proleap.cobol.asg.metamodel.procedure.stop.StopStatement;
  212. import io.proleap.cobol.asg.metamodel.procedure.stop.StopStatement.StopType;
  213. import io.proleap.cobol.asg.metamodel.procedure.stop.impl.StopStatementImpl;
  214. import io.proleap.cobol.asg.metamodel.procedure.string.StringStatement;
  215. import io.proleap.cobol.asg.metamodel.procedure.string.impl.StringStatementImpl;
  216. import io.proleap.cobol.asg.metamodel.procedure.subtract.SubtractStatement;
  217. import io.proleap.cobol.asg.metamodel.procedure.subtract.impl.SubtractStatementImpl;
  218. import io.proleap.cobol.asg.metamodel.procedure.terminate.TerminateStatement;
  219. import io.proleap.cobol.asg.metamodel.procedure.terminate.impl.TerminateStatementImpl;
  220. import io.proleap.cobol.asg.metamodel.procedure.unstring.UnstringStatement;
  221. import io.proleap.cobol.asg.metamodel.procedure.unstring.impl.UnstringStatementImpl;
  222. import io.proleap.cobol.asg.metamodel.procedure.write.AtEndOfPagePhrase;
  223. import io.proleap.cobol.asg.metamodel.procedure.write.NotAtEndOfPagePhrase;
  224. import io.proleap.cobol.asg.metamodel.procedure.write.WriteStatement;
  225. import io.proleap.cobol.asg.metamodel.procedure.write.impl.AtEndOfPagePhraseImpl;
  226. import io.proleap.cobol.asg.metamodel.procedure.write.impl.NotAtEndOfPagePhraseImpl;
  227. import io.proleap.cobol.asg.metamodel.procedure.write.impl.WriteStatementImpl;
  228. import io.proleap.cobol.asg.metamodel.valuestmt.ArithmeticValueStmt;
  229. import io.proleap.cobol.asg.metamodel.valuestmt.ConditionValueStmt;
  230. import io.proleap.cobol.asg.metamodel.valuestmt.ValueStmt;
  231. import io.proleap.cobol.asg.util.TagUtils;
  232. import io.proleap.cobol.preprocessor.CobolPreprocessor;
  233. public class ScopeImpl extends CobolDivisionElementImpl implements Scope {
  234. private final static Logger LOG = LoggerFactory.getLogger(ScopeImpl.class);
  235. protected List<Statement> statements = new ArrayList<Statement>();
  236. public ScopeImpl(final ProgramUnit programUnit, final ParserRuleContext ctx) {
  237. super(programUnit, ctx);
  238. }
  239. @Override
  240. public AcceptStatement addAcceptStatement(final AcceptStatementContext ctx) {
  241. AcceptStatement result = (AcceptStatement) getASGElement(ctx);
  242. if (result == null) {
  243. result = new AcceptStatementImpl(programUnit, this, ctx);
  244. // accept call
  245. if (ctx.identifier() != null) {
  246. final Call acceptCall = createCall(ctx.identifier());
  247. result.setAcceptCall(acceptCall);
  248. }
  249. // type
  250. final AcceptType type;
  251. if (ctx.acceptFromDateStatement() != null) {
  252. result.addAcceptFromDateStatement(ctx.acceptFromDateStatement());
  253. type = AcceptType.DATE;
  254. } else if (ctx.acceptFromMnemonicStatement() != null) {
  255. result.addAcceptFromMnemonicStatement(ctx.acceptFromMnemonicStatement());
  256. type = AcceptType.MNEMONIC;
  257. } else if (ctx.acceptMessageCountStatement() != null) {
  258. result.addAcceptMessageCountStatement(ctx.acceptMessageCountStatement());
  259. type = AcceptType.MESSAGE_COUNT;
  260. } else if (ctx.acceptFromEscapeKeyStatement() != null) {
  261. result.addAcceptFromEscapeKeyStatement(ctx.acceptFromEscapeKeyStatement());
  262. type = AcceptType.FROM_ESCAPE_KEY;
  263. } else {
  264. type = AcceptType.NO_FROM;
  265. }
  266. result.setAcceptType(type);
  267. // on exception
  268. if (ctx.onExceptionClause() != null) {
  269. final OnExceptionClause onException = createOnException(ctx.onExceptionClause());
  270. result.setOnExceptionClause(onException);
  271. }
  272. // not on exception
  273. if (ctx.notOnExceptionClause() != null) {
  274. final NotOnExceptionClause notOnException = createNotOnExceptionClause(ctx.notOnExceptionClause());
  275. result.setNotOnExceptionClause(notOnException);
  276. }
  277. registerStatement(result);
  278. }
  279. return result;
  280. }
  281. @Override
  282. public AddStatement addAddStatement(final AddStatementContext ctx) {
  283. AddStatement result = (AddStatement) getASGElement(ctx);
  284. if (result == null) {
  285. result = new AddStatementImpl(programUnit, this, ctx);
  286. // add add statement
  287. final AddStatement.AddType type;
  288. if (ctx.addToStatement() != null) {
  289. result.addAddToStatement(ctx.addToStatement());
  290. type = AddStatement.AddType.TO;
  291. } else if (ctx.addToGivingStatement() != null) {
  292. result.addAddToGivingStatement(ctx.addToGivingStatement());
  293. type = AddStatement.AddType.TO_GIVING;
  294. } else if (ctx.addCorrespondingStatement() != null) {
  295. result.addAddCorrespondingStatement(ctx.addCorrespondingStatement());
  296. type = AddStatement.AddType.CORRESPONDING;
  297. } else {
  298. LOG.warn("unknown add statement at {}", ctx);
  299. type = null;
  300. }
  301. result.setAddType(type);
  302. // on size
  303. if (ctx.onSizeErrorPhrase() != null) {
  304. final OnSizeErrorPhrase onSizeError = createOnSizeErrorPhrase(ctx.onSizeErrorPhrase());
  305. result.setOnSizeErrorPhrase(onSizeError);
  306. }
  307. // not on size
  308. if (ctx.notOnSizeErrorPhrase() != null) {
  309. final NotOnSizeErrorPhrase notOnSizeError = createNotOnSizeErrorPhrase(ctx.notOnSizeErrorPhrase());
  310. result.setNotOnSizePhrase(notOnSizeError);
  311. }
  312. registerStatement(result);
  313. }
  314. return result;
  315. }
  316. @Override
  317. public AlterStatement addAlterStatement(final AlterStatementContext ctx) {
  318. AlterStatement result = (AlterStatement) getASGElement(ctx);
  319. if (result == null) {
  320. result = new AlterStatementImpl(programUnit, this, ctx);
  321. for (final AlterProceedToContext alterProceedToContext : ctx.alterProceedTo()) {
  322. result.addProceedTo(alterProceedToContext);
  323. }
  324. registerStatement(result);
  325. }
  326. return result;
  327. }
  328. @Override
  329. public CallStatement addCallStatement(final CallStatementContext ctx) {
  330. CallStatement result = (CallStatement) getASGElement(ctx);
  331. if (result == null) {
  332. result = new CallStatementImpl(programUnit, this, ctx);
  333. // called program
  334. final ValueStmt programValueStmt = createValueStmt(ctx.literal(), ctx.identifier());
  335. result.setProgramValueStmt(programValueStmt);
  336. // using
  337. if (ctx.callUsingPhrase() != null) {
  338. result.addUsingPhrase(ctx.callUsingPhrase());
  339. }
  340. // giving
  341. if (ctx.callGivingPhrase() != null) {
  342. result.addGivingPhrase(ctx.callGivingPhrase());
  343. }
  344. // on overflow
  345. if (ctx.onOverflowPhrase() != null) {
  346. final OnOverflowPhrase onOverflow = createOnOverflowPhrase(ctx.onOverflowPhrase());
  347. result.setOnOverflowPhrase(onOverflow);
  348. }
  349. // on exception
  350. if (ctx.onExceptionClause() != null) {
  351. final OnExceptionClause onException = createOnException(ctx.onExceptionClause());
  352. result.setOnExceptionClause(onException);
  353. }
  354. // not on exception
  355. if (ctx.notOnExceptionClause() != null) {
  356. final NotOnExceptionClause notOnException = createNotOnExceptionClause(ctx.notOnExceptionClause());
  357. result.setNotOnExceptionClause(notOnException);
  358. }
  359. registerStatement(result);
  360. }
  361. return result;
  362. }
  363. @Override
  364. public CancelStatement addCancelStatement(final CancelStatementContext ctx) {
  365. CancelStatement result = (CancelStatement) getASGElement(ctx);
  366. if (result == null) {
  367. result = new CancelStatementImpl(programUnit, this, ctx);
  368. for (final CancelCallContext cancelCallContext : ctx.cancelCall()) {
  369. result.addCancelCall(cancelCallContext);
  370. }
  371. registerStatement(result);
  372. }
  373. return result;
  374. }
  375. @Override
  376. public CloseStatement addCloseStatement(final CloseStatementContext ctx) {
  377. CloseStatement result = (CloseStatement) getASGElement(ctx);
  378. if (result == null) {
  379. result = new CloseStatementImpl(programUnit, this, ctx);
  380. for (final CloseFileContext closeFileContext : ctx.closeFile()) {
  381. result.addCloseFile(closeFileContext);
  382. }
  383. registerStatement(result);
  384. }
  385. return result;
  386. }
  387. @Override
  388. public ComputeStatement addComputeStatement(final ComputeStatementContext ctx) {
  389. ComputeStatement result = (ComputeStatement) getASGElement(ctx);
  390. if (result == null) {
  391. result = new ComputeStatementImpl(programUnit, this, ctx);
  392. // store calls
  393. for (final ComputeStoreContext computeStoreContext : ctx.computeStore()) {
  394. result.addStore(computeStoreContext);
  395. }
  396. // arithmetic expression
  397. final ArithmeticValueStmt arithmeticExpression = createArithmeticValueStmt(ctx.arithmeticExpression());
  398. result.setArithmeticExpression(arithmeticExpression);
  399. // on size error
  400. if (ctx.onSizeErrorPhrase() != null) {
  401. final OnSizeErrorPhrase onSizeError = createOnSizeErrorPhrase(ctx.onSizeErrorPhrase());
  402. result.setOnSizeErrorPhrase(onSizeError);
  403. }
  404. // not on size error
  405. if (ctx.notOnSizeErrorPhrase() != null) {
  406. final NotOnSizeErrorPhrase notOnSizeError = createNotOnSizeErrorPhrase(ctx.notOnSizeErrorPhrase());
  407. result.setNotOnSizeErrorPhrase(notOnSizeError);
  408. }
  409. registerStatement(result);
  410. }
  411. return result;
  412. }
  413. @Override
  414. public ContinueStatement addContinueStatement(final ContinueStatementContext ctx) {
  415. ContinueStatement result = (ContinueStatement) getASGElement(ctx);
  416. if (result == null) {
  417. result = new ContinueStatementImpl(programUnit, this, ctx);
  418. registerStatement(result);
  419. }
  420. return result;
  421. }
  422. @Override
  423. public DeleteStatement addDeleteStatement(final DeleteStatementContext ctx) {
  424. DeleteStatement result = (DeleteStatement) getASGElement(ctx);
  425. if (result == null) {
  426. result = new DeleteStatementImpl(programUnit, this, ctx);
  427. // file
  428. final Call fileCall = createCall(ctx.fileName());
  429. result.setFileCall(fileCall);
  430. if (ctx.RECORD() != null) {
  431. result.setRecord(true);
  432. }
  433. // invalid key
  434. if (ctx.invalidKeyPhrase() != null) {
  435. final InvalidKeyPhrase invalidKey = createInvalidKeyPhrase(ctx.invalidKeyPhrase());
  436. result.setInvalidKeyPhrase(invalidKey);
  437. }
  438. // not invalid key
  439. if (ctx.notInvalidKeyPhrase() != null) {
  440. final NotInvalidKeyPhrase notInvalidKey = createNotInvalidKeyPhrase(ctx.notInvalidKeyPhrase());
  441. result.setNotInvalidKeyPhrase(notInvalidKey);
  442. }
  443. registerStatement(result);
  444. }
  445. return result;
  446. }
  447. @Override
  448. public DisableStatement addDisableStatement(final DisableStatementContext ctx) {
  449. DisableStatement result = (DisableStatement) getASGElement(ctx);
  450. if (result == null) {
  451. result = new DisableStatementImpl(programUnit, this, ctx);
  452. // type
  453. final DisableStatement.DisableType type;
  454. if (ctx.INPUT() != null) {
  455. type = DisableStatement.DisableType.INPUT;
  456. } else if (ctx.I_O() != null) {
  457. type = DisableStatement.DisableType.INPUT_OUTPUT;
  458. } else if (ctx.OUTPUT() != null) {
  459. type = DisableStatement.DisableType.OUTPUT;
  460. } else {
  461. type = null;
  462. }
  463. result.setDisableType(type);
  464. // terminal
  465. if (ctx.TERMINAL() != null) {
  466. result.setTerminal(true);
  467. }
  468. // cd name
  469. final Call cdNameCall = createCall(ctx.cdName());
  470. result.setCommunicationDescriptionCall(cdNameCall);
  471. // key
  472. final ValueStmt keyValueStmt = createValueStmt(ctx.identifier(), ctx.literal());
  473. result.setKeyValueStmt(keyValueStmt);
  474. registerStatement(result);
  475. }
  476. return result;
  477. }
  478. @Override
  479. public DisplayStatement addDisplayStatement(final DisplayStatementContext ctx) {
  480. DisplayStatement result = (DisplayStatement) getASGElement(ctx);
  481. if (result == null) {
  482. result = new DisplayStatementImpl(programUnit, this, ctx);
  483. // operands
  484. for (final DisplayOperandContext displayOperandContext : ctx.displayOperand()) {
  485. result.addOperand(displayOperandContext);
  486. }
  487. // at
  488. if (ctx.displayAt() != null) {
  489. result.addAt(ctx.displayAt());
  490. }
  491. // upon
  492. if (ctx.displayUpon() != null) {
  493. result.addUpon(ctx.displayUpon());
  494. }
  495. // with
  496. if (ctx.displayWith() != null) {
  497. result.addWith(ctx.displayWith());
  498. }
  499. // on exception
  500. if (ctx.onExceptionClause() != null) {
  501. final OnExceptionClause onException = createOnException(ctx.onExceptionClause());
  502. result.setOnExceptionClause(onException);
  503. }
  504. // not on exception
  505. if (ctx.notOnExceptionClause() != null) {
  506. final NotOnExceptionClause notOnException = createNotOnExceptionClause(ctx.notOnExceptionClause());
  507. result.setNotOnExceptionClause(notOnException);
  508. }
  509. registerStatement(result);
  510. }
  511. return result;
  512. }
  513. @Override
  514. public DivideStatement addDivideStatement(final DivideStatementContext ctx) {
  515. DivideStatement result = (DivideStatement) getASGElement(ctx);
  516. if (result == null) {
  517. result = new DivideStatementImpl(programUnit, this, ctx);
  518. // operand
  519. final ValueStmt operandValueStmt = createValueStmt(ctx.identifier(), ctx.literal());
  520. result.setOperandValueStmt(operandValueStmt);
  521. // giving
  522. final DivideStatement.DivideType type;
  523. if (ctx.divideIntoStatement() != null) {
  524. result.addDivideIntoStatement(ctx.divideIntoStatement());
  525. type = DivideStatement.DivideType.INTO;
  526. } else if (ctx.divideIntoGivingStatement() != null) {
  527. result.addDivideIntoGivingStatement(ctx.divideIntoGivingStatement());
  528. type = DivideStatement.DivideType.INTO_GIVING;
  529. } else if (ctx.divideByGivingStatement() != null) {
  530. result.addDivideByGivingStatement(ctx.divideByGivingStatement());
  531. type = DivideStatement.DivideType.BY_GIVING;
  532. } else {
  533. type = null;
  534. }
  535. result.setDivideType(type);
  536. // remainder
  537. if (ctx.divideRemainder() != null) {
  538. result.addRemainder(ctx.divideRemainder());
  539. }
  540. // on size
  541. if (ctx.onSizeErrorPhrase() != null) {
  542. final OnSizeErrorPhrase onSizeError = createOnSizeErrorPhrase(ctx.onSizeErrorPhrase());
  543. result.setOnSizeErrorPhrase(onSizeError);
  544. }
  545. // not on size
  546. if (ctx.notOnSizeErrorPhrase() != null) {
  547. final NotOnSizeErrorPhrase notOnSizeError = createNotOnSizeErrorPhrase(ctx.notOnSizeErrorPhrase());
  548. result.setNotOnSizeErrorPhrase(notOnSizeError);
  549. }
  550. registerStatement(result);
  551. }
  552. return result;
  553. }
  554. @Override
  555. public EnableStatement addEnableStatement(final EnableStatementContext ctx) {
  556. EnableStatement result = (EnableStatement) getASGElement(ctx);
  557. if (result == null) {
  558. result = new EnableStatementImpl(programUnit, this, ctx);
  559. // type
  560. final EnableStatement.EnableType type;
  561. if (ctx.INPUT() != null) {
  562. type = EnableStatement.EnableType.INPUT;
  563. } else if (ctx.I_O() != null) {
  564. type = EnableStatement.EnableType.INPUT_OUTPUT;
  565. } else if (ctx.OUTPUT() != null) {
  566. type = EnableStatement.EnableType.OUTPUT;
  567. } else {
  568. type = null;
  569. }
  570. result.setEnableType(type);
  571. // terminal
  572. if (ctx.TERMINAL() != null) {
  573. result.setTerminal(true);
  574. }
  575. // cd name
  576. final Call cdNameCall = createCall(ctx.cdName());
  577. result.setCommunicationDescriptionCall(cdNameCall);
  578. // key
  579. final ValueStmt keyValueStmt = createValueStmt(ctx.identifier(), ctx.literal());
  580. result.setKeyValueStmt(keyValueStmt);
  581. registerStatement(result);
  582. }
  583. return result;
  584. }
  585. @Override
  586. public EntryStatement addEntryStatement(final EntryStatementContext ctx) {
  587. EntryStatement result = (EntryStatement) getASGElement(ctx);
  588. if (result == null) {
  589. result = new EntryStatementImpl(programUnit, this, ctx);
  590. // entry
  591. final ValueStmt entryValueStmt = createValueStmt(ctx.literal());
  592. result.setEntryValueStmt(entryValueStmt);
  593. // using
  594. for (final IdentifierContext identifierContext : ctx.identifier()) {
  595. final Call usingCall = createCall(identifierContext);
  596. result.addUsingCall(usingCall);
  597. }
  598. registerStatement(result);
  599. }
  600. return result;
  601. }
  602. @Override
  603. public EvaluateStatement addEvaluateStatement(final EvaluateStatementContext ctx) {
  604. EvaluateStatement result = (EvaluateStatement) getASGElement(ctx);
  605. if (result == null) {
  606. result = new EvaluateStatementImpl(programUnit, this, ctx);
  607. // select
  608. result.addSelect(ctx.evaluateSelect());
  609. // also selects
  610. for (final EvaluateAlsoSelectContext evaluateAlsoSelectContext : ctx.evaluateAlsoSelect()) {
  611. result.addAlsoSelect(evaluateAlsoSelectContext);
  612. }
  613. // when
  614. for (final EvaluateWhenPhraseContext evaluateWhenPhraseContext : ctx.evaluateWhenPhrase()) {
  615. result.addWhenPhrase(evaluateWhenPhraseContext);
  616. }
  617. // when other
  618. if (ctx.evaluateWhenOther() != null) {
  619. result.addWhenOther(ctx.evaluateWhenOther());
  620. }
  621. registerStatement(result);
  622. }
  623. return result;
  624. }
  625. @Override
  626. public ExecCicsStatement addExecCicsStatement(final ExecCicsStatementContext ctx) {
  627. ExecCicsStatement result = (ExecCicsStatement) getASGElement(ctx);
  628. if (result == null) {
  629. result = new ExecCicsStatementImpl(programUnit, this, ctx);
  630. final String execCicsText = TagUtils.getUntaggedText(ctx.EXECCICSLINE(), CobolPreprocessor.EXEC_CICS_TAG,
  631. CobolPreprocessor.EXEC_END_TAG);
  632. result.setExecCicsText(execCicsText);
  633. registerStatement(result);
  634. }
  635. return result;
  636. }
  637. @Override
  638. public ExecSqlImsStatement addExecSqlImsStatement(final ExecSqlImsStatementContext ctx) {
  639. ExecSqlImsStatement result = (ExecSqlImsStatement) getASGElement(ctx);
  640. if (result == null) {
  641. result = new ExecSqlImsStatementImpl(programUnit, this, ctx);
  642. final String execSqlImsText = TagUtils.getUntaggedText(ctx.EXECSQLIMSLINE(),
  643. CobolPreprocessor.EXEC_SQLIMS_TAG, CobolPreprocessor.EXEC_END_TAG);
  644. result.setExecSqlImsText(execSqlImsText);
  645. registerStatement(result);
  646. }
  647. return result;
  648. }
  649. @Override
  650. public ExecSqlStatement addExecSqlStatement(final ExecSqlStatementContext ctx) {
  651. ExecSqlStatement result = (ExecSqlStatement) getASGElement(ctx);
  652. if (result == null) {
  653. result = new ExecSqlStatementImpl(programUnit, this, ctx);
  654. final String execSqlText = TagUtils.getUntaggedText(ctx.EXECSQLLINE(), CobolPreprocessor.EXEC_SQL_TAG,
  655. CobolPreprocessor.EXEC_END_TAG);
  656. result.setExecSqlText(execSqlText);
  657. registerStatement(result);
  658. }
  659. return result;
  660. }
  661. @Override
  662. public ExhibitStatement addExhibitStatement(final ExhibitStatementContext ctx) {
  663. ExhibitStatement result = (ExhibitStatement) getASGElement(ctx);
  664. if (result == null) {
  665. result = new ExhibitStatementImpl(programUnit, this, ctx);
  666. // operands
  667. for (final ExhibitOperandContext exhibitOperandContext : ctx.exhibitOperand()) {
  668. result.addOperand(exhibitOperandContext);
  669. }
  670. // named
  671. if (ctx.NAMED() != null) {
  672. result.setNamed(true);
  673. }
  674. // changed
  675. if (ctx.CHANGED() != null) {
  676. result.setChanged(true);
  677. }
  678. registerStatement(result);
  679. }
  680. return result;
  681. }
  682. @Override
  683. public ExitStatement addExitStatement(final ExitStatementContext ctx) {
  684. ExitStatement result = (ExitStatement) getASGElement(ctx);
  685. if (result == null) {
  686. result = new ExitStatementImpl(programUnit, this, ctx);
  687. registerStatement(result);
  688. }
  689. return result;
  690. }
  691. @Override
  692. public GenerateStatement addGenerateStatement(final GenerateStatementContext ctx) {
  693. GenerateStatement result = (GenerateStatement) getASGElement(ctx);
  694. if (result == null) {
  695. result = new GenerateStatementImpl(programUnit, this, ctx);
  696. final Call reportDescriptionCall = createCall(ctx.reportName());
  697. result.setReportDescriptionCall(reportDescriptionCall);
  698. registerStatement(result);
  699. }
  700. return result;
  701. }
  702. @Override
  703. public GobackStatement addGobackStatement(final GobackStatementContext ctx) {
  704. GobackStatement result = (GobackStatement) getASGElement(ctx);
  705. if (result == null) {
  706. result = new GobackStatementImpl(programUnit, this, ctx);
  707. registerStatement(result);
  708. }
  709. return result;
  710. }
  711. @Override
  712. public GoToStatement addGoToStatement(final GoToStatementContext ctx) {
  713. GoToStatement result = (GoToStatement) getASGElement(ctx);
  714. if (result == null) {
  715. result = new GoToStatementImpl(programUnit, this, ctx);
  716. // type
  717. final GoToStatement.GoToType type;
  718. if (ctx.goToStatementSimple() != null) {
  719. result.addSimple(ctx.goToStatementSimple());
  720. type = GoToStatement.GoToType.SIMPLE;
  721. } else if (ctx.goToDependingOnStatement() != null) {
  722. result.addDependingOnPhrase(ctx.goToDependingOnStatement());
  723. type = GoToStatement.GoToType.DEPENDING_ON;
  724. } else {
  725. type = null;
  726. }
  727. result.setGoToType(type);
  728. registerStatement(result);
  729. }
  730. return result;
  731. }
  732. @Override
  733. public IfStatement addIfStatement(final IfStatementContext ctx) {
  734. IfStatement result = (IfStatement) getASGElement(ctx);
  735. if (result == null) {
  736. result = new IfStatementImpl(programUnit, this, ctx);
  737. // condition
  738. final ConditionValueStmt condition = createConditionValueStmt(ctx.condition());
  739. result.setCondition(condition);
  740. // then
  741. if (ctx.ifThen() != null) {
  742. result.addThen(ctx.ifThen());
  743. }
  744. // else
  745. if (ctx.ifElse() != null) {
  746. result.addElse(ctx.ifElse());
  747. }
  748. registerStatement(result);
  749. }
  750. return result;
  751. }
  752. @Override
  753. public InitializeStatement addInitializeStatement(final InitializeStatementContext ctx) {
  754. InitializeStatement result = (InitializeStatement) getASGElement(ctx);
  755. if (result == null) {
  756. result = new InitializeStatementImpl(programUnit, this, ctx);
  757. // data item calls
  758. for (final IdentifierContext identifierContext : ctx.identifier()) {
  759. final Call dataItemCall = createCall(identifierContext);
  760. result.addDataItemCall(dataItemCall);
  761. }
  762. // replacing
  763. if (ctx.initializeReplacingPhrase() != null) {
  764. result.addReplacingPhrase(ctx.initializeReplacingPhrase());
  765. }
  766. registerStatement(result);
  767. }
  768. return result;
  769. }
  770. @Override
  771. public InitiateStatement addInitiateStatement(final InitiateStatementContext ctx) {
  772. InitiateStatement result = (InitiateStatement) getASGElement(ctx);
  773. if (result == null) {
  774. result = new InitiateStatementImpl(programUnit, this, ctx);
  775. for (final ReportNameContext reportNameContext : ctx.reportName()) {
  776. final Call reportCall = createCall(reportNameContext);
  777. result.addReportCall(reportCall);
  778. }
  779. registerStatement(result);
  780. }
  781. return result;
  782. }
  783. @Override
  784. public InspectStatement addInspectStatement(final InspectStatementContext ctx) {
  785. InspectStatement result = (InspectStatement) getASGElement(ctx);
  786. if (result == null) {
  787. result = new InspectStatementImpl(programUnit, this, ctx);
  788. // data item call
  789. if (ctx.identifier() != null) {
  790. final Call dataItemCall = createCall(ctx.identifier());
  791. result.setDataItemCall(dataItemCall);
  792. }
  793. // type
  794. final InspectStatement.InspectType type;
  795. if (ctx.inspectTallyingPhrase() != null) {
  796. result.addTallying(ctx.inspectTallyingPhrase());
  797. type = InspectStatement.InspectType.TALLYING;
  798. } else if (ctx.inspectReplacingPhrase() != null) {
  799. result.addReplacing(ctx.inspectReplacingPhrase());
  800. type = InspectStatement.InspectType.REPLACING;
  801. } else if (ctx.inspectTallyingReplacingPhrase() != null) {
  802. result.addTallyingReplacing(ctx.inspectTallyingReplacingPhrase());
  803. type = InspectStatement.InspectType.TALLYING_REPLACING;
  804. } else if (ctx.inspectConvertingPhrase() != null) {
  805. result.addConverting(ctx.inspectConvertingPhrase());
  806. type = InspectStatement.InspectType.CONVERTING;
  807. } else {
  808. type = null;
  809. }
  810. result.setInspectType(type);
  811. registerStatement(result);
  812. }
  813. return result;
  814. }
  815. @Override
  816. public MergeStatement addMergeStatement(final MergeStatementContext ctx) {
  817. MergeStatement result = (MergeStatement) getASGElement(ctx);
  818. if (result == null) {
  819. result = new MergeStatementImpl(programUnit, this, ctx);
  820. // file
  821. final Call fileCall = createCall(ctx.fileName());
  822. result.setFileCall(fileCall);
  823. // on key
  824. for (final MergeOnKeyClauseContext mergeOnKeyClauseContext : ctx.mergeOnKeyClause()) {
  825. result.addOnKey(mergeOnKeyClauseContext);
  826. }
  827. // collating sequence
  828. if (ctx.mergeCollatingSequencePhrase() != null) {
  829. result.addCollatingSequencePhrase(ctx.mergeCollatingSequencePhrase());
  830. }
  831. // using
  832. for (final MergeUsingContext mergeUsingContext : ctx.mergeUsing()) {
  833. result.addUsingPhrase(mergeUsingContext);
  834. }
  835. // output procedure
  836. if (ctx.mergeOutputProcedurePhrase() != null) {
  837. result.addOutputProcedurePhrase(ctx.mergeOutputProcedurePhrase());
  838. }
  839. // giving
  840. for (final MergeGivingPhraseContext mergeGivingPhraseContext : ctx.mergeGivingPhrase()) {
  841. result.addGiving(mergeGivingPhraseContext);
  842. }
  843. registerStatement(result);
  844. }
  845. return result;
  846. }
  847. @Override
  848. public MoveStatement addMoveStatement(final MoveStatementContext ctx) {
  849. MoveStatement result = (MoveStatement) getASGElement(ctx);
  850. if (result == null) {
  851. result = new MoveStatementImpl(programUnit, this, ctx);
  852. // type
  853. final MoveStatement.MoveType type;
  854. if (ctx.moveToStatement() != null) {
  855. type = MoveStatement.MoveType.MOVE_TO;
  856. result.addMoveToStatement(ctx.moveToStatement());
  857. } else if (ctx.moveCorrespondingToStatement() != null) {
  858. type = MoveStatement.MoveType.MOVE_CORRESPONDING;
  859. result.addMoveCorrespondingToStatement(ctx.moveCorrespondingToStatement());
  860. } else {
  861. type = null;
  862. }
  863. result.setMoveType(type);
  864. registerStatement(result);
  865. }
  866. return result;
  867. }
  868. @Override
  869. public MultiplyStatement addMultiplyStatement(final MultiplyStatementContext ctx) {
  870. MultiplyStatement result = (MultiplyStatement) getASGElement(ctx);
  871. if (result == null) {
  872. result = new MultiplyStatementImpl(programUnit, this, ctx);
  873. // operand
  874. final ValueStmt operandValueStmt = createValueStmt(ctx.identifier(), ctx.literal());
  875. result.setOperandValueStmt(operandValueStmt);
  876. // type
  877. final MultiplyStatement.MultiplyType type;
  878. if (ctx.multiplyRegular() != null) {
  879. result.addByPhrase(ctx.multiplyRegular());
  880. type = MultiplyStatement.MultiplyType.BY;
  881. } else if (ctx.multiplyGiving() != null) {
  882. result.addGivingPhrase(ctx.multiplyGiving());
  883. type = MultiplyStatement.MultiplyType.BY_GIVING;
  884. } else {
  885. type = null;
  886. }
  887. result.setMultiplyType(type);
  888. // on size error
  889. if (ctx.onSizeErrorPhrase() != null) {
  890. final OnSizeErrorPhrase onSizeError = createOnSizeErrorPhrase(ctx.onSizeErrorPhrase());
  891. result.setOnSizeErrorPhrase(onSizeError);
  892. }
  893. // not on size error
  894. if (ctx.notOnSizeErrorPhrase() != null) {
  895. final NotOnSizeErrorPhrase notOnSizeError = createNotOnSizeErrorPhrase(ctx.notOnSizeErrorPhrase());
  896. result.setNotOnSizeErrorPhrase(notOnSizeError);
  897. }
  898. registerStatement(result);
  899. }
  900. return result;
  901. }
  902. @Override
  903. public OpenStatement addOpenStatement(final OpenStatementContext ctx) {
  904. OpenStatement result = (OpenStatement) getASGElement(ctx);
  905. if (result == null) {
  906. result = new OpenStatementImpl(programUnit, this, ctx);
  907. // input
  908. for (final OpenInputStatementContext openInputStatementContext : ctx.openInputStatement()) {
  909. result.addInputPhrase(openInputStatementContext);
  910. }
  911. // output
  912. for (final OpenOutputStatementContext openOutputStatementContext : ctx.openOutputStatement()) {
  913. result.addOutputPhrase(openOutputStatementContext);
  914. }
  915. // input / output
  916. for (final OpenIOStatementContext openIOStatementContext : ctx.openIOStatement()) {
  917. result.addInputOutputPhrase(openIOStatementContext);
  918. }
  919. // extend
  920. for (final OpenExtendStatementContext openExtendStatementContext : ctx.openExtendStatement()) {
  921. result.addExtendPhrase(openExtendStatementContext);
  922. }
  923. registerStatement(result);
  924. }
  925. return result;
  926. }
  927. @Override
  928. public PerformStatement addPerformStatement(final PerformStatementContext ctx) {
  929. PerformStatement result = (PerformStatement) getASGElement(ctx);
  930. if (result == null) {
  931. result = new PerformStatementImpl(programUnit, this, ctx);
  932. final PerformStatement.PerformStatementType type;
  933. if (ctx.performInlineStatement() != null) {
  934. type = PerformStatement.PerformStatementType.INLINE;
  935. result.addPerformInlineStatement(ctx.performInlineStatement());
  936. } else if (ctx.performProcedureStatement() != null) {
  937. type = PerformStatement.PerformStatementType.PROCEDURE;
  938. result.addPerformProcedureStatement(ctx.performProcedureStatement());
  939. } else {
  940. type = null;
  941. }
  942. result.setPerformStatementType(type);
  943. registerStatement(result);
  944. }
  945. return result;
  946. }
  947. @Override
  948. public PurgeStatement addPurgeStatement(final PurgeStatementContext ctx) {
  949. PurgeStatement result = (PurgeStatement) getASGElement(ctx);
  950. if (result == null) {
  951. result = new PurgeStatementImpl(programUnit, this, ctx);
  952. for (final CdNameContext cdNameContext : ctx.cdName()) {
  953. final Call cdNameCall = createCall(cdNameContext);
  954. result.addCommunicationDescriptionEntryCall(cdNameCall);
  955. }
  956. registerStatement(result);
  957. }
  958. return result;
  959. }
  960. @Override
  961. public ReadStatement addReadStatement(final ReadStatementContext ctx) {
  962. ReadStatement result = (ReadStatement) getASGElement(ctx);
  963. if (result == null) {
  964. result = new ReadStatementImpl(programUnit, this, ctx);
  965. // file
  966. final Call fileCall = createCall(ctx.fileName());
  967. result.setFileCall(fileCall);
  968. // next record
  969. if (ctx.RECORD() != null) {
  970. result.setNextRecord(true);
  971. }
  972. // into
  973. if (ctx.readInto() != null) {
  974. result.addInto(ctx.readInto());
  975. }
  976. // with
  977. if (ctx.readWith() != null) {
  978. result.addWith(ctx.readWith());
  979. }
  980. // key
  981. if (ctx.readKey() != null) {
  982. result.addKey(ctx.readKey());
  983. }
  984. // invalid key
  985. if (ctx.invalidKeyPhrase() != null) {
  986. final InvalidKeyPhrase invalidKey = createInvalidKeyPhrase(ctx.invalidKeyPhrase());
  987. result.setInvalidKeyPhrase(invalidKey);
  988. }
  989. // not invalid key
  990. if (ctx.notInvalidKeyPhrase() != null) {
  991. final NotInvalidKeyPhrase notInvalidKey = createNotInvalidKeyPhrase(ctx.notInvalidKeyPhrase());
  992. result.setNotInvalidKeyPhrase(notInvalidKey);
  993. }
  994. // at end
  995. if (ctx.atEndPhrase() != null) {
  996. final AtEndPhrase atEnd = createAtEndPhrase(ctx.atEndPhrase());
  997. result.setAtEnd(atEnd);
  998. }
  999. // not at end
  1000. if (ctx.notAtEndPhrase() != null) {
  1001. final NotAtEndPhrase notAtEnd = createNotAtEndPhrase(ctx.notAtEndPhrase());
  1002. result.setNotAtEndPhrase(notAtEnd);
  1003. }
  1004. registerStatement(result);
  1005. }
  1006. return result;
  1007. }
  1008. @Override
  1009. public ReceiveStatement addReceiveStatement(final ReceiveStatementContext ctx) {
  1010. ReceiveStatement result = (ReceiveStatement) getASGElement(ctx);
  1011. if (result == null) {
  1012. result = new ReceiveStatementImpl(programUnit, this, ctx);
  1013. // type
  1014. final ReceiveStatement.ReceiveType type;
  1015. if (ctx.receiveFromStatement() != null) {
  1016. result.addReceiveFromStatement(ctx.receiveFromStatement());
  1017. type = ReceiveStatement.ReceiveType.FROM;
  1018. } else if (ctx.receiveIntoStatement() != null) {
  1019. result.addReceiveIntoStatement(ctx.receiveIntoStatement());
  1020. type = ReceiveStatement.ReceiveType.INTO;
  1021. } else {
  1022. type = null;
  1023. }
  1024. result.setReceiveType(type);
  1025. // on exception
  1026. if (ctx.onExceptionClause() != null) {
  1027. final OnExceptionClause onException = createOnException(ctx.onExceptionClause());
  1028. result.setOnExceptionClause(onException);
  1029. }
  1030. // not on exeption
  1031. if (ctx.notOnExceptionClause() != null) {
  1032. final NotOnExceptionClause notOnException = createNotOnExceptionClause(ctx.notOnExceptionClause());
  1033. result.setNotOnExceptionClause(notOnException);
  1034. }
  1035. registerStatement(result);
  1036. }
  1037. return result;
  1038. }
  1039. @Override
  1040. public ReleaseStatement addReleaseStatement(final ReleaseStatementContext ctx) {
  1041. ReleaseStatement result = (ReleaseStatement) getASGElement(ctx);
  1042. if (result == null) {
  1043. result = new ReleaseStatementImpl(programUnit, this, ctx);
  1044. // record
  1045. if (ctx.recordName() != null) {
  1046. final Call recordCall = createCall(ctx.recordName());
  1047. result.setRecordCall(recordCall);
  1048. }
  1049. // content
  1050. if (ctx.qualifiedDataName() != null) {
  1051. final Call contentCall = createCall(ctx.qualifiedDataName());
  1052. result.setContentCall(contentCall);
  1053. }
  1054. registerStatement(result);
  1055. }
  1056. return result;
  1057. }
  1058. @Override
  1059. public ReturnStatement addReturnStatement(final ReturnStatementContext ctx) {
  1060. ReturnStatement result = (ReturnStatement) getASGElement(ctx);
  1061. if (result == null) {
  1062. result = new ReturnStatementImpl(programUnit, this, ctx);
  1063. // file call
  1064. final Call fileCall = createCall(ctx.fileName());
  1065. result.addFileCall(fileCall);
  1066. // into
  1067. if (ctx.returnInto() != null) {
  1068. result.addInto(ctx.returnInto());
  1069. }
  1070. // at end
  1071. if (ctx.atEndPhrase() != null) {
  1072. final AtEndPhrase atEnd = createAtEndPhrase(ctx.atEndPhrase());
  1073. result.setAtEndPhrase(atEnd);
  1074. }
  1075. // not at end
  1076. if (ctx.notAtEndPhrase() != null) {
  1077. final NotAtEndPhrase notAtEnd = createNotAtEndPhrase(ctx.notAtEndPhrase());
  1078. result.setNotAtEndPhrase(notAtEnd);
  1079. }
  1080. registerStatement(result);
  1081. }
  1082. return result;
  1083. }
  1084. @Override
  1085. public RewriteStatement addRewriteStatement(final RewriteStatementContext ctx) {
  1086. RewriteStatement result = (RewriteStatement) getASGElement(ctx);
  1087. if (result == null) {
  1088. result = new RewriteStatementImpl(programUnit, this, ctx);
  1089. // record
  1090. final Call recordCall = createCall(ctx.recordName());
  1091. result.setRecordCall(recordCall);
  1092. // from
  1093. if (ctx.rewriteFrom() != null) {
  1094. result.addFrom(ctx.rewriteFrom());
  1095. }
  1096. // invalid key
  1097. if (ctx.invalidKeyPhrase() != null) {
  1098. final InvalidKeyPhrase invalidKey = createInvalidKeyPhrase(ctx.invalidKeyPhrase());
  1099. result.setInvalidKeyPhrase(invalidKey);
  1100. }
  1101. // not invalid key
  1102. if (ctx.notInvalidKeyPhrase() != null) {
  1103. final NotInvalidKeyPhrase notInvalidKey = createNotInvalidKeyPhrase(ctx.notInvalidKeyPhrase());
  1104. result.setNotInvalidKeyPhrase(notInvalidKey);
  1105. }
  1106. registerStatement(result);
  1107. }
  1108. return result;
  1109. }
  1110. @Override
  1111. public SearchStatement addSearchStatement(final SearchStatementContext ctx) {
  1112. SearchStatement result = (SearchStatement) getASGElement(ctx);
  1113. if (result == null) {
  1114. result = new SearchStatementImpl(programUnit, this, ctx);
  1115. // data call
  1116. final Call dataCall = createCall(ctx.qualifiedDataName());
  1117. result.setDataCall(dataCall);
  1118. // varying
  1119. if (ctx.searchVarying() != null) {
  1120. result.addVaryingPhrase(ctx.searchVarying());
  1121. }
  1122. // at end
  1123. if (ctx.atEndPhrase() != null) {
  1124. final AtEndPhrase atEnd = createAtEndPhrase(ctx.atEndPhrase());
  1125. result.setAtEndPhrase(atEnd);
  1126. }
  1127. // when
  1128. for (final SearchWhenContext searchWhenContext : ctx.searchWhen()) {
  1129. result.addWhenPhrase(searchWhenContext);
  1130. }
  1131. registerStatement(result);
  1132. }
  1133. return result;
  1134. }
  1135. @Override
  1136. public SendStatement addSendStatement(final SendStatementContext ctx) {
  1137. SendStatement result = (SendStatement) getASGElement(ctx);
  1138. if (result == null) {
  1139. result = new SendStatementImpl(programUnit, this, ctx);
  1140. // type
  1141. final SendStatement.SendType type;
  1142. if (ctx.sendStatementSync() != null) {
  1143. result.addSync(ctx.sendStatementSync());
  1144. type = SendStatement.SendType.SYNC;
  1145. } else if (ctx.sendStatementAsync() != null) {
  1146. result.addAsync(ctx.sendStatementAsync());
  1147. type = SendStatement.SendType.ASYNC;
  1148. } else {
  1149. type = null;
  1150. }
  1151. result.setSendType(type);
  1152. // on exception
  1153. if (ctx.onExceptionClause() != null) {
  1154. final OnExceptionClause onException = createOnException(ctx.onExceptionClause());
  1155. result.setOnExceptionClause(onException);
  1156. }
  1157. // not on exeption
  1158. if (ctx.notOnExceptionClause() != null) {
  1159. final NotOnExceptionClause notOnException = createNotOnExceptionClause(ctx.notOnExceptionClause());
  1160. result.setNotOnExceptionClause(notOnException);
  1161. }
  1162. registerStatement(result);
  1163. }
  1164. return result;
  1165. }
  1166. @Override
  1167. public SetStatement addSetStatement(final SetStatementContext ctx) {
  1168. SetStatement result = (SetStatement) getASGElement(ctx);
  1169. if (result == null) {
  1170. result = new SetStatementImpl(programUnit, this, ctx);
  1171. // type
  1172. final SetStatement.SetType type;
  1173. if (!ctx.setToStatement().isEmpty()) {
  1174. type = SetStatement.SetType.TO;
  1175. for (final SetToStatementContext setToStatementContext : ctx.setToStatement()) {
  1176. result.addSetTo(setToStatementContext);
  1177. }
  1178. } else if (ctx.setUpDownByStatement() != null) {
  1179. result.addSetBy(ctx.setUpDownByStatement());
  1180. type = SetStatement.SetType.BY;
  1181. } else {
  1182. type = null;
  1183. }
  1184. result.setSetType(type);
  1185. registerStatement(result);
  1186. }
  1187. return result;
  1188. }
  1189. @Override
  1190. public SortStatement addSortStatement(final SortStatementContext ctx) {
  1191. SortStatement result = (SortStatement) getASGElement(ctx);
  1192. if (result