1 /*
2 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.lang.reflect;
27
28 import jdk.internal.reflect.MethodAccessor;
29 import jdk.internal.reflect.ConstructorAccessor;
30
31 /** Package-private class implementing the
32 sun.reflect.LangReflectAccess interface, allowing the java.lang
33 package to instantiate objects in this package. */
34
35 class ReflectAccess implements jdk.internal.reflect.LangReflectAccess {
36 public Field newField(Class<?> declaringClass,
37 String name,
38 Class<?> type,
39 int modifiers,
40 int slot,
41 String signature,
42 byte[] annotations)
43 {
44 return new Field(declaringClass,
45 name,
46 type,
47 modifiers,
48 slot,
49 signature,
50 annotations);
51 }
52
53 public Method newMethod(Class<?> declaringClass,
54 String name,
55 Class<?>[] parameterTypes,
56 Class<?> returnType,
57 Class<?>[] checkedExceptions,
58 int modifiers,
59 int slot,
60 String signature,
61 byte[] annotations,
62 byte[] parameterAnnotations,
63 byte[] annotationDefault)
64 {
65 return new Method(declaringClass,
66 name,
67 parameterTypes,
68 returnType,
69 checkedExceptions,
70 modifiers,
71 slot,
72 signature,
73 annotations,
74 parameterAnnotations,
75 annotationDefault);
76 }
77
78 public <T> Constructor<T> newConstructor(Class<T> declaringClass,
79 Class<?>[] parameterTypes,
80 Class<?>[] checkedExceptions,
81 int modifiers,
82 int slot,
83 String signature,
84 byte[] annotations,
85 byte[] parameterAnnotations)
86 {
87 return new Constructor<>(declaringClass,
88 parameterTypes,
89 checkedExceptions,
90 modifiers,
91 slot,
92 signature,
93 annotations,
94 parameterAnnotations);
95 }
96
97 public MethodAccessor getMethodAccessor(Method m) {
98 return m.getMethodAccessor();
99 }
100
101 public void setMethodAccessor(Method m, MethodAccessor accessor) {
102 m.setMethodAccessor(accessor);
103 }
104
105 public ConstructorAccessor getConstructorAccessor(Constructor<?> c) {
106 return c.getConstructorAccessor();
107 }
108
109 public void setConstructorAccessor(Constructor<?> c,
110 ConstructorAccessor accessor)
111 {
112 c.setConstructorAccessor(accessor);
113 }
114
115 public int getConstructorSlot(Constructor<?> c) {
116 return c.getSlot();
117 }
118
119 public String getConstructorSignature(Constructor<?> c) {
120 return c.getSignature();
121 }
122
123 public byte[] getConstructorAnnotations(Constructor<?> c) {
124 return c.getRawAnnotations();
125 }
126
127 public byte[] getConstructorParameterAnnotations(Constructor<?> c) {
128 return c.getRawParameterAnnotations();
129 }
130
131 public byte[] getExecutableTypeAnnotationBytes(Executable ex) {
132 return ex.getTypeAnnotationBytes();
133 }
134
135 public Class<?>[] getExecutableSharedParameterTypes(Executable ex) {
136 return ex.getSharedParameterTypes();
137 }
138
139 //
140 // Copying routines, needed to quickly fabricate new Field,
141 // Method, and Constructor objects from templates
142 //
143 public Method copyMethod(Method arg) {
144 return arg.copy();
145 }
146 public Method leafCopyMethod(Method arg) {
147 return arg.leafCopy();
148 }
149
150 public Field copyField(Field arg) {
151 return arg.copy();
152 }
153
154 public <T> Constructor<T> copyConstructor(Constructor<T> arg) {
155 return arg.copy();
156 }
157
158 @SuppressWarnings("unchecked")
159 public <T extends AccessibleObject> T getRoot(T obj) {
160 return (T) obj.getRoot();
161 }
162 }
163