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}