001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 *  Unless required by applicable law or agreed to in writing, software
012 *  distributed under the License is distributed on an "AS IS" BASIS,
013 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 *  See the License for the specific language governing permissions and
015 *  limitations under the License.
016 *
017 */
018package org.apache.bcel.generic;
019
020/**
021 * Interface implementing the Visitor pattern programming style.
022 * I.e., a class that implements this interface can handle all types of
023 * instructions with the properly typed methods just by calling the accept()
024 * method.
025 *
026 */
027public interface Visitor {
028
029    void visitStackInstruction( StackInstruction obj );
030
031
032    void visitLocalVariableInstruction( LocalVariableInstruction obj );
033
034
035    void visitBranchInstruction( BranchInstruction obj );
036
037
038    void visitLoadClass( LoadClass obj );
039
040
041    void visitFieldInstruction( FieldInstruction obj );
042
043
044    void visitIfInstruction( IfInstruction obj );
045
046
047    void visitConversionInstruction( ConversionInstruction obj );
048
049
050    void visitPopInstruction( PopInstruction obj );
051
052
053    void visitStoreInstruction( StoreInstruction obj );
054
055
056    void visitTypedInstruction( TypedInstruction obj );
057
058
059    void visitSelect( Select obj );
060
061
062    void visitJsrInstruction( JsrInstruction obj );
063
064
065    void visitGotoInstruction( GotoInstruction obj );
066
067
068    void visitUnconditionalBranch( UnconditionalBranch obj );
069
070
071    void visitPushInstruction( PushInstruction obj );
072
073
074    void visitArithmeticInstruction( ArithmeticInstruction obj );
075
076
077    void visitCPInstruction( CPInstruction obj );
078
079
080    void visitInvokeInstruction( InvokeInstruction obj );
081
082
083    void visitArrayInstruction( ArrayInstruction obj );
084
085
086    void visitAllocationInstruction( AllocationInstruction obj );
087
088
089    void visitReturnInstruction( ReturnInstruction obj );
090
091
092    void visitFieldOrMethod( FieldOrMethod obj );
093
094
095    void visitConstantPushInstruction( ConstantPushInstruction obj );
096
097
098    void visitExceptionThrower( ExceptionThrower obj );
099
100
101    void visitLoadInstruction( LoadInstruction obj );
102
103
104    void visitVariableLengthInstruction( VariableLengthInstruction obj );
105
106
107    void visitStackProducer( StackProducer obj );
108
109
110    void visitStackConsumer( StackConsumer obj );
111
112
113    void visitACONST_NULL( ACONST_NULL obj );
114
115
116    void visitGETSTATIC( GETSTATIC obj );
117
118
119    void visitIF_ICMPLT( IF_ICMPLT obj );
120
121
122    void visitMONITOREXIT( MONITOREXIT obj );
123
124
125    void visitIFLT( IFLT obj );
126
127
128    void visitLSTORE( LSTORE obj );
129
130
131    void visitPOP2( POP2 obj );
132
133
134    void visitBASTORE( BASTORE obj );
135
136
137    void visitISTORE( ISTORE obj );
138
139
140    void visitCHECKCAST( CHECKCAST obj );
141
142
143    void visitFCMPG( FCMPG obj );
144
145
146    void visitI2F( I2F obj );
147
148
149    void visitATHROW( ATHROW obj );
150
151
152    void visitDCMPL( DCMPL obj );
153
154
155    void visitARRAYLENGTH( ARRAYLENGTH obj );
156
157
158    void visitDUP( DUP obj );
159
160
161    void visitINVOKESTATIC( INVOKESTATIC obj );
162
163
164    void visitLCONST( LCONST obj );
165
166
167    void visitDREM( DREM obj );
168
169
170    void visitIFGE( IFGE obj );
171
172
173    void visitCALOAD( CALOAD obj );
174
175
176    void visitLASTORE( LASTORE obj );
177
178
179    void visitI2D( I2D obj );
180
181
182    void visitDADD( DADD obj );
183
184
185    void visitINVOKESPECIAL( INVOKESPECIAL obj );
186
187
188    void visitIAND( IAND obj );
189
190
191    void visitPUTFIELD( PUTFIELD obj );
192
193
194    void visitILOAD( ILOAD obj );
195
196
197    void visitDLOAD( DLOAD obj );
198
199
200    void visitDCONST( DCONST obj );
201
202
203    void visitNEW( NEW obj );
204
205
206    void visitIFNULL( IFNULL obj );
207
208
209    void visitLSUB( LSUB obj );
210
211
212    void visitL2I( L2I obj );
213
214
215    void visitISHR( ISHR obj );
216
217
218    void visitTABLESWITCH( TABLESWITCH obj );
219
220
221    void visitIINC( IINC obj );
222
223
224    void visitDRETURN( DRETURN obj );
225
226
227    void visitFSTORE( FSTORE obj );
228
229
230    void visitDASTORE( DASTORE obj );
231
232
233    void visitIALOAD( IALOAD obj );
234
235
236    void visitDDIV( DDIV obj );
237
238
239    void visitIF_ICMPGE( IF_ICMPGE obj );
240
241
242    void visitLAND( LAND obj );
243
244
245    void visitIDIV( IDIV obj );
246
247
248    void visitLOR( LOR obj );
249
250
251    void visitCASTORE( CASTORE obj );
252
253
254    void visitFREM( FREM obj );
255
256
257    void visitLDC( LDC obj );
258
259
260    void visitBIPUSH( BIPUSH obj );
261
262
263    void visitDSTORE( DSTORE obj );
264
265
266    void visitF2L( F2L obj );
267
268
269    void visitFMUL( FMUL obj );
270
271
272    void visitLLOAD( LLOAD obj );
273
274
275    void visitJSR( JSR obj );
276
277
278    void visitFSUB( FSUB obj );
279
280
281    void visitSASTORE( SASTORE obj );
282
283
284    void visitALOAD( ALOAD obj );
285
286
287    void visitDUP2_X2( DUP2_X2 obj );
288
289
290    void visitRETURN( RETURN obj );
291
292
293    void visitDALOAD( DALOAD obj );
294
295
296    void visitSIPUSH( SIPUSH obj );
297
298
299    void visitDSUB( DSUB obj );
300
301
302    void visitL2F( L2F obj );
303
304
305    void visitIF_ICMPGT( IF_ICMPGT obj );
306
307
308    void visitF2D( F2D obj );
309
310
311    void visitI2L( I2L obj );
312
313
314    void visitIF_ACMPNE( IF_ACMPNE obj );
315
316
317    void visitPOP( POP obj );
318
319
320    void visitI2S( I2S obj );
321
322
323    void visitIFEQ( IFEQ obj );
324
325
326    void visitSWAP( SWAP obj );
327
328
329    void visitIOR( IOR obj );
330
331
332    void visitIREM( IREM obj );
333
334
335    void visitIASTORE( IASTORE obj );
336
337
338    void visitNEWARRAY( NEWARRAY obj );
339
340
341    void visitINVOKEINTERFACE( INVOKEINTERFACE obj );
342
343
344    void visitINEG( INEG obj );
345
346
347    void visitLCMP( LCMP obj );
348
349
350    void visitJSR_W( JSR_W obj );
351
352
353    void visitMULTIANEWARRAY( MULTIANEWARRAY obj );
354
355
356    void visitDUP_X2( DUP_X2 obj );
357
358
359    void visitSALOAD( SALOAD obj );
360
361
362    void visitIFNONNULL( IFNONNULL obj );
363
364
365    void visitDMUL( DMUL obj );
366
367
368    void visitIFNE( IFNE obj );
369
370
371    void visitIF_ICMPLE( IF_ICMPLE obj );
372
373
374    void visitLDC2_W( LDC2_W obj );
375
376
377    void visitGETFIELD( GETFIELD obj );
378
379
380    void visitLADD( LADD obj );
381
382
383    void visitNOP( NOP obj );
384
385
386    void visitFALOAD( FALOAD obj );
387
388
389    void visitINSTANCEOF( INSTANCEOF obj );
390
391
392    void visitIFLE( IFLE obj );
393
394
395    void visitLXOR( LXOR obj );
396
397
398    void visitLRETURN( LRETURN obj );
399
400
401    void visitFCONST( FCONST obj );
402
403
404    void visitIUSHR( IUSHR obj );
405
406
407    void visitBALOAD( BALOAD obj );
408
409
410    void visitDUP2( DUP2 obj );
411
412
413    void visitIF_ACMPEQ( IF_ACMPEQ obj );
414
415
416    void visitIMPDEP1( IMPDEP1 obj );
417
418
419    void visitMONITORENTER( MONITORENTER obj );
420
421
422    void visitLSHL( LSHL obj );
423
424
425    void visitDCMPG( DCMPG obj );
426
427
428    void visitD2L( D2L obj );
429
430
431    void visitIMPDEP2( IMPDEP2 obj );
432
433
434    void visitL2D( L2D obj );
435
436
437    void visitRET( RET obj );
438
439
440    void visitIFGT( IFGT obj );
441
442
443    void visitIXOR( IXOR obj );
444
445
446    void visitINVOKEVIRTUAL( INVOKEVIRTUAL obj );
447
448
449    /**
450     * @since 6.0
451     */
452    void visitINVOKEDYNAMIC( INVOKEDYNAMIC obj );
453
454
455    void visitFASTORE( FASTORE obj );
456
457
458    void visitIRETURN( IRETURN obj );
459
460
461    void visitIF_ICMPNE( IF_ICMPNE obj );
462
463
464    void visitFLOAD( FLOAD obj );
465
466
467    void visitLDIV( LDIV obj );
468
469
470    void visitPUTSTATIC( PUTSTATIC obj );
471
472
473    void visitAALOAD( AALOAD obj );
474
475
476    void visitD2I( D2I obj );
477
478
479    void visitIF_ICMPEQ( IF_ICMPEQ obj );
480
481
482    void visitAASTORE( AASTORE obj );
483
484
485    void visitARETURN( ARETURN obj );
486
487
488    void visitDUP2_X1( DUP2_X1 obj );
489
490
491    void visitFNEG( FNEG obj );
492
493
494    void visitGOTO_W( GOTO_W obj );
495
496
497    void visitD2F( D2F obj );
498
499
500    void visitGOTO( GOTO obj );
501
502
503    void visitISUB( ISUB obj );
504
505
506    void visitF2I( F2I obj );
507
508
509    void visitDNEG( DNEG obj );
510
511
512    void visitICONST( ICONST obj );
513
514
515    void visitFDIV( FDIV obj );
516
517
518    void visitI2B( I2B obj );
519
520
521    void visitLNEG( LNEG obj );
522
523
524    void visitLREM( LREM obj );
525
526
527    void visitIMUL( IMUL obj );
528
529
530    void visitIADD( IADD obj );
531
532
533    void visitLSHR( LSHR obj );
534
535
536    void visitLOOKUPSWITCH( LOOKUPSWITCH obj );
537
538
539    void visitDUP_X1( DUP_X1 obj );
540
541
542    void visitFCMPL( FCMPL obj );
543
544
545    void visitI2C( I2C obj );
546
547
548    void visitLMUL( LMUL obj );
549
550
551    void visitLUSHR( LUSHR obj );
552
553
554    void visitISHL( ISHL obj );
555
556
557    void visitLALOAD( LALOAD obj );
558
559
560    void visitASTORE( ASTORE obj );
561
562
563    void visitANEWARRAY( ANEWARRAY obj );
564
565
566    void visitFRETURN( FRETURN obj );
567
568
569    void visitFADD( FADD obj );
570
571
572    void visitBREAKPOINT( BREAKPOINT obj );
573}