1 /* 2 * Copyright (c) 2001, 2023, 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 jdk.internal.access.JavaLangReflectAccess interface, allowing the java.lang 33 package to instantiate objects in this package. */ 34 35 class ReflectAccess implements jdk.internal.access.JavaLangReflectAccess { 36 public <T> Constructor<T> newConstructor(Class<T> declaringClass, 37 Class<?>[] parameterTypes, 38 Class<?>[] checkedExceptions, 39 int modifiers, 40 int slot, 41 String signature, 42 byte[] annotations, 43 byte[] parameterAnnotations) 44 { 45 return new Constructor<>(declaringClass, 46 parameterTypes, 47 checkedExceptions, 48 modifiers, 49 slot, 50 signature, 51 annotations, 52 parameterAnnotations); 53 } 54 55 public MethodAccessor getMethodAccessor(Method m) { 56 return m.getMethodAccessor(); 57 } 58 59 public void setMethodAccessor(Method m, MethodAccessor accessor) { 60 m.setMethodAccessor(accessor); 61 } 62 63 public ConstructorAccessor getConstructorAccessor(Constructor<?> c) { 64 return c.getConstructorAccessor(); 65 } 66 67 public void setConstructorAccessor(Constructor<?> c, 68 ConstructorAccessor accessor) 69 { 70 c.setConstructorAccessor(accessor); 71 } 72 73 public int getConstructorSlot(Constructor<?> c) { 74 return c.getSlot(); 75 } 76 77 public String getConstructorSignature(Constructor<?> c) { 78 return c.getSignature(); 79 } 80 81 public byte[] getConstructorAnnotations(Constructor<?> c) { 82 return c.getRawAnnotations(); 83 } 84 85 public byte[] getConstructorParameterAnnotations(Constructor<?> c) { 86 return c.getRawParameterAnnotations(); 87 } 88 89 public byte[] getExecutableTypeAnnotationBytes(Executable ex) { 90 return ex.getTypeAnnotationBytes(); 91 } 92 93 public Class<?>[] getExecutableSharedParameterTypes(Executable ex) { 94 return ex.getSharedParameterTypes(); 95 } 96 97 public Class<?>[] getExecutableSharedExceptionTypes(Executable ex) { 98 return ex.getSharedExceptionTypes(); 99 } 100 101 // 102 // Copying routines, needed to quickly fabricate new Field, 103 // Method, and Constructor objects from templates 104 // 105 public Method copyMethod(Method arg) { 106 return arg.copy(); 107 } 108 public Method leafCopyMethod(Method arg) { 109 return arg.leafCopy(); 110 } 111 112 public Field copyField(Field arg) { 113 return arg.copy(); 114 } 115 116 public <T> Constructor<T> copyConstructor(Constructor<T> arg) { 117 return arg.copy(); 118 } 119 120 @SuppressWarnings("unchecked") 121 public <T extends AccessibleObject> T getRoot(T obj) { 122 return (T) obj.getRoot(); 123 } 124 125 public boolean isTrustedFinalField(Field f) { 126 return f.isTrustedFinal(); 127 } 128 129 public <T> T newInstance(Constructor<T> ctor, Object[] args, Class<?> caller) 130 throws IllegalAccessException, InstantiationException, InvocationTargetException 131 { 132 return ctor.newInstanceWithCaller(args, true, caller); 133 } 134 }