The master factory for all reflective objects, both those in
java.lang.reflect (Fields, Methods, Constructors) as well as their
delegates (FieldAccessors, MethodAccessors, ConstructorAccessors).
The methods in this class are extremely unsafe and can cause
subversion of both the language and the verifier. For this reason,
they are all instance methods, and access to the constructor of
this factory is guarded by a security check, in similar style to
sun.misc.Unsafe.
private static boolean initted = false;
A convenience class for acquiring the capability to instantiate
reflective objects. Use this instead of a raw call to
ReflectionFactory.getReflectionFactory() in order to avoid being limited by the
permissions of your callers.
An instance of this class can be used as the argument of
AccessController.doPrivileged.
Provides the caller with the capability to instantiate reflective
objects.
First, if there is a security manager, its
checkPermission method is called with a java.lang.RuntimePermission with target
"reflectionFactoryAccess". This may result in a
security exception.
The returned ReflectionFactory object should be
carefully guarded by the caller, since it can be used to read and
write private data and invoke private methods, as well as to load
unverified bytecodes. It must never be passed to untrusted code.
- Throws:
java.lang.SecurityException if a security manager exists and its
checkPermission method doesn't allow
access to the RuntimePermission "reflectionFactoryAccess".
Called only by java.lang.reflect.Modifier's static initializer
Note: this routine can cause the declaring class for the field
be initialized and therefore must not be called until the
first get/set of this field.
- Parameters:
field the fieldoverride true if caller has overridden aaccessibility
if (declaringClass == Class.class) { ("Can not instantiate java.lang.Class");Creates a new java.lang.reflect.Field. Access checks as per
java.lang.reflect.AccessibleObject are not overridden.
Creates a new java.lang.reflect.Method. Access checks as per
java.lang.reflect.AccessibleObject are not overridden.
Class[] checkedExceptions,
byte[] parameterAnnotations,
byte[] annotationDefault)
Creates a new java.lang.reflect.Constructor. Access checks as
per java.lang.reflect.AccessibleObject are not overridden.
Class[] checkedExceptions,
byte[] parameterAnnotations)
Gets the MethodAccessor object for a java.lang.reflect.Method
Sets the MethodAccessor object for a java.lang.reflect.Method
Gets the ConstructorAccessor object for a
java.lang.reflect.Constructor
Sets the ConstructorAccessor object for a
java.lang.reflect.Constructor
Makes a copy of the passed method. The returned method is a
"child" of the passed one; see the comments in Method.java for
details.
Makes a copy of the passed field. The returned field is a
"child" of the passed one; see the comments in Field.java for
details.
Makes a copy of the passed constructor. The returned
constructor is a "child" of the passed one; see the comments
in Constructor.java for details.
return constructorToCall;
We have to defer full initialization of this class until after
the static initializer is run since java.lang.reflect.Method's
static initializer (more properly, that for
java.lang.reflect.AccessibleObject) causes this class's to be
run, before the system properties are set up.
if (val != null && val.equals("true")) { val = System.getProperty("sun.reflect.inflationThreshold"); new RuntimeException("Unable to parse property sun.reflect.inflationThreshold").