1.1 --- a/emul/mini/src/main/java/java/lang/reflect/AccessibleObject.java Fri Mar 22 16:59:47 2013 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,167 +0,0 @@
1.4 -/*
1.5 - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
1.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1.7 - *
1.8 - * This code is free software; you can redistribute it and/or modify it
1.9 - * under the terms of the GNU General Public License version 2 only, as
1.10 - * published by the Free Software Foundation. Oracle designates this
1.11 - * particular file as subject to the "Classpath" exception as provided
1.12 - * by Oracle in the LICENSE file that accompanied this code.
1.13 - *
1.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
1.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1.16 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1.17 - * version 2 for more details (a copy is included in the LICENSE file that
1.18 - * accompanied this code).
1.19 - *
1.20 - * You should have received a copy of the GNU General Public License version
1.21 - * 2 along with this work; if not, write to the Free Software Foundation,
1.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1.23 - *
1.24 - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1.25 - * or visit www.oracle.com if you need additional information or have any
1.26 - * questions.
1.27 - */
1.28 -
1.29 -package java.lang.reflect;
1.30 -
1.31 -import java.lang.annotation.Annotation;
1.32 -
1.33 -/**
1.34 - * The AccessibleObject class is the base class for Field, Method and
1.35 - * Constructor objects. It provides the ability to flag a reflected
1.36 - * object as suppressing default Java language access control checks
1.37 - * when it is used. The access checks--for public, default (package)
1.38 - * access, protected, and private members--are performed when Fields,
1.39 - * Methods or Constructors are used to set or get fields, to invoke
1.40 - * methods, or to create and initialize new instances of classes,
1.41 - * respectively.
1.42 - *
1.43 - * <p>Setting the {@code accessible} flag in a reflected object
1.44 - * permits sophisticated applications with sufficient privilege, such
1.45 - * as Java Object Serialization or other persistence mechanisms, to
1.46 - * manipulate objects in a manner that would normally be prohibited.
1.47 - *
1.48 - * <p>By default, a reflected object is <em>not</em> accessible.
1.49 - *
1.50 - * @see Field
1.51 - * @see Method
1.52 - * @see Constructor
1.53 - * @see ReflectPermission
1.54 - *
1.55 - * @since 1.2
1.56 - */
1.57 -public class AccessibleObject implements AnnotatedElement {
1.58 -
1.59 - /**
1.60 - * Convenience method to set the {@code accessible} flag for an
1.61 - * array of objects with a single security check (for efficiency).
1.62 - *
1.63 - * <p>First, if there is a security manager, its
1.64 - * {@code checkPermission} method is called with a
1.65 - * {@code ReflectPermission("suppressAccessChecks")} permission.
1.66 - *
1.67 - * <p>A {@code SecurityException} is raised if {@code flag} is
1.68 - * {@code true} but accessibility of any of the elements of the input
1.69 - * {@code array} may not be changed (for example, if the element
1.70 - * object is a {@link Constructor} object for the class {@link
1.71 - * java.lang.Class}). In the event of such a SecurityException, the
1.72 - * accessibility of objects is set to {@code flag} for array elements
1.73 - * upto (and excluding) the element for which the exception occurred; the
1.74 - * accessibility of elements beyond (and including) the element for which
1.75 - * the exception occurred is unchanged.
1.76 - *
1.77 - * @param array the array of AccessibleObjects
1.78 - * @param flag the new value for the {@code accessible} flag
1.79 - * in each object
1.80 - * @throws SecurityException if the request is denied.
1.81 - * @see SecurityManager#checkPermission
1.82 - * @see java.lang.RuntimePermission
1.83 - */
1.84 - public static void setAccessible(AccessibleObject[] array, boolean flag)
1.85 - throws SecurityException {
1.86 - throw new SecurityException();
1.87 - }
1.88 -
1.89 - /**
1.90 - * Set the {@code accessible} flag for this object to
1.91 - * the indicated boolean value. A value of {@code true} indicates that
1.92 - * the reflected object should suppress Java language access
1.93 - * checking when it is used. A value of {@code false} indicates
1.94 - * that the reflected object should enforce Java language access checks.
1.95 - *
1.96 - * <p>First, if there is a security manager, its
1.97 - * {@code checkPermission} method is called with a
1.98 - * {@code ReflectPermission("suppressAccessChecks")} permission.
1.99 - *
1.100 - * <p>A {@code SecurityException} is raised if {@code flag} is
1.101 - * {@code true} but accessibility of this object may not be changed
1.102 - * (for example, if this element object is a {@link Constructor} object for
1.103 - * the class {@link java.lang.Class}).
1.104 - *
1.105 - * <p>A {@code SecurityException} is raised if this object is a {@link
1.106 - * java.lang.reflect.Constructor} object for the class
1.107 - * {@code java.lang.Class}, and {@code flag} is true.
1.108 - *
1.109 - * @param flag the new value for the {@code accessible} flag
1.110 - * @throws SecurityException if the request is denied.
1.111 - * @see SecurityManager#checkPermission
1.112 - * @see java.lang.RuntimePermission
1.113 - */
1.114 - public void setAccessible(boolean flag) throws SecurityException {
1.115 - throw new SecurityException();
1.116 - }
1.117 -
1.118 - /**
1.119 - * Get the value of the {@code accessible} flag for this object.
1.120 - *
1.121 - * @return the value of the object's {@code accessible} flag
1.122 - */
1.123 - public boolean isAccessible() {
1.124 - return override;
1.125 - }
1.126 -
1.127 - /**
1.128 - * Constructor: only used by the Java Virtual Machine.
1.129 - */
1.130 - protected AccessibleObject() {}
1.131 -
1.132 - // Indicates whether language-level access checks are overridden
1.133 - // by this object. Initializes to "false". This field is used by
1.134 - // Field, Method, and Constructor.
1.135 - //
1.136 - // NOTE: for security purposes, this field must not be visible
1.137 - // outside this package.
1.138 - boolean override;
1.139 -
1.140 - /**
1.141 - * @throws NullPointerException {@inheritDoc}
1.142 - * @since 1.5
1.143 - */
1.144 - public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
1.145 - throw new AssertionError("All subclasses should override this method");
1.146 - }
1.147 -
1.148 - /**
1.149 - * @throws NullPointerException {@inheritDoc}
1.150 - * @since 1.5
1.151 - */
1.152 - public boolean isAnnotationPresent(
1.153 - Class<? extends Annotation> annotationClass) {
1.154 - return getAnnotation(annotationClass) != null;
1.155 - }
1.156 -
1.157 - /**
1.158 - * @since 1.5
1.159 - */
1.160 - public Annotation[] getAnnotations() {
1.161 - return getDeclaredAnnotations();
1.162 - }
1.163 -
1.164 - /**
1.165 - * @since 1.5
1.166 - */
1.167 - public Annotation[] getDeclaredAnnotations() {
1.168 - throw new AssertionError("All subclasses should override this method");
1.169 - }
1.170 -}