Class DynamicType.AbstractBase

java.lang.Object
net.bytebuddy.dynamic.DynamicType.AbstractBase
All Implemented Interfaces:
Closeable, AutoCloseable, ClassFileLocator, DynamicType
Direct Known Subclasses:
AgentBuilder.Transformer.ForAdvice.LazyDynamicType, DynamicType.Default
Enclosing interface:
DynamicType

@Enhance public abstract static class DynamicType.AbstractBase extends Object implements DynamicType
  • Field Details

    • CLASS_FILE_EXTENSION

      private static final String CLASS_FILE_EXTENSION
      The file name extension for Java class files.
      See Also:
    • MANIFEST_VERSION

      private static final String MANIFEST_VERSION
      The default version of a jar file manifest.
      See Also:
    • TEMP_SUFFIX

      private static final String TEMP_SUFFIX
      A suffix for temporary files.
      See Also:
  • Constructor Details

    • AbstractBase

      public AbstractBase()
  • Method Details

    • locate

      public ClassFileLocator.Resolution locate(String name) throws IOException
      Locates the class file for a given type and returns the binary data of the class file.
      Specified by:
      locate in interface ClassFileLocator
      Parameters:
      name - The name of the type to locate a class file representation for.
      Returns:
      Any binary representation of the type which might be illegal.
      Throws:
      IOException - If reading a class file causes an error.
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface DynamicType
    • getAuxiliaryTypeDescriptions

      public Set<TypeDescription> getAuxiliaryTypeDescriptions()
      Returns a set of all auxiliary types that are represented by this dynamic type.
      Specified by:
      getAuxiliaryTypeDescriptions in interface DynamicType
      Returns:
      A set of all auxiliary types.
    • getAllTypeDescriptions

      public Set<TypeDescription> getAllTypeDescriptions()
      Returns a set of all types that are represented by this dynamic type.
      Specified by:
      getAllTypeDescriptions in interface DynamicType
      Returns:
      A set of all represented types.
    • getAllTypes

      public Map<TypeDescription,byte[]> getAllTypes()
      Returns all types that are implied by this dynamic type.
      Specified by:
      getAllTypes in interface DynamicType
      Returns:
      A mapping from all type descriptions, the actual type and its auxiliary types to their binary representation
    • getLoadedTypeInitializers

      public Map<TypeDescription,LoadedTypeInitializer> getLoadedTypeInitializers()

      Returns a map of all loaded type initializers for the main type and all auxiliary types, if any.

      Note: The type descriptions will most likely differ from the binary representation of this type. Normally, annotations and intercepted methods are not added to the type descriptions of auxiliary types.

      Specified by:
      getLoadedTypeInitializers in interface DynamicType
      Returns:
      A mapping of all types' descriptions to their loaded type initializers.
    • hasAliveLoadedTypeInitializers

      public boolean hasAliveLoadedTypeInitializers()
      Checks if a dynamic type requires some form of explicit type initialization, either for itself or for one of its auxiliary types, if any. This is the case when this dynamic type was defined to delegate method calls to a specific instance which is stored in a field of the created type. If this class serialized, it could not be used without its loaded type initializers since the field value represents a specific runtime context.
      Specified by:
      hasAliveLoadedTypeInitializers in interface DynamicType
      Returns:
      true if this type requires explicit type initialization.
    • getAuxiliaryTypes

      public Map<TypeDescription,byte[]> getAuxiliaryTypes()

      Returns a map of all auxiliary types that are required for making use of the main type.

      Note: The type descriptions will most likely differ from the binary representation of this type. Normally, annotations and intercepted methods are not added to the type descriptions of auxiliary types.

      Specified by:
      getAuxiliaryTypes in interface DynamicType
      Returns:
      A map of all auxiliary types by their descriptions to their binary representation.
    • saveIn

      public Map<TypeDescription,File> saveIn(File folder) throws IOException

      Saves a dynamic type in a given folder using the Java class file format while respecting the naming conventions for saving compiled Java classes. All auxiliary types, if any, are saved in the same directory. The resulting folder structure will resemble the structure that is required for Java run times, i.e. each folder representing a segment of the package name. If the specified folder does not yet exist, it is created during the call of this method.

      Note: The type descriptions will most likely differ from the binary representation of this type. Normally, annotations and intercepted methods are not added to the type descriptions of auxiliary types.

      Specified by:
      saveIn in interface DynamicType
      Parameters:
      folder - The base target folder for storing this dynamic type and its auxiliary types, if any.
      Returns:
      A map of type descriptions pointing to files with their stored binary representations within folder.
      Throws:
      IOException - Thrown if the underlying file operations cause an IOException.
    • inject

      public File inject(File sourceJar, File targetJar) throws IOException
      Injects the types of this dynamic type into a given jar file. Any pre-existent type with the same name is overridden during injection. The resulting jar is going to be a recreation of the original jar and not a patched version with a new central directory. No directory entries are added to the generated jar.
      Specified by:
      inject in interface DynamicType
      Parameters:
      sourceJar - The original jar file.
      targetJar - The source jar file with the injected contents.
      Returns:
      The target jar file.
      Throws:
      IOException - If an I/O exception occurs while injecting from the source into the target.
    • inject

      public File inject(File jar) throws IOException
      Injects the types of this dynamic type into a given jar file. Any pre-existent type with the same name is overridden during injection. The resulting jar is going to be a recreation of the original jar and not a patched version with a new central directory. No directory entries are added to the generated jar.
      Specified by:
      inject in interface DynamicType
      Parameters:
      jar - The jar file to replace with an injected version.
      Returns:
      The jar file.
      Throws:
      IOException - If an I/O exception occurs while injecting into the jar.
    • doInject

      private File doInject(File sourceJar, File targetJar) throws IOException
      Injects this dynamic type into a source jar and writes the result to the target jar.
      Parameters:
      sourceJar - The source jar.
      targetJar - The target jar.
      Returns:
      The jar file that was written to.
      Throws:
      IOException - If an I/O error occurs.
    • toJar

      public File toJar(File file) throws IOException
      Saves the contents of this dynamic type inside a jar file. The folder of the given file must exist prior to calling this method. The jar file is created with a simple manifest that only contains a version number. No directory entries are added to the generated jar.
      Specified by:
      toJar in interface DynamicType
      Parameters:
      file - The target file to which the jar is written to.
      Returns:
      The given file.
      Throws:
      IOException - If an I/O exception occurs while writing the file.
    • toJar

      public File toJar(File file, Manifest manifest) throws IOException
      Saves the contents of this dynamic type inside a jar file. The folder of the given file must exist prior to calling this method. No directory entries are added to the generated jar.
      Specified by:
      toJar in interface DynamicType
      Parameters:
      file - The target file to which the jar is written to.
      manifest - The manifest of the created jar.
      Returns:
      The given file.
      Throws:
      IOException - If an I/O exception occurs while writing the file.