< prev index next >

src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java

Print this page

        

*** 171,180 **** --- 171,186 ---- * @param field the field * @param override true if caller has overridden accessibility */ public FieldAccessor newFieldAccessor(Field field, boolean override) { checkInitted(); + + // use the root Field that will not cache caller class + Field f = langReflectAccess.getRoot(field); + if (f != null) { + field = f; + } return UnsafeFieldAccessorFactory.newFieldAccessor(field, override); } public MethodAccessor newMethodAccessor(Method method) { checkInitted();
*** 184,193 **** --- 190,205 ---- if (altMethod != null) { method = altMethod; } } + // use the root Method that will not cache caller class + Method m = langReflectAccess.getRoot(method); + if (m != null) { + method = m; + } + if (noInflation && !ReflectUtil.isVMAnonymousClass(method.getDeclaringClass())) { return new MethodAccessorGenerator(). generateMethod(method.getDeclaringClass(), method.getName(), method.getParameterTypes(),
*** 213,222 **** --- 225,241 ---- } if (declaringClass == Class.class) { return new InstantiationExceptionConstructorAccessorImpl ("Can not instantiate java.lang.Class"); } + + // use the root Constructor that will not cache caller class + Constructor<?> ctr = langReflectAccess.getRoot(c); + if (ctr != null) { + c = ctr; + } + // Bootstrapping issue: since we use Class.newInstance() in // the ConstructorAccessor generation process, we have to // break the cycle here. if (Reflection.isSubclassOf(declaringClass, ConstructorAccessorImpl.class)) {
< prev index next >