# Package org.objectweb.asm.commons

Provides some useful class and method adapters.

See: Description

- Interface Summary
  Interface | Description
  --- | ---
  TableSwitchGenerator | A code generator for switch statements.

- Class Summary
  Class | Description
  --- | ---
  AdviceAdapter | A `MethodVisitor` to insert before, after and around advices in methods and constructors.
  AnalyzerAdapter | A `MethodVisitor` that keeps track of stack map frame changes between `visitFrame` calls.
  CodeSizeEvaluator | A `MethodVisitor` that can be used to approximate method size.
  GeneratorAdapter | A `MethodVisitor` with convenient methods to generate code.
  InstructionAdapter | A `MethodVisitor` providing a more detailed API to generate and transform instructions.
  JSRInlinerAdapter | A `MethodVisitor` that removes JSR instructions and inlines the referenced subroutines.
  LocalVariablesSorter | A `MethodVisitor` that renumbers local variables in their order of appearance.
  Method | A named method descriptor.
  Remapper | A class responsible for remapping types and names.
  RemappingAnnotationAdapter | An `AnnotationVisitor` adapter for type remapping.
  RemappingClassAdapter | A `ClassVisitor` for type remapping.
  RemappingFieldAdapter | A `FieldVisitor` adapter for type remapping.
  RemappingMethodAdapter | A `LocalVariablesSorter` for type mapping.
  RemappingSignatureAdapter | A `SignatureVisitor` adapter for type mapping.
  SerialVersionUIDAdder | A `ClassVisitor` that adds a serial version unique identifier to a class if missing.
  SimpleRemapper | A `Remapper` using a `Map` to define its mapping.
  StaticInitMerger | A `ClassVisitor` that merges clinit methods into a single one.
  TryCatchBlockSorter | A `MethodVisitor` adapter to sort the exception handlers.

## Package org.objectweb.asm.commons Description

Provides some useful class and method adapters. The preferred way of using these adapters is by chaining them together and to custom adapters (instead of inheriting from them). Indeed this approach provides more combination possibilities than inheritance. For instance, suppose you want to implement an adapter MyAdapter than needs sorted local variables and intermediate stack map frame values taking into account the local variables sort. By using inheritance, this would require MyAdapter to extend AnalyzerAdapter, itself extending LocalVariablesSorter. But AnalyzerAdapter is not a subclass of LocalVariablesSorter, so this is not possible. On the contrary, by using delegation, you can make LocalVariablesSorter delegate to AnalyzerAdapter, itself delegating to MyAdapter. In this case AnalyzerAdapter computes intermediate frames based on the output of LocalVariablesSorter, and MyAdapter can add new locals by calling the newLocal method on LocalVariablesSorter, and can get the stack map frame state before each instruction by reading the locals and stack fields in AnalyzerAdapter (this requires references from MyAdapter back to LocalVariablesSorter and AnalyzerAdapter).