/** * Returns array of all methods that are accessible from given class. * @see #getAccessibleMethods(Class, Class) */ public static Method[] getAccessibleMethods(final Class clazz) { return getAccessibleMethods(clazz, Object.class); }
/** * Inspects types methods and return map of {@link MethodDescriptor method descriptors}. */ protected HashMap<String, MethodDescriptor[]> inspectMethods() { boolean scanAccessible = classDescriptor.isScanAccessible(); Class type = classDescriptor.getType(); Method[] methods = scanAccessible ? ClassUtil.getAccessibleMethods(type) : ClassUtil.getSupportedMethods(type); HashMap<String, MethodDescriptor[]> map = new HashMap<>(methods.length); for (Method method : methods) { String methodName = method.getName(); MethodDescriptor[] mds = map.get(methodName); if (mds == null) { mds = new MethodDescriptor[1]; } else { mds = ArraysUtil.resize(mds, mds.length + 1); } map.put(methodName, mds); mds[mds.length - 1] = createMethodDescriptor(method); } return map; }
Method[] methods = scanAccessible ? ClassUtil.getAccessibleMethods(type) : ClassUtil.getSupportedMethods(type);
@Test void testAccessibleA() { Method[] ms = ClassUtil.getAccessibleMethods(A.class, null); assertEquals(4 + 11, ms.length); // there are 11 accessible Object methods (9 public + 2 protected) ms = ClassUtil.getAccessibleMethods(A.class); assertEquals(4, ms.length); ms = A.class.getMethods(); assertEquals(1 + 9, ms.length); // there are 9 public Object methods ms = A.class.getDeclaredMethods(); assertEquals(4, ms.length); ms = ClassUtil.getSupportedMethods(A.class, null); assertEquals(4 + 12, ms.length); // there are 12 total Object methods (9 public + 2 protected + 1 private) ms = ClassUtil.getSupportedMethods(A.class); assertEquals(4, ms.length); Field[] fs = ClassUtil.getAccessibleFields(A.class); assertEquals(4, fs.length); fs = A.class.getFields(); assertEquals(1, fs.length); fs = A.class.getDeclaredFields(); assertEquals(4, fs.length); fs = ClassUtil.getSupportedFields(A.class); assertEquals(4, fs.length); }
@Test void testAccessibleB() { Method[] ms = ClassUtil.getAccessibleMethods(B.class, null); assertEquals(3 + 11, ms.length); ms = ClassUtil.getAccessibleMethods(B.class); assertEquals(3, ms.length); ms = B.class.getMethods(); assertEquals(1 + 9, ms.length); ms = B.class.getDeclaredMethods(); assertEquals(0, ms.length); ms = ClassUtil.getSupportedMethods(B.class, null); assertEquals(4 + 12, ms.length); ms = ClassUtil.getSupportedMethods(B.class); assertEquals(4, ms.length); Field[] fs = ClassUtil.getAccessibleFields(B.class); assertEquals(3, fs.length); fs = B.class.getFields(); assertEquals(1, fs.length); fs = B.class.getDeclaredFields(); assertEquals(0, fs.length); fs = ClassUtil.getSupportedFields(B.class); assertEquals(4, fs.length); }
@Test void testAccessibleC() { Method[] ms = ClassUtil.getAccessibleMethods(C.class, null); assertEquals(5 + 11, ms.length); ms = ClassUtil.getAccessibleMethods(C.class); assertEquals(5, ms.length); ms = C.class.getMethods(); assertEquals(2 + 9, ms.length); ms = C.class.getDeclaredMethods(); assertEquals(5, ms.length); ms = ClassUtil.getSupportedMethods(C.class, null); assertEquals(5 + 12, ms.length); ms = ClassUtil.getSupportedMethods(C.class); assertEquals(5, ms.length); Field[] fs = ClassUtil.getAccessibleFields(C.class); assertEquals(5, fs.length); fs = C.class.getFields(); assertEquals(3, fs.length); fs = C.class.getDeclaredFields(); assertEquals(5, fs.length); fs = ClassUtil.getSupportedFields(C.class); assertEquals(5, fs.length); }
@Test void testAccessibleD() { Method[] ms = ClassUtil.getAccessibleMethods(D.class, null); assertEquals(3 + 11, ms.length); ms = ClassUtil.getAccessibleMethods(D.class); assertEquals(3, ms.length); ms = D.class.getMethods(); assertEquals(2 + 9, ms.length); ms = D.class.getDeclaredMethods(); assertEquals(0, ms.length); ms = ClassUtil.getSupportedMethods(D.class, null); assertEquals(5 + 12, ms.length); ms = ClassUtil.getSupportedMethods(D.class); assertEquals(5, ms.length); Field[] fs = ClassUtil.getAccessibleFields(D.class); assertEquals(3, fs.length); fs = D.class.getFields(); assertEquals(3, fs.length); fs = D.class.getDeclaredFields(); assertEquals(0, fs.length); fs = ClassUtil.getSupportedFields(D.class); assertEquals(5, fs.length); }
@Test void testAccessibleE() { Method[] ms = ClassUtil.getAccessibleMethods(E.class, null); assertEquals(5 + 11, ms.length); ms = ClassUtil.getAccessibleMethods(E.class); assertEquals(5, ms.length); ms = E.class.getMethods(); assertEquals(2 + 9, ms.length); ms = E.class.getDeclaredMethods(); assertEquals(4, ms.length); ms = ClassUtil.getSupportedMethods(E.class, null); assertEquals(5 + 12, ms.length); ms = ClassUtil.getSupportedMethods(E.class); assertEquals(5, ms.length); Field[] fs = ClassUtil.getAccessibleFields(E.class); assertEquals(5, fs.length); fs = E.class.getFields(); assertEquals(4, fs.length); fs = E.class.getDeclaredFields(); assertEquals(4, fs.length); fs = ClassUtil.getSupportedFields(E.class); assertEquals(5, fs.length); }
/** * Returns array of all methods that are accessible from given class. * @see #getAccessibleMethods(Class, Class) */ public static Method[] getAccessibleMethods(final Class clazz) { return getAccessibleMethods(clazz, Object.class); }
/** * Inspects types methods and return map of {@link MethodDescriptor method descriptors}. */ protected HashMap<String, MethodDescriptor[]> inspectMethods() { boolean scanAccessible = classDescriptor.isScanAccessible(); Class type = classDescriptor.getType(); Method[] methods = scanAccessible ? ClassUtil.getAccessibleMethods(type) : ClassUtil.getSupportedMethods(type); HashMap<String, MethodDescriptor[]> map = new HashMap<>(methods.length); for (Method method : methods) { String methodName = method.getName(); MethodDescriptor[] mds = map.get(methodName); if (mds == null) { mds = new MethodDescriptor[1]; } else { mds = ArraysUtil.resize(mds, mds.length + 1); } map.put(methodName, mds); mds[mds.length - 1] = createMethodDescriptor(method); } return map; }
Method[] methods = scanAccessible ? ClassUtil.getAccessibleMethods(type) : ClassUtil.getSupportedMethods(type);