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
ClassDefiner
that defines classes usingsun.misc.Unsafe
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
UnsafeClassDefiner.ClassLoaderDefineClassHolder
private static class
UnsafeClassDefiner.DefineClassCacheHolder
-
Field Summary
Fields Modifier and Type Field Description private static boolean
ALWAYS_DEFINE_ANONYMOUSLY
private static java.lang.String
BYTE_ARRAY_TYPE
private static java.lang.String
CLASS_LOADER_TYPE
private static java.lang.String[]
DEFINEACCESS_API
private static java.lang.String
DEFINEACCESS_BY_GUICE_MARKER
private static java.util.logging.Logger
logger
private static ClassDefiner
UNSAFE_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 ClassDefiner
accessDefineClass(java.lang.Class<?> loaderClass)
Generates helper in same package as theClassLoader
so it can access defineClassprivate static byte[]
buildDefineClassAccess(java.lang.Class<?> loaderClass)
ClassLoader
helper that sits in the same package and passes on defineClass requestsstatic boolean
canDowncastToProxy(java.lang.Class<?> hostClass)
Returns true if it's possible to downcast to proxies defined from the given host.static boolean
canLoadProxyByName(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 ClassDefiner
findClassDefiner(java.lang.ClassLoader hostLoader)
Finds the appropriate class definer for the given class loader.static boolean
isAccessible()
Do we have access tosun.misc.Unsafe
?(package private) static ClassDefiner
tryAccessDefineClass(java.lang.Class<?> loaderClass)
(package private) static <T> T
tryPrivileged(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.Exception
Description copied from interface:ClassDefiner
Defines a new class relative to the host.- Specified by:
define
in 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 theClassLoader
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
-
-