code: private static Method asAccessibleMethod(ReloadableType methodDeclaringTypeReloadableType, Method method,
  			Object target,
  			boolean makeAccessibleCopy) throws IllegalAccessException {
  		if (methodDeclaringTypeReloadableType != null && isDeleted(methodDeclaringTypeReloadableType, method)) {
  			throw Exceptions.noSuchMethodError(method);
  		}
  
  		if (method.isAccessible()) {
  			//More expensive check not required / copy not required
  		}
  		else {
  			Class<?> clazz = method.getDeclaringClass();
  			int mods = method.getModifiers();
  			int classmods;
  
  			//		ReloadableType rtype = getReloadableTypeIfHasBeenReloaded(clazz);
  			if (methodDeclaringTypeReloadableType == null || !methodDeclaringTypeReloadableType.hasBeenReloaded()) {
  				classmods = clazz.getModifiers();
  			}
  			else {
  				//Note: the "super bit" may be set in class modifiers but we should block it out, it
  				//shouldn't be shown to users of the reflection API.
  				classmods = methodDeclaringTypeReloadableType.getLatestTypeDescriptor().getModifiers()
  						& ~Opcodes.ACC_SUPER;
  			}
  			if (Modifier.isPublic(mods & classmods/*jlClassGetModifiers(clazz)*/)) {
  				//More expensive check not required / copy not required
  			}
  			else {
  				//More expensive check required
  				Class<?> callerClass = getCallerClass();
  				JVM.ensureMemberAccess(callerClass, clazz, target, mods);
  				if (makeAccessibleCopy) {
  					method = JVM.copyMethod(method); // copy: we must not change accessible flag on original method!
  					method.setAccessible(true);
  				}
  			}
  		}
  		return makeAccessibleCopy ? method : null;
  	}
docs: Performs access checks and returns a (potential) copy of the method with accessibility flag set if this necessary
  for the invoke to succeed.
  <p>
  Also checks for deleted methods.
  <p>
  If any checks fail, an appropriate exception is raised.