Class Implementation.Context.Default

All Implemented Interfaces:
Implementation.Context, Implementation.Context.ExtractableView, MethodAccessorFactory
Enclosing interface:
Implementation.Context

public static class Implementation.Context.Default extends Implementation.Context.ExtractableView.AbstractBase
A default implementation of an Implementation.Context.ExtractableView which serves as its own MethodAccessorFactory.
  • Field Details

  • Constructor Details

    • Default

      protected Default(TypeDescription instrumentedType, ClassFileVersion classFileVersion, AuxiliaryType.NamingStrategy auxiliaryTypeNamingStrategy, TypeInitializer typeInitializer, ClassFileVersion auxiliaryClassFileVersion, Implementation.Context.FrameGeneration frameGeneration, String suffix)
      Creates a new default implementation context.
      Parameters:
      instrumentedType - The description of the type that is currently subject of creation.
      classFileVersion - The class file version of the created class.
      auxiliaryTypeNamingStrategy - The naming strategy for naming an auxiliary type.
      typeInitializer - The type initializer of the created instrumented type.
      auxiliaryClassFileVersion - The class file version to use for auxiliary classes.
      frameGeneration - Determines the frame generation to be applied.
      suffix - The suffix to append to the names of accessor methods.
  • Method Details

    • isEnabled

      public boolean isEnabled()
      Returns true if this implementation context permits the registration of any implicit type initializers.
      Returns:
      true if this implementation context permits the registration of any implicit type initializers.
    • registerAccessorFor

      public MethodDescription.InDefinedShape registerAccessorFor(Implementation.SpecialMethodInvocation specialMethodInvocation, MethodAccessorFactory.AccessType accessType)
      Registers an accessor method for a Implementation.SpecialMethodInvocation which cannot itself be triggered invoked directly from outside a type. The method is registered on the instrumented type with package-private visibility, similarly to a Java compiler's accessor methods.
      Parameters:
      specialMethodInvocation - The special method invocation.
      accessType - The required access type.
      Returns:
      The accessor method for invoking the special method invocation.
    • registerGetterFor

      public MethodDescription.InDefinedShape registerGetterFor(FieldDescription fieldDescription, MethodAccessorFactory.AccessType accessType)
      Registers a getter for the given FieldDescription which might itself not be accessible from outside the class. The returned getter method defines the field type as its return type, does not take any arguments and is of package-private visibility, similarly to the Java compiler's accessor methods. If the field is static, this accessor method is also static.
      Parameters:
      fieldDescription - The field which is to be accessed.
      accessType - The required access type.
      Returns:
      A getter method for the given field.
    • registerSetterFor

      public MethodDescription.InDefinedShape registerSetterFor(FieldDescription fieldDescription, MethodAccessorFactory.AccessType accessType)
      Registers a setter for the given FieldDescription which might itself not be accessible from outside the class. The returned setter method defines the field type as its only argument type, returns void and is of package-private visibility, similarly to the Java compiler's accessor methods. If the field is static, this accessor method is also static.
      Parameters:
      fieldDescription - The field which is to be accessed.
      accessType - The required access type.
      Returns:
      A setter method for the given field.
    • register

      public TypeDescription register(AuxiliaryType auxiliaryType)
      Registers an auxiliary type as required for the current implementation. Registering a type will cause the creation of this type even if this type is not effectively used for the current implementation.
      Parameters:
      auxiliaryType - The auxiliary type that is required for the current implementation.
      Returns:
      A description of the registered auxiliary type.
    • getAuxiliaryTypes

      public List<DynamicType> getAuxiliaryTypes()
      Returns any AuxiliaryType that was registered with this Implementation.Context.
      Returns:
      A list of all manifested registered auxiliary types.
    • cache

      public FieldDescription.InDefinedShape cache(StackManipulation fieldValue, TypeDescription fieldType)
      Caches a single value by storing it in form of a private, final and static field. By caching values, expensive instance creations can be avoided and object identity can be preserved. The field is initiated in a generated class's static initializer.
      Parameters:
      fieldValue - A stack manipulation for creating the value that is to be cached in a static field. After executing the stack manipulation, exactly one value must be put onto the operand stack which is assignable to the given fieldType.
      fieldType - The type of the field for storing the cached value. This field's type determines the value that is put onto the operand stack by this method's returned stack manipulation.
      Returns:
      A description of a field that was defined on the instrumented type which contains the given value.
    • drain

      public void drain(TypeInitializer.Drain drain, org.objectweb.asm.ClassVisitor classVisitor, AnnotationValueFilter.Factory annotationValueFilterFactory)
      Writes any information that was registered with an Implementation.Context to the provided class visitor. This contains any fields for value caching, any accessor method and it writes the type initializer. The type initializer must therefore never be written manually.
      Parameters:
      drain - The drain to write the type initializer to.
      classVisitor - The class visitor to which the extractable view is to be written.
      annotationValueFilterFactory - The annotation value filter factory to apply when writing annotation.