--- a/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java Tue Mar 15 13:48:26 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java Thu Mar 17 19:04:16 2016 +0000
@@ -159,6 +159,35 @@
return res;
}
+ /**
+ * {@inheritDoc}
+ *
+ * <p> A {@code SecurityException} is also thrown if this object is a
+ * {@code Constructor} object for the class {@code Class} and {@code flag}
+ * is true. </p>
+ *
+ * @param flag {@inheritDoc}
+ */
+ @Override
+ @CallerSensitive
+ public void setAccessible(boolean flag) {
+ AccessibleObject.checkPermission();
+ if (flag) {
+ checkCanSetAccessible(Reflection.getCallerClass());
+ }
+ setAccessible0(flag);
+ }
+
+ @Override
+ void checkCanSetAccessible(Class<?> caller) {
+ checkCanSetAccessible(caller, clazz);
+ if (clazz == Class.class) {
+ // can we change this to InaccessibleObjectException?
+ throw new SecurityException("Cannot make a java.lang.Class"
+ + " constructor accessible");
+ }
+ }
+
@Override
boolean hasGenericInformation() {
return (getSignature() != null);
@@ -411,10 +440,8 @@
IllegalArgumentException, InvocationTargetException
{
if (!override) {
- if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
- Class<?> caller = Reflection.getCallerClass();
- checkAccess(caller, clazz, null, modifiers);
- }
+ Class<?> caller = Reflection.getCallerClass();
+ checkAccess(caller, clazz, null, modifiers);
}
if ((clazz.getModifiers() & Modifier.ENUM) != 0)
throw new IllegalArgumentException("Cannot reflectively create enum objects");