Class UnsafeClassDefiner

    • Field Detail

      • logger

        private static final java.util.logging.Logger logger
      • UNSAFE_DEFINER

        private static final ClassDefiner UNSAFE_DEFINER
      • ALWAYS_DEFINE_ANONYMOUSLY

        private static final boolean ALWAYS_DEFINE_ANONYMOUSLY
      • DEFINEACCESS_BY_GUICE_MARKER

        private static final java.lang.String DEFINEACCESS_BY_GUICE_MARKER
        See Also:
        Constant Field Values
      • DEFINEACCESS_API

        private static final java.lang.String[] DEFINEACCESS_API
      • CLASS_LOADER_TYPE

        private static final java.lang.String CLASS_LOADER_TYPE
      • BYTE_ARRAY_TYPE

        private static final java.lang.String BYTE_ARRAY_TYPE
    • Constructor Detail

      • UnsafeClassDefiner

        UnsafeClassDefiner()
    • Method Detail

      • isAccessible

        public static boolean isAccessible()
        Do we have access to sun.misc.Unsafe?
      • canLoadProxyByName

        public static boolean canLoadProxyByName​(java.lang.Class<?> hostClass)
        Returns true if it's possible to load by name proxies defined from the given host.
      • canDowncastToProxy

        public static boolean canDowncastToProxy​(java.lang.Class<?> hostClass)
        Returns true if it's possible to downcast to proxies defined from the given host.
      • define

        public java.lang.Class<?> define​(java.lang.Class<?> hostClass,
                                         byte[] bytecode)
                                  throws java.lang.Exception
        Description copied from interface: ClassDefiner
        Defines a new class relative to the host.
        Specified by:
        define in interface ClassDefiner
        Throws:
        java.lang.Exception
      • findClassDefiner

        private static ClassDefiner findClassDefiner​(java.lang.ClassLoader hostLoader)
        Finds the appropriate class definer for the given class loader.
      • tryPrivileged

        static <T> T tryPrivileged​(java.security.PrivilegedExceptionAction<T> action,
                                   java.lang.String errorMessage)
      • tryAccessDefineClass

        static ClassDefiner tryAccessDefineClass​(java.lang.Class<?> loaderClass)
      • accessDefineClass

        static ClassDefiner accessDefineClass​(java.lang.Class<?> loaderClass)
                                       throws java.lang.Exception
        Generates helper in same package as the ClassLoader so it can access defineClass
        Throws:
        java.lang.Exception
      • buildDefineClassAccess

        private static byte[] buildDefineClassAccess​(java.lang.Class<?> loaderClass)
        ClassLoader helper that sits in the same package and passes on defineClass requests