Package com.google.inject.internal.aop
Class UnsafeClassDefiner
- java.lang.Object
-
- com.google.inject.internal.aop.UnsafeClassDefiner
-
- All Implemented Interfaces:
ClassDefiner
final class UnsafeClassDefiner extends java.lang.Object implements ClassDefiner
ClassDefinerthat defines classes usingsun.misc.Unsafe.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classUnsafeClassDefiner.ClassLoaderDefineClassHolderprivate static classUnsafeClassDefiner.DefineClassCacheHolder
-
Field Summary
Fields Modifier and Type Field Description private static booleanALWAYS_DEFINE_ANONYMOUSLYprivate static java.lang.StringBYTE_ARRAY_TYPEprivate static java.lang.StringCLASS_LOADER_TYPEprivate static java.lang.String[]DEFINEACCESS_APIprivate static java.lang.StringDEFINEACCESS_BY_GUICE_MARKERprivate static java.util.logging.Loggerloggerprivate static ClassDefinerUNSAFE_DEFINER
-
Constructor Summary
Constructors Constructor Description UnsafeClassDefiner()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) static ClassDefineraccessDefineClass(java.lang.Class<?> loaderClass)Generates helper in same package as theClassLoaderso it can access defineClassprivate static byte[]buildDefineClassAccess(java.lang.Class<?> loaderClass)ClassLoaderhelper that sits in the same package and passes on defineClass requestsstatic booleancanDowncastToProxy(java.lang.Class<?> hostClass)Returns true if it's possible to downcast to proxies defined from the given host.static booleancanLoadProxyByName(java.lang.Class<?> hostClass)Returns true if it's possible to load by name proxies defined from the given host.java.lang.Class<?>define(java.lang.Class<?> hostClass, byte[] bytecode)Defines a new class relative to the host.private static ClassDefinerfindClassDefiner(java.lang.ClassLoader hostLoader)Finds the appropriate class definer for the given class loader.static booleanisAccessible()Do we have access tosun.misc.Unsafe?(package private) static ClassDefinertryAccessDefineClass(java.lang.Class<?> loaderClass)(package private) static <T> TtryPrivileged(java.security.PrivilegedExceptionAction<T> action, java.lang.String errorMessage)
-
-
-
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
-
-
Method Detail
-
isAccessible
public static boolean isAccessible()
Do we have access tosun.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.ExceptionDescription copied from interface:ClassDefinerDefines a new class relative to the host.- Specified by:
definein interfaceClassDefiner- 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 theClassLoaderso it can access defineClass- Throws:
java.lang.Exception
-
buildDefineClassAccess
private static byte[] buildDefineClassAccess(java.lang.Class<?> loaderClass)
ClassLoaderhelper that sits in the same package and passes on defineClass requests
-
-