001 package serp.bytecode.visitor; 002 003 import serp.bytecode.*; 004 import serp.bytecode.Deprecated; 005 import serp.bytecode.lowlevel.*; 006 007 008 /** 009 * Base class for visitors on a bytecode entity. The public {@link #visit} 010 * method will traverse the object graph of the given entity, calling the 011 * <code>enter*</code> and <code>exit*</code> methods as it visits each 012 * object. The traversal is done depth-first. Subclasses should override 013 * only the methods for visiting the entities they are interested in. 014 * Whenever there is a general method (i.e. <code>enter/exitEntry</code>) as 015 * well as a more specific one (i.e. <code>enter/exitStringEntry</code>), the 016 * more general method will be called first, followed by a call on the correct 017 * specific method. Most subclasses will override either the general or 018 * specific cases, but not both. 019 * 020 * @author Abe White 021 */ 022 public class BCVisitor { 023 /** 024 * Visit the given entity. 025 */ 026 public void visit(VisitAcceptor obj) { 027 if (obj == null) 028 return; 029 obj.acceptVisit(this); 030 } 031 032 public void enterProject(Project obj) { 033 } 034 035 public void exitProject(Project obj) { 036 } 037 038 public void enterBCClass(BCClass obj) { 039 } 040 041 public void exitBCClass(BCClass obj) { 042 } 043 044 public void enterBCMember(BCMember obj) { 045 } 046 047 public void exitBCMember(BCMember obj) { 048 } 049 050 public void enterBCField(BCField obj) { 051 } 052 053 public void exitBCField(BCField obj) { 054 } 055 056 public void enterBCMethod(BCMethod obj) { 057 } 058 059 public void exitBCMethod(BCMethod obj) { 060 } 061 062 public void enterAttribute(Attribute obj) { 063 } 064 065 public void exitAttribute(Attribute obj) { 066 } 067 068 public void enterConstantValue(ConstantValue obj) { 069 } 070 071 public void exitConstantValue(ConstantValue obj) { 072 } 073 074 public void enterDeprecated(Deprecated obj) { 075 } 076 077 public void exitDeprecated(Deprecated obj) { 078 } 079 080 public void enterExceptions(Exceptions obj) { 081 } 082 083 public void exitExceptions(Exceptions obj) { 084 } 085 086 public void enterInnerClasses(InnerClasses obj) { 087 } 088 089 public void exitInnerClasses(InnerClasses obj) { 090 } 091 092 public void enterLineNumberTable(LineNumberTable obj) { 093 } 094 095 public void exitLineNumberTable(LineNumberTable obj) { 096 } 097 098 public void enterLocalVariableTable(LocalVariableTable obj) { 099 } 100 101 public void exitLocalVariableTable(LocalVariableTable obj) { 102 } 103 104 public void enterLocalVariableTypeTable(LocalVariableTypeTable obj) { 105 } 106 107 public void exitLocalVariableTypeTable(LocalVariableTypeTable obj) { 108 } 109 110 public void enterAnnotations(Annotations obj) { 111 } 112 113 public void exitAnnotations(Annotations obj) { 114 } 115 116 public void enterAnnotation(Annotation obj) { 117 } 118 119 public void exitAnnotation(Annotation obj) { 120 } 121 122 public void enterAnnotationProperty(Annotation.Property obj) { 123 } 124 125 public void exitAnnotationProperty(Annotation.Property obj) { 126 } 127 128 public void enterSourceFile(SourceFile obj) { 129 } 130 131 public void exitSourceFile(SourceFile obj) { 132 } 133 134 public void enterSynthetic(Synthetic obj) { 135 } 136 137 public void exitSynthetic(Synthetic obj) { 138 } 139 140 public void enterUnknownAttribute(UnknownAttribute obj) { 141 } 142 143 public void exitUnknownAttribute(UnknownAttribute obj) { 144 } 145 146 public void enterCode(Code obj) { 147 } 148 149 public void exitCode(Code obj) { 150 } 151 152 public void enterExceptionHandler(ExceptionHandler obj) { 153 } 154 155 public void exitExceptionHandler(ExceptionHandler obj) { 156 } 157 158 public void enterInnerClass(InnerClass obj) { 159 } 160 161 public void exitInnerClass(InnerClass obj) { 162 } 163 164 public void enterLineNumber(LineNumber obj) { 165 } 166 167 public void exitLineNumber(LineNumber obj) { 168 } 169 170 public void enterLocalVariable(LocalVariable obj) { 171 } 172 173 public void exitLocalVariable(LocalVariable obj) { 174 } 175 176 public void enterLocalVariableType(LocalVariableType obj) { 177 } 178 179 public void exitLocalVariableType(LocalVariableType obj) { 180 } 181 182 public void enterInstruction(Instruction obj) { 183 } 184 185 public void exitInstruction(Instruction obj) { 186 } 187 188 public void enterArrayLoadInstruction(ArrayLoadInstruction obj) { 189 } 190 191 public void exitArrayLoadInstruction(ArrayLoadInstruction obj) { 192 } 193 194 public void enterArrayStoreInstruction(ArrayStoreInstruction obj) { 195 } 196 197 public void exitArrayStoreInstruction(ArrayStoreInstruction obj) { 198 } 199 200 public void enterClassInstruction(ClassInstruction obj) { 201 } 202 203 public void exitClassInstruction(ClassInstruction obj) { 204 } 205 206 public void enterConstantInstruction(ConstantInstruction obj) { 207 } 208 209 public void exitConstantInstruction(ConstantInstruction obj) { 210 } 211 212 public void enterConvertInstruction(ConvertInstruction obj) { 213 } 214 215 public void exitConvertInstruction(ConvertInstruction obj) { 216 } 217 218 public void enterGetFieldInstruction(GetFieldInstruction obj) { 219 } 220 221 public void exitGetFieldInstruction(GetFieldInstruction obj) { 222 } 223 224 public void enterIIncInstruction(IIncInstruction obj) { 225 } 226 227 public void exitIIncInstruction(IIncInstruction obj) { 228 } 229 230 public void enterJumpInstruction(JumpInstruction obj) { 231 } 232 233 public void exitJumpInstruction(JumpInstruction obj) { 234 } 235 236 public void enterIfInstruction(IfInstruction obj) { 237 } 238 239 public void exitIfInstruction(IfInstruction obj) { 240 } 241 242 public void enterLoadInstruction(LoadInstruction obj) { 243 } 244 245 public void exitLoadInstruction(LoadInstruction obj) { 246 } 247 248 public void enterLookupSwitchInstruction(LookupSwitchInstruction obj) { 249 } 250 251 public void exitLookupSwitchInstruction(LookupSwitchInstruction obj) { 252 } 253 254 public void enterMathInstruction(MathInstruction obj) { 255 } 256 257 public void exitMathInstruction(MathInstruction obj) { 258 } 259 260 public void enterMethodInstruction(MethodInstruction obj) { 261 } 262 263 public void exitMethodInstruction(MethodInstruction obj) { 264 } 265 266 public void enterMultiANewArrayInstruction(MultiANewArrayInstruction obj) { 267 } 268 269 public void exitMultiANewArrayInstruction(MultiANewArrayInstruction obj) { 270 } 271 272 public void enterNewArrayInstruction(NewArrayInstruction obj) { 273 } 274 275 public void exitNewArrayInstruction(NewArrayInstruction obj) { 276 } 277 278 public void enterPutFieldInstruction(PutFieldInstruction obj) { 279 } 280 281 public void exitPutFieldInstruction(PutFieldInstruction obj) { 282 } 283 284 public void enterRetInstruction(RetInstruction obj) { 285 } 286 287 public void exitRetInstruction(RetInstruction obj) { 288 } 289 290 public void enterReturnInstruction(ReturnInstruction obj) { 291 } 292 293 public void exitReturnInstruction(ReturnInstruction obj) { 294 } 295 296 public void enterStackInstruction(StackInstruction obj) { 297 } 298 299 public void exitStackInstruction(StackInstruction obj) { 300 } 301 302 public void enterStoreInstruction(StoreInstruction obj) { 303 } 304 305 public void exitStoreInstruction(StoreInstruction obj) { 306 } 307 308 public void enterTableSwitchInstruction(TableSwitchInstruction obj) { 309 } 310 311 public void exitTableSwitchInstruction(TableSwitchInstruction obj) { 312 } 313 314 public void enterWideInstruction(WideInstruction obj) { 315 } 316 317 public void exitWideInstruction(WideInstruction obj) { 318 } 319 320 public void enterMonitorEnterInstruction(MonitorEnterInstruction obj) { 321 } 322 323 public void exitMonitorEnterInstruction(MonitorEnterInstruction obj) { 324 } 325 326 public void enterMonitorExitInstruction(MonitorExitInstruction obj) { 327 } 328 329 public void exitMonitorExitInstruction(MonitorExitInstruction obj) { 330 } 331 332 public void enterCmpInstruction(CmpInstruction obj) { 333 } 334 335 public void exitCmpInstruction(CmpInstruction obj) { 336 } 337 338 public void enterConstantPool(ConstantPool obj) { 339 } 340 341 public void exitConstantPool(ConstantPool obj) { 342 } 343 344 public void enterEntry(Entry obj) { 345 } 346 347 public void exitEntry(Entry obj) { 348 } 349 350 public void enterClassEntry(ClassEntry obj) { 351 } 352 353 public void exitClassEntry(ClassEntry obj) { 354 } 355 356 public void enterDoubleEntry(DoubleEntry obj) { 357 } 358 359 public void exitDoubleEntry(DoubleEntry obj) { 360 } 361 362 public void enterFieldEntry(FieldEntry obj) { 363 } 364 365 public void exitFieldEntry(FieldEntry obj) { 366 } 367 368 public void enterFloatEntry(FloatEntry obj) { 369 } 370 371 public void exitFloatEntry(FloatEntry obj) { 372 } 373 374 public void enterIntEntry(IntEntry obj) { 375 } 376 377 public void exitIntEntry(IntEntry obj) { 378 } 379 380 public void enterInterfaceMethodEntry(InterfaceMethodEntry obj) { 381 } 382 383 public void exitInterfaceMethodEntry(InterfaceMethodEntry obj) { 384 } 385 386 public void enterLongEntry(LongEntry obj) { 387 } 388 389 public void exitLongEntry(LongEntry obj) { 390 } 391 392 public void enterMethodEntry(MethodEntry obj) { 393 } 394 395 public void exitMethodEntry(MethodEntry obj) { 396 } 397 398 public void enterNameAndTypeEntry(NameAndTypeEntry obj) { 399 } 400 401 public void exitNameAndTypeEntry(NameAndTypeEntry obj) { 402 } 403 404 public void enterStringEntry(StringEntry obj) { 405 } 406 407 public void exitStringEntry(StringEntry obj) { 408 } 409 410 public void enterUTF8Entry(UTF8Entry obj) { 411 } 412 413 public void exitUTF8Entry(UTF8Entry obj) { 414 } 415 }