Class MyClassLoader

java.lang.Object
java.lang.ClassLoader
com.fasterxml.jackson.module.afterburner.util.MyClassLoader

public class MyClassLoader extends ClassLoader
Class loader that is needed to load generated classes.
  • Field Details

    • UTF8

      private static final Charset UTF8
    • parentParallelLockMap

      private static final ConcurrentHashMap<String,Object> parentParallelLockMap
    • _cfgUseParentLoader

      protected final boolean _cfgUseParentLoader
      Flag that determines if we should first try to load new class using parent class loader or not; this may be done to try to force access to protected/package-access properties.
  • Constructor Details

    • MyClassLoader

      public MyClassLoader(ClassLoader parent, boolean tryToUseParent)
  • Method Details

    • canAddClassInPackageOf

      public static boolean canAddClassInPackageOf(Class<?> cls)
      Helper method called to check whether it is acceptable to create a new class in package that given class is part of. This is used to prevent certain class of failures, related to access limitations: for example, we can not add classes in sealed packages, or core Java packages (java.*).
      Since:
      2.2.1
    • loadAndResolve

      public Class<?> loadAndResolve(ClassName className, byte[] byteCode) throws IllegalArgumentException
      Parameters:
      className - Interface or abstract class that class to load should extend or implement
      Throws:
      IllegalArgumentException
    • loadAndResolveUsingParentClassloader

      private Class<?> loadAndResolveUsingParentClassloader(ClassName className, byte[] byteCode)
      Attempt to load (and resolve) the class using the parent class loader (if it is configured and present). This method will return null if the parent classloader is not configured or cannot be retrieved.
      Parameters:
      className - Interface or abstract class that class to load should extend or implement
      byteCode - the generated bytecode for the class to load
      Returns:
      the loaded class, or null if the class could not be loaded on the parent classloader.
    • getParentClassLoadingLock

      private Object getParentClassLoadingLock(ClassLoader parentClassLoader, String className)
      Get the class loading lock for the parent class loader for loading the named class. This is effectively the same implementation as ClassLoader#getClassLoadingLock, but using our static parentParallelLockMap and keying off of the parent ClassLoader instance as well as the class name to load.
      Parameters:
      parentClassLoader - The parent ClassLoader
      className - The name of the to-be-loaded class
    • findLoadedClassOnParent

      private Class<?> findLoadedClassOnParent(ClassLoader parentClassLoader, String className)
    • defineClassOnParent

      Class<?> defineClassOnParent(ClassLoader parentClassLoader, String className, byte[] byteCode, int offset, int length)
    • resolveClassOnParent

      private void resolveClassOnParent(ClassLoader parentClassLoader, Class<?> clazz)
    • replaceName

      public static int replaceName(byte[] byteCode, String from, String to)