Project

General

Profile

Revision 7

Added by Willibald K. over 8 years ago

changing java, cpp, hpp files to unix line endings

View differences:

OoaCompleteAstTraversalVisitor.java
1
/**

2
  *

3
  *                      OOAS Compiler

4
  *

5
  *       Copyright 2015, AIT Austrian Institute of Technology.

6
  * This code is based on the C# Version of the OOAS Compiler, which is

7
  * copyright 2015 by the Institute of Software Technology, Graz University

8
  * of Technology with portions copyright by the AIT Austrian Institute of

9
  * Technology. All rights reserved.

10
  *

11
  * SEE THE "LICENSE" FILE FOR THE TERMS UNDER WHICH THIS FILE IS PROVIDED.

12
  *

13
  * If you modify the file please update the list of contributors below to in-

14
  * clude your name. Please also stick to the coding convention of using TABs

15
  * to do the basic (block-level) indentation and spaces for anything after

16
  * that. (Enable the display of special chars and it should be pretty obvious

17
  * what this means.) Also, remove all trailing whitespace.

18
  *

19
  * Contributors:

20
  *               Willibald Krenn (AIT)

21
  *               Stephan Zimmerer (AIT)

22
  *               Markus Demetz (AIT)

23
  *               Christoph Czurda (AIT)

24
  *

25
  */

1
/**
2
  *
3
  *                      OOAS Compiler
4
  *
5
  *       Copyright 2015, AIT Austrian Institute of Technology.
6
  * This code is based on the C# Version of the OOAS Compiler, which is
7
  * copyright 2015 by the Institute of Software Technology, Graz University
8
  * of Technology with portions copyright by the AIT Austrian Institute of
9
  * Technology. All rights reserved.
10
  *
11
  * SEE THE "LICENSE" FILE FOR THE TERMS UNDER WHICH THIS FILE IS PROVIDED.
12
  *
13
  * If you modify the file please update the list of contributors below to in-
14
  * clude your name. Please also stick to the coding convention of using TABs
15
  * to do the basic (block-level) indentation and spaces for anything after
16
  * that. (Enable the display of special chars and it should be pretty obvious
17
  * what this means.) Also, remove all trailing whitespace.
18
  *
19
  * Contributors:
20
  *               Willibald Krenn (AIT)
21
  *               Stephan Zimmerer (AIT)
22
  *               Markus Demetz (AIT)
23
  *               Christoph Czurda (AIT)
24
  *
25
  */
26 26

  
27 27

  
28
package org.momut.ooas.visitors;
29

  
30
import java.util.HashSet;
28
package org.momut.ooas.visitors;
31 29

  
30
import java.util.HashSet;
31

  
32 32
import org.momut.ooas.ast.IAst;
33 33
import org.momut.ooas.ast.IAstVisitor;
34 34
import org.momut.ooas.ast.expressions.AccessExpression;
......
98 98
import org.momut.ooas.ast.types.TupleType;
99 99
import org.momut.ooas.ast.types.UlyssesType;
100 100
import org.momut.ooas.parser.ParserState;
101

  
102
public abstract class OoaCompleteAstTraversalVisitor implements IAstVisitor
103
{
104
	protected HashSet<Object> m_visited = new HashSet<Object>();
105
	protected ParserState m_ParserState;
106
	protected boolean m_DuplicateVisit;
107

  
108
	protected void VisitSub(IAst subElement, IAst parent)
109
	{
110
		if (subElement == null)
111
			return;
112
		if (m_visited.contains(subElement))
113
			return;
114
		if (!(subElement instanceof OpaqueType) && !m_DuplicateVisit)
115
			m_visited.add(subElement);
116
		VisitAstElement(subElement, parent);
117
	}
118

  
119
	/// <summary>
120
	///  Is called once per Ast element. Makes sense to override it in a
121
	///  subclass..
122
	/// </summary>
123
	/// <param name="element">to be visited</param>
124
	/// <param name="parent">parent of the element in the ast</param>
125
	protected /*virtual*/ void VisitAstElement(IAst element, IAst parent)
126
	{
127
		element.Accept(this);
128
	}
129

  
130
	public OoaCompleteAstTraversalVisitor(ParserState aState)
131
	{
132
		m_ParserState = aState;
133
	}
134

  
135
	public OoaCompleteAstTraversalVisitor(ParserState aState, boolean completeTraversal)
136
	{
137
		this(aState);
138
		m_DuplicateVisit = completeTraversal;
139
	}
140

  
141
	@Override
142
	public String returnVisitorName()
143
	{
144
		return this.getClass().getSimpleName();
145
	}
146

  
147
	@Override
148
	public void done() {
149
	}
150

  
151
	@Override
152
	public /*override*/ String toString()
153
	{
154
		return returnVisitorName();
155
	}
156

  
157
	@Override
158
	public /*virtual*/ void visit(EnumIdentifier enumIdentifier)
159
	{
160
		VisitSub(enumIdentifier.type(), enumIdentifier);
161
	}
162

  
163
	@Override
164
	public /*virtual*/ void visit(ConstantIdentifier constantIdentifier)
165
	{
166
		if (constantIdentifier.type() != null)
167
			VisitSub(constantIdentifier.type(), constantIdentifier);
168
		VisitSub(constantIdentifier.Value(), constantIdentifier);
169
	}
170

  
171

  
172
	@Override
173
	public /*virtual*/ void visit(LandmarkIdentifier landmarkIdentifier)
174
	{
175
		VisitSub(landmarkIdentifier.type(), landmarkIdentifier);
176
	}
177

  
178
	@Override
179
	public /*virtual*/ void visit(AttributeIdentifier attributeIdentifier)
180
	{
181
		VisitSub(attributeIdentifier.type(), attributeIdentifier);
182
		VisitSub(attributeIdentifier.initializer(), attributeIdentifier);
183
	}
184

  
185
	@Override
186
	public /*virtual*/ void visit(ExpressionVariableIdentifier expressionVariableIdentifier)
187
	{
188
		VisitSub(expressionVariableIdentifier.type(), expressionVariableIdentifier);
189
	}
190

  
191
	@Override
192
	public /*virtual*/ void visit(ParameterIdentifier parameterIdentifier)
193
	{
194
		VisitSub(parameterIdentifier.type(), parameterIdentifier);
195
	}
196

  
197
	@Override
198
	public /*virtual*/ void visit(LocalVariableIdentifier localVariableIdentifier)
199
	{
200
		VisitSub(localVariableIdentifier.type(), localVariableIdentifier);
201
	}
202

  
203
	@Override
204
	public /*virtual*/ void visit(TypeIdentifier typeIdentifier)
205
	{
206
		VisitSub(typeIdentifier.type(), typeIdentifier);
207
	}
208

  
209
	@Override
210
	public /*virtual*/ void visit(SelfTypeIdentifier aself)
211
	{
212
		visit((TypeIdentifier)aself);
213
	}
214

  
215
	@Override
216
	public /*virtual*/ void visit(MethodIdentifier methodIdentifier)
217
	{
218
		VisitSub(methodIdentifier.type(), methodIdentifier);
219
		for (final Identifier sym: methodIdentifier.symbolTable().symbolList())
220
			VisitSub(sym, methodIdentifier);
221
		for (final ParameterIdentifier par: methodIdentifier.parameter())
222
			VisitSub(par, methodIdentifier);
223
		VisitSub(methodIdentifier.body(), methodIdentifier);
224
	}
225

  
226
	@Override
227
	public /*virtual*/ void visit(NamedActionIdentifier namedActionIdentifier)
228
	{
229
		VisitSub(namedActionIdentifier.type(), namedActionIdentifier);
230
		for (final Identifier sym : namedActionIdentifier.symbolTable().symbolList())
231
			VisitSub(sym, namedActionIdentifier);
232
		for (final ParameterIdentifier par: namedActionIdentifier.parameter())
233
			VisitSub(par, namedActionIdentifier);
234
		VisitSub(namedActionIdentifier.body(), namedActionIdentifier);
235
	}
236

  
237
	@Override
238
	public /*virtual*/ void visit(MainModule mainModule)
239
	{
240
		for (final Identifier sym: mainModule.symbolTable().symbolList())
241
			VisitSub(sym, mainModule);
242
		final boolean haveInstance = mainModule.instance() != null;
243
		if (haveInstance)
244
			VisitSub(mainModule.instance(), mainModule);
245
		else
246
			VisitSub(mainModule.systemDescription(), mainModule);
247
	}
248

  
249
	@Override
250
	public /*virtual*/ void visit(Module module)
251
	{
252
		for (final Identifier sym: module.symbolTable().symbolList())
253
			VisitSub(sym, module);
254
	}
255

  
256
	@Override
257
	public /*virtual*/ void visit(NondetIdentifierList nondetIdentifierList)
258
	{
259
		for (final Identifier id: nondetIdentifierList.identifiers())
260
			VisitSub(id, nondetIdentifierList);
261
	}
262

  
263
	@Override
264
	public /*virtual*/ void visit(SeqIdentifierList seqIdentifierList)
265
	{
266
		for (final Identifier id: seqIdentifierList.identifiers())
267
			VisitSub(id, seqIdentifierList);
268
	}
269

  
270
	@Override
271
	public /*virtual*/ void visit(PrioIdentifierList prioIdentifierList)
272
	{
273
		for (final Identifier id: prioIdentifierList.identifiers())
274
			VisitSub(id, prioIdentifierList);
275
	}
276

  
277
	@Override
278
	public /*virtual*/ void visit(UnspecIdentifierList unspecIdentifierList)
279
	{
280
		for (final Identifier id: unspecIdentifierList.identifiers())
281
			VisitSub(id, unspecIdentifierList);
282
	}
283

  
284
	@Override
285
	public /*virtual*/ void visit(NondetBlock nondetBlock)
286
	{
287
		for (final Identifier id: nondetBlock.symbols().symbolList())
288
			VisitSub(id, nondetBlock);
289

  
290
		for (final Statement stmnt: nondetBlock.statements())
291
			VisitSub(stmnt, nondetBlock);
292
	}
293

  
294
	@Override
295
	public /*virtual*/ void visit(SeqBlock seqBlock)
296
	{
297
		for (final Identifier id: seqBlock.symbols().symbolList())
298
			VisitSub(id, seqBlock);
299

  
300
		if (seqBlock.filter() != null)
301
			VisitSub(seqBlock.filter(), seqBlock);
302

  
303
		for (final Statement stmnt: seqBlock.statements())
304
			VisitSub(stmnt, seqBlock);
305
	}
306

  
307
	@Override
308
	public /*virtual*/ void visit(PrioBlock prioBlock)
309
	{
310
		for (final Identifier id: prioBlock.symbols().symbolList())
311
			VisitSub(id, prioBlock);
312

  
313
		for (final Statement stmnt: prioBlock.statements())
314
			VisitSub(stmnt, prioBlock);
315
	}
316

  
317
	@Override
318
	public /*virtual*/ void visit(GuardedCommand guardedCommand)
319
	{
320
		VisitSub(guardedCommand.guard(), guardedCommand);
321
		VisitSub(guardedCommand.body(), guardedCommand);
322
	}
323

  
324
	@Override
325
	public /*virtual*/ void visit(Assignment assignment)
326
	{
327
		for (final Expression vexp: assignment.places())
328
			VisitSub(vexp, assignment);
329
		for (final Expression expr: assignment.values())
330
			VisitSub(expr, assignment);
331

  
332
		VisitSub(assignment.nondetExpression(), assignment);
333
	}
334

  
335
	@Override
336
	public /*virtual*/ void visit(Call call)
337
	{
338
		VisitSub(call.callExpression(), call);
339
	}
340

  
341
	@Override
342
	public /*virtual*/ void visit(SkipStatement skipStatement)
343
	{ }
344

  
345
	@Override
346
	public void visit(BreakStatement breakStatement)
347
	{ }
348

  
349
	@Override
350
	public /*virtual*/ void visit(AbortStatement abortStatement)
351
	{ }
352

  
353
	@Override
354
	public /*virtual*/ void visit(KillStatement killStatement)
355
	{
356
		VisitSub(killStatement.someOne, killStatement);
357
	}
358

  
359
	@Override
360
	public /*virtual*/ <T>void visit(ValueExpression<T> valueExpression)
361
	{ }
362

  
363
	@Override
364
	public /*virtual*/ void visit(UnresolvedIdentifierExpression unresolvedIdentifierExpression)
365
	{
366
		VisitSub(unresolvedIdentifierExpression.type(), unresolvedIdentifierExpression);
367
	}
368

  
369
	@Override
370
	public /*virtual*/ void visit(IdentifierExpression identifierExpression)
371
	{
372
		VisitSub(identifierExpression.type(), identifierExpression);
373
		VisitSub(identifierExpression.identifier(), identifierExpression);
374
	}
375

  
376
	@Override
377
	public /*virtual*/ void visit(TypeExpression typeExpression)
378
	{
379
		VisitSub(typeExpression.type(), typeExpression);
380
	}
381

  
382
	@Override
383
	public /*virtual*/ void visit(ListConstructor listConstructor)
384
	{
385
		for (final Identifier lvar: listConstructor.comprehensionVariables().symbolList())
386
			VisitSub(lvar, listConstructor);
387

  
388
		for (final Expression elems: listConstructor.elements())
389
			VisitSub(elems, listConstructor);
390

  
391
		if (listConstructor.comprehension() != null)
392
			VisitSub(listConstructor.comprehension(), listConstructor);
393
	}
394

  
395
	@Override
396
	public /*virtual*/ void visit(SetConstructor setConstructor)
397
	{
398
		for (final Identifier svar: setConstructor.comprehensionVariables().symbolList())
399
			VisitSub(svar, setConstructor);
400

  
401
		for (final Expression elems: setConstructor.items())
402
			VisitSub(elems, setConstructor);
403

  
404
		VisitSub(setConstructor.comprehension(), setConstructor);
405
	}
406

  
407
	@Override
408
	public /*virtual*/ void visit(MapConstructor mapConstructor)
409
	{
410
		/*foreach (var lvar in mapConstructor.localVariables.symbolList)
411
			VisitSub(lvar, mapConstructor);*/
412

  
413
		for (final MapItem elem: mapConstructor.items())
414
		{
415
			VisitSub(elem.key, mapConstructor);
416
			VisitSub(elem.value, mapConstructor);
417
		}
418
	}
419

  
420
	@Override
421
	public /*virtual*/ void visit(TupleConstructor tupleConstructor)
422
	{
423
		/*foreach (var lvar in tupleConstructor.localVariables.symbolList)
424
			VisitSub(lvar, tupleConstructor);*/
425

  
426
		for (final Expression elem: tupleConstructor.values())
427
			VisitSub(elem, tupleConstructor);
428
	}
429

  
430
	@Override
431
	public /*virtual*/ void visit(AccessExpression accessExpression)
432
	{
433
		VisitSub(accessExpression.left(), accessExpression);
434
		VisitSub(accessExpression.right(), accessExpression);
435
	}
436

  
437
	@Override
438
	public /*virtual*/ void visit(BinaryOperator binaryOperator)
439
	{
440
		VisitSub(binaryOperator.left(), binaryOperator);
441
		VisitSub(binaryOperator.right(), binaryOperator);
442
	}
443

  
444
	@Override
445
	public /*virtual*/ void visit(TernaryOperator ternaryOperator)
446
	{
447
		VisitSub(ternaryOperator.left(), ternaryOperator);
448
		VisitSub(ternaryOperator.mid(), ternaryOperator);
449
		VisitSub(ternaryOperator.right(), ternaryOperator);
450
	}
451

  
452
	@Override
453
	public /*virtual*/ void visit(TupleMapAccessExpression tupleMapAccessExpression)
454
	{
455
		VisitSub(tupleMapAccessExpression.argument(), tupleMapAccessExpression);
456
		VisitSub(tupleMapAccessExpression.child(), tupleMapAccessExpression);
457
	}
458

  
459
	@Override
460
	public /*virtual*/ void visit(CallExpression callExpression)
461
	{
462
		if (callExpression.arguments() != null)
463
			for (final Expression arg: callExpression.arguments())
464
				VisitSub(arg, callExpression);
465
		VisitSub(callExpression.child(), callExpression);
466
	}
467

  
468
	@Override
469
	public /*virtual*/ void visit(ForallQuantifier quantifier)
470
	{
471
		for (final Identifier lvar: quantifier.symbols().symbolList())
472
			VisitSub(lvar, quantifier);
473

  
474
		VisitSub(quantifier.child(), quantifier);
475
	}
476

  
477
	@Override
478
	public /*virtual*/ void visit(ExistsQuantifier quantifier)
479
	{
480
		for (final Identifier lvar: quantifier.symbols().symbolList())
481
			VisitSub(lvar, quantifier);
482

  
483
		VisitSub(quantifier.child(), quantifier);
484
	}
485

  
486
	@Override
487
	public /*virtual*/ void visit(UnaryOperator unaryOperator)
488
	{
489
		VisitSub(unaryOperator.child(), unaryOperator);
490
		if (unaryOperator.kind() == ExpressionKind.Cast)
491
			VisitSub(unaryOperator.type(), unaryOperator);
492
	}
493

  
494

  
495

  
496
	@Override
497
	public /*virtual*/ void visit(CharType charType)
498
	{
499
	}
500

  
501
	@Override
502
	public /*virtual*/ void visit(IntType intType)
503
	{
504
	}
505

  
506
	@Override
507
	public /*virtual*/ void visit(BoolType boolType)
508
	{
509
	}
510

  
511
	@Override
512
	public /*virtual*/ void visit(FloatType floatType)
513
	{
514
	}
515

  
516
	@Override
517
	public /*virtual*/ void visit(EnumType enumType)
518
	{
519
		for (final Identifier sym: enumType.listOfEnumSymbols())
520
			VisitSub(sym, enumType);
521
	}
522

  
523
	@Override
524
	public /*virtual*/ void visit(ListType listType)
525
	{
526
		VisitSub(listType.innerType(), listType);
527
	}
528

  
529
	@Override
530
	public /*virtual*/ void visit(MapType mapType)
531
	{
532
		VisitSub(mapType.fromType(), mapType);
533
		VisitSub(mapType.toType(), mapType);
534
	}
535

  
536
	@Override
537
	public /*virtual*/ void visit(QrType qrType)
538
	{
539
		for (final Identifier m: qrType.landmarks())
540
			VisitSub(m, qrType);
541
	}
542

  
543
	@Override
544
	public /*virtual*/ void visit(TupleType tupleType)
545
	{
546
		for (final UlyssesType t: tupleType.innerTypes())
547
			VisitSub(t, tupleType);
548
	}
549

  
550
	@Override
551
	public /*virtual*/ void visit(FunctionType functionType)
552
	{
553
		for (final UlyssesType a: functionType.parameter())
554
			VisitSub(a, functionType);
555
		VisitSub(functionType.returnType(), functionType);
556
	}
557

  
558
	@Override
559
	public /*virtual*/ void visit(OoActionSystemType ooActionSystemType)
560
	{
561
		for (final Identifier s: ooActionSystemType.symbols().symbolList())
562
			VisitSub(s, ooActionSystemType);
563

  
564
		VisitSub(ooActionSystemType.doOdBlock(), ooActionSystemType);
565
	}
566

  
567
	public /*virtual*/ @Override
568
	void visit(OpaqueType opaqueType)
569
	{
570
		VisitSub(opaqueType.resolvedType(), opaqueType);
571
	}
572

  
573
	@Override
574
	public /*virtual*/ void visit(NullType nullType)
575
	{ }
576

  
577
	@Override
578
	public /*virtual*/ void visit(AnyType anyType)
579
	{ }
580

  
581
	@Override
582
	public /*virtual*/ void visit(ObjectConstructor objectConstructor)
583
	{
584
		VisitSub(objectConstructor.type(), objectConstructor);
585
	}
586

  
587
	@Override
588
	public /*virtual*/ void visit(QValConstructor qValConstructor)
589
	{
590
	}
591

  
592
	@Override
593
	public /*virtual*/ void visit(QualitativeConstraintStatement qalitativeConstraintStatement)
594
	{
595
		VisitSub(qalitativeConstraintStatement.variable0(), qalitativeConstraintStatement);
596
		VisitSub(qalitativeConstraintStatement.variable1(), qalitativeConstraintStatement);
597
		if (qalitativeConstraintStatement.variable2() != null)
598
			VisitSub(qalitativeConstraintStatement.variable2(), qalitativeConstraintStatement);
599
	}
600
}
601

  
101

  
102
public abstract class OoaCompleteAstTraversalVisitor implements IAstVisitor
103
{
104
	protected HashSet<Object> m_visited = new HashSet<Object>();
105
	protected ParserState m_ParserState;
106
	protected boolean m_DuplicateVisit;
107

  
108
	protected void VisitSub(IAst subElement, IAst parent)
109
	{
110
		if (subElement == null)
111
			return;
112
		if (m_visited.contains(subElement))
113
			return;
114
		if (!(subElement instanceof OpaqueType) && !m_DuplicateVisit)
115
			m_visited.add(subElement);
116
		VisitAstElement(subElement, parent);
117
	}
118

  
119
	/// <summary>
120
	///  Is called once per Ast element. Makes sense to override it in a
121
	///  subclass..
122
	/// </summary>
123
	/// <param name="element">to be visited</param>
124
	/// <param name="parent">parent of the element in the ast</param>
125
	protected /*virtual*/ void VisitAstElement(IAst element, IAst parent)
126
	{
127
		element.Accept(this);
128
	}
129

  
130
	public OoaCompleteAstTraversalVisitor(ParserState aState)
131
	{
132
		m_ParserState = aState;
133
	}
134

  
135
	public OoaCompleteAstTraversalVisitor(ParserState aState, boolean completeTraversal)
136
	{
137
		this(aState);
138
		m_DuplicateVisit = completeTraversal;
139
	}
140

  
141
	@Override
142
	public String returnVisitorName()
143
	{
144
		return this.getClass().getSimpleName();
145
	}
146

  
147
	@Override
148
	public void done() {
149
	}
150

  
151
	@Override
152
	public /*override*/ String toString()
153
	{
154
		return returnVisitorName();
155
	}
156

  
157
	@Override
158
	public /*virtual*/ void visit(EnumIdentifier enumIdentifier)
159
	{
160
		VisitSub(enumIdentifier.type(), enumIdentifier);
161
	}
162

  
163
	@Override
164
	public /*virtual*/ void visit(ConstantIdentifier constantIdentifier)
165
	{
166
		if (constantIdentifier.type() != null)
167
			VisitSub(constantIdentifier.type(), constantIdentifier);
168
		VisitSub(constantIdentifier.Value(), constantIdentifier);
169
	}
170

  
171

  
172
	@Override
173
	public /*virtual*/ void visit(LandmarkIdentifier landmarkIdentifier)
174
	{
175
		VisitSub(landmarkIdentifier.type(), landmarkIdentifier);
176
	}
177

  
178
	@Override
179
	public /*virtual*/ void visit(AttributeIdentifier attributeIdentifier)
180
	{
181
		VisitSub(attributeIdentifier.type(), attributeIdentifier);
182
		VisitSub(attributeIdentifier.initializer(), attributeIdentifier);
183
	}
184

  
185
	@Override
186
	public /*virtual*/ void visit(ExpressionVariableIdentifier expressionVariableIdentifier)
187
	{
188
		VisitSub(expressionVariableIdentifier.type(), expressionVariableIdentifier);
189
	}
190

  
191
	@Override
192
	public /*virtual*/ void visit(ParameterIdentifier parameterIdentifier)
193
	{
194
		VisitSub(parameterIdentifier.type(), parameterIdentifier);
195
	}
196

  
197
	@Override
198
	public /*virtual*/ void visit(LocalVariableIdentifier localVariableIdentifier)
199
	{
200
		VisitSub(localVariableIdentifier.type(), localVariableIdentifier);
201
	}
202

  
203
	@Override
204
	public /*virtual*/ void visit(TypeIdentifier typeIdentifier)
205
	{
206
		VisitSub(typeIdentifier.type(), typeIdentifier);
207
	}
208

  
209
	@Override
210
	public /*virtual*/ void visit(SelfTypeIdentifier aself)
211
	{
212
		visit((TypeIdentifier)aself);
213
	}
214

  
215
	@Override
216
	public /*virtual*/ void visit(MethodIdentifier methodIdentifier)
217
	{
218
		VisitSub(methodIdentifier.type(), methodIdentifier);
219
		for (final Identifier sym: methodIdentifier.symbolTable().symbolList())
220
			VisitSub(sym, methodIdentifier);
221
		for (final ParameterIdentifier par: methodIdentifier.parameter())
222
			VisitSub(par, methodIdentifier);
223
		VisitSub(methodIdentifier.body(), methodIdentifier);
224
	}
225

  
226
	@Override
227
	public /*virtual*/ void visit(NamedActionIdentifier namedActionIdentifier)
228
	{
229
		VisitSub(namedActionIdentifier.type(), namedActionIdentifier);
230
		for (final Identifier sym : namedActionIdentifier.symbolTable().symbolList())
231
			VisitSub(sym, namedActionIdentifier);
232
		for (final ParameterIdentifier par: namedActionIdentifier.parameter())
233
			VisitSub(par, namedActionIdentifier);
234
		VisitSub(namedActionIdentifier.body(), namedActionIdentifier);
235
	}
236

  
237
	@Override
238
	public /*virtual*/ void visit(MainModule mainModule)
239
	{
240
		for (final Identifier sym: mainModule.symbolTable().symbolList())
241
			VisitSub(sym, mainModule);
242
		final boolean haveInstance = mainModule.instance() != null;
243
		if (haveInstance)
244
			VisitSub(mainModule.instance(), mainModule);
245
		else
246
			VisitSub(mainModule.systemDescription(), mainModule);
247
	}
248

  
249
	@Override
250
	public /*virtual*/ void visit(Module module)
251
	{
252
		for (final Identifier sym: module.symbolTable().symbolList())
253
			VisitSub(sym, module);
254
	}
255

  
256
	@Override
257
	public /*virtual*/ void visit(NondetIdentifierList nondetIdentifierList)
258
	{
259
		for (final Identifier id: nondetIdentifierList.identifiers())
260
			VisitSub(id, nondetIdentifierList);
261
	}
262

  
263
	@Override
264
	public /*virtual*/ void visit(SeqIdentifierList seqIdentifierList)
265
	{
266
		for (final Identifier id: seqIdentifierList.identifiers())
267
			VisitSub(id, seqIdentifierList);
268
	}
269

  
270
	@Override
271
	public /*virtual*/ void visit(PrioIdentifierList prioIdentifierList)
272
	{
273
		for (final Identifier id: prioIdentifierList.identifiers())
274
			VisitSub(id, prioIdentifierList);
275
	}
276

  
277
	@Override
278
	public /*virtual*/ void visit(UnspecIdentifierList unspecIdentifierList)
279
	{
280
		for (final Identifier id: unspecIdentifierList.identifiers())
281
			VisitSub(id, unspecIdentifierList);
282
	}
283

  
284
	@Override
285
	public /*virtual*/ void visit(NondetBlock nondetBlock)
286
	{
287
		for (final Identifier id: nondetBlock.symbols().symbolList())
288
			VisitSub(id, nondetBlock);
289

  
290
		for (final Statement stmnt: nondetBlock.statements())
291
			VisitSub(stmnt, nondetBlock);
292
	}
293

  
294
	@Override
295
	public /*virtual*/ void visit(SeqBlock seqBlock)
296
	{
297
		for (final Identifier id: seqBlock.symbols().symbolList())
298
			VisitSub(id, seqBlock);
299

  
300
		if (seqBlock.filter() != null)
301
			VisitSub(seqBlock.filter(), seqBlock);
302

  
303
		for (final Statement stmnt: seqBlock.statements())
304
			VisitSub(stmnt, seqBlock);
305
	}
306

  
307
	@Override
308
	public /*virtual*/ void visit(PrioBlock prioBlock)
309
	{
310
		for (final Identifier id: prioBlock.symbols().symbolList())
311
			VisitSub(id, prioBlock);
312

  
313
		for (final Statement stmnt: prioBlock.statements())
314
			VisitSub(stmnt, prioBlock);
315
	}
316

  
317
	@Override
318
	public /*virtual*/ void visit(GuardedCommand guardedCommand)
319
	{
320
		VisitSub(guardedCommand.guard(), guardedCommand);
321
		VisitSub(guardedCommand.body(), guardedCommand);
322
	}
323

  
324
	@Override
325
	public /*virtual*/ void visit(Assignment assignment)
326
	{
327
		for (final Expression vexp: assignment.places())
328
			VisitSub(vexp, assignment);
329
		for (final Expression expr: assignment.values())
330
			VisitSub(expr, assignment);
331

  
332
		VisitSub(assignment.nondetExpression(), assignment);
333
	}
334

  
335
	@Override
336
	public /*virtual*/ void visit(Call call)
337
	{
338
		VisitSub(call.callExpression(), call);
339
	}
340

  
341
	@Override
342
	public /*virtual*/ void visit(SkipStatement skipStatement)
343
	{ }
344

  
345
	@Override
346
	public void visit(BreakStatement breakStatement)
347
	{ }
348

  
349
	@Override
350
	public /*virtual*/ void visit(AbortStatement abortStatement)
351
	{ }
352

  
353
	@Override
354
	public /*virtual*/ void visit(KillStatement killStatement)
355
	{
356
		VisitSub(killStatement.someOne, killStatement);
357
	}
358

  
359
	@Override
360
	public /*virtual*/ <T>void visit(ValueExpression<T> valueExpression)
361
	{ }
362

  
363
	@Override
364
	public /*virtual*/ void visit(UnresolvedIdentifierExpression unresolvedIdentifierExpression)
365
	{
366
		VisitSub(unresolvedIdentifierExpression.type(), unresolvedIdentifierExpression);
367
	}
368

  
369
	@Override
370
	public /*virtual*/ void visit(IdentifierExpression identifierExpression)
371
	{
372
		VisitSub(identifierExpression.type(), identifierExpression);
373
		VisitSub(identifierExpression.identifier(), identifierExpression);
374
	}
375

  
376
	@Override
377
	public /*virtual*/ void visit(TypeExpression typeExpression)
378
	{
379
		VisitSub(typeExpression.type(), typeExpression);
380
	}
381

  
382
	@Override
383
	public /*virtual*/ void visit(ListConstructor listConstructor)
384
	{
385
		for (final Identifier lvar: listConstructor.comprehensionVariables().symbolList())
386
			VisitSub(lvar, listConstructor);
387

  
388
		for (final Expression elems: listConstructor.elements())
389
			VisitSub(elems, listConstructor);
390

  
391
		if (listConstructor.comprehension() != null)
392
			VisitSub(listConstructor.comprehension(), listConstructor);
393
	}
394

  
395
	@Override
396
	public /*virtual*/ void visit(SetConstructor setConstructor)
397
	{
398
		for (final Identifier svar: setConstructor.comprehensionVariables().symbolList())
399
			VisitSub(svar, setConstructor);
400

  
401
		for (final Expression elems: setConstructor.items())
402
			VisitSub(elems, setConstructor);
403

  
404
		VisitSub(setConstructor.comprehension(), setConstructor);
405
	}
406

  
407
	@Override
408
	public /*virtual*/ void visit(MapConstructor mapConstructor)
409
	{
410
		/*foreach (var lvar in mapConstructor.localVariables.symbolList)
411
			VisitSub(lvar, mapConstructor);*/
412

  
413
		for (final MapItem elem: mapConstructor.items())
414
		{
415
			VisitSub(elem.key, mapConstructor);
416
			VisitSub(elem.value, mapConstructor);
417
		}
418
	}
419

  
420
	@Override
421
	public /*virtual*/ void visit(TupleConstructor tupleConstructor)
422
	{
423
		/*foreach (var lvar in tupleConstructor.localVariables.symbolList)
424
			VisitSub(lvar, tupleConstructor);*/
425

  
426
		for (final Expression elem: tupleConstructor.values())
427
			VisitSub(elem, tupleConstructor);
428
	}
429

  
430
	@Override
431
	public /*virtual*/ void visit(AccessExpression accessExpression)
432
	{
433
		VisitSub(accessExpression.left(), accessExpression);
434
		VisitSub(accessExpression.right(), accessExpression);
435
	}
436

  
437
	@Override
438
	public /*virtual*/ void visit(BinaryOperator binaryOperator)
439
	{
440
		VisitSub(binaryOperator.left(), binaryOperator);
441
		VisitSub(binaryOperator.right(), binaryOperator);
442
	}
443

  
444
	@Override
445
	public /*virtual*/ void visit(TernaryOperator ternaryOperator)
446
	{
447
		VisitSub(ternaryOperator.left(), ternaryOperator);
448
		VisitSub(ternaryOperator.mid(), ternaryOperator);
449
		VisitSub(ternaryOperator.right(), ternaryOperator);
450
	}
451

  
452
	@Override
453
	public /*virtual*/ void visit(TupleMapAccessExpression tupleMapAccessExpression)
454
	{
455
		VisitSub(tupleMapAccessExpression.argument(), tupleMapAccessExpression);
456
		VisitSub(tupleMapAccessExpression.child(), tupleMapAccessExpression);
457
	}
458

  
459
	@Override
460
	public /*virtual*/ void visit(CallExpression callExpression)
461
	{
462
		if (callExpression.arguments() != null)
463
			for (final Expression arg: callExpression.arguments())
464
				VisitSub(arg, callExpression);
465
		VisitSub(callExpression.child(), callExpression);
466
	}
467

  
468
	@Override
469
	public /*virtual*/ void visit(ForallQuantifier quantifier)
470
	{
471
		for (final Identifier lvar: quantifier.symbols().symbolList())
472
			VisitSub(lvar, quantifier);
473

  
474
		VisitSub(quantifier.child(), quantifier);
475
	}
476

  
477
	@Override
478
	public /*virtual*/ void visit(ExistsQuantifier quantifier)
479
	{
480
		for (final Identifier lvar: quantifier.symbols().symbolList())
481
			VisitSub(lvar, quantifier);
482

  
483
		VisitSub(quantifier.child(), quantifier);
484
	}
485

  
486
	@Override
487
	public /*virtual*/ void visit(UnaryOperator unaryOperator)
488
	{
489
		VisitSub(unaryOperator.child(), unaryOperator);
490
		if (unaryOperator.kind() == ExpressionKind.Cast)
491
			VisitSub(unaryOperator.type(), unaryOperator);
492
	}
493

  
494

  
495

  
496
	@Override
497
	public /*virtual*/ void visit(CharType charType)
498
	{
499
	}
500

  
501
	@Override
502
	public /*virtual*/ void visit(IntType intType)
503
	{
504
	}
505

  
506
	@Override
507
	public /*virtual*/ void visit(BoolType boolType)
508
	{
509
	}
510

  
511
	@Override
512
	public /*virtual*/ void visit(FloatType floatType)
513
	{
514
	}
515

  
516
	@Override
517
	public /*virtual*/ void visit(EnumType enumType)
518
	{
519
		for (final Identifier sym: enumType.listOfEnumSymbols())
520
			VisitSub(sym, enumType);
521
	}
522

  
523
	@Override
524
	public /*virtual*/ void visit(ListType listType)
525
	{
526
		VisitSub(listType.innerType(), listType);
527
	}
528

  
529
	@Override
530
	public /*virtual*/ void visit(MapType mapType)
531
	{
532
		VisitSub(mapType.fromType(), mapType);
533
		VisitSub(mapType.toType(), mapType);
534
	}
535

  
536
	@Override
537
	public /*virtual*/ void visit(QrType qrType)
538
	{
539
		for (final Identifier m: qrType.landmarks())
540
			VisitSub(m, qrType);
541
	}
542

  
543
	@Override
544
	public /*virtual*/ void visit(TupleType tupleType)
545
	{
546
		for (final UlyssesType t: tupleType.innerTypes())
547
			VisitSub(t, tupleType);
548
	}
549

  
550
	@Override
551
	public /*virtual*/ void visit(FunctionType functionType)
552
	{
553
		for (final UlyssesType a: functionType.parameter())
554
			VisitSub(a, functionType);
555
		VisitSub(functionType.returnType(), functionType);
556
	}
557

  
558
	@Override
559
	public /*virtual*/ void visit(OoActionSystemType ooActionSystemType)
560
	{
561
		for (final Identifier s: ooActionSystemType.symbols().symbolList())
562
			VisitSub(s, ooActionSystemType);
563

  
564
		VisitSub(ooActionSystemType.doOdBlock(), ooActionSystemType);
565
	}
566

  
567
	public /*virtual*/ @Override
568
	void visit(OpaqueType opaqueType)
569
	{
570
		VisitSub(opaqueType.resolvedType(), opaqueType);
571
	}
572

  
573
	@Override
574
	public /*virtual*/ void visit(NullType nullType)
575
	{ }
576

  
577
	@Override
578
	public /*virtual*/ void visit(AnyType anyType)
579
	{ }
580

  
581
	@Override
582
	public /*virtual*/ void visit(ObjectConstructor objectConstructor)
583
	{
584
		VisitSub(objectConstructor.type(), objectConstructor);
585
	}
586

  
587
	@Override
588
	public /*virtual*/ void visit(QValConstructor qValConstructor)
589
	{
590
	}
591

  
592
	@Override
593
	public /*virtual*/ void visit(QualitativeConstraintStatement qalitativeConstraintStatement)
594
	{
595
		VisitSub(qalitativeConstraintStatement.variable0(), qalitativeConstraintStatement);
596
		VisitSub(qalitativeConstraintStatement.variable1(), qalitativeConstraintStatement);
597
		if (qalitativeConstraintStatement.variable2() != null)
598
			VisitSub(qalitativeConstraintStatement.variable2(), qalitativeConstraintStatement);
599
	}
600
}
601

  

Also available in: Unified diff