/** * Checks if the method methodToFind is the overridden method from the superclass or superinterface. * * @param methodToFind is method to check * @param cls is method class * @return true if the method is overridden method */ public static boolean isOverriddenMethod(Method methodToFind, Class<?> cls) { Set<Class<?>> superClasses = new HashSet<>(); for (Class c : cls.getInterfaces()) { superClasses.add(c); } if (cls.getSuperclass() != null) { superClasses.add(cls.getSuperclass()); } for (Class<?> superClass : superClasses) { if (superClass != null && !(superClass.equals(Object.class))) { for (Method method : superClass.getMethods()) { if (method.getName().equals(methodToFind.getName()) && method.getReturnType().isAssignableFrom(methodToFind.getReturnType()) && Arrays.equals(method.getParameterTypes(), methodToFind.getParameterTypes()) && !Arrays.equals(method.getGenericParameterTypes(), methodToFind.getGenericParameterTypes())) { return true; } } if (isOverriddenMethod(methodToFind, superClass)) { return true; } } } return false; }
@Test public void isOverriddenMethodTest() throws NoSuchMethodException { for (Method method : Child.class.getMethods()) { if ("parametrizedMethod1".equals(method.getName())) { final boolean result = ReflectionUtils.isOverriddenMethod(method, Child.class); final Class<?> first = method.getParameterTypes()[0]; if (Number.class.equals(first)) { Assert.assertTrue(result); } else if (Integer.class.equals(first)) { Assert.assertFalse(result); } } else if ("parametrizedMethod3".equals(method.getName())) { Assert.assertFalse(ReflectionUtils.isOverriddenMethod(method, Child.class)); } } for (Method method : Object.class.getMethods()) { if ("equals".equals(method.getName())) { Assert.assertFalse(ReflectionUtils.isOverriddenMethod(method, Object.class)); } } for (Method method : IParent.class.getMethods()) { if ("parametrizedMethod5".equals(method.getName())) { Assert.assertTrue(ReflectionUtils.isOverriddenMethod(method, IParent.class)); } else if ("parametrizedMethod2".equals(method.getName())) { Assert.assertFalse(ReflectionUtils.isOverriddenMethod(method, IParent.class)); } else { Assert.fail("Method not expected"); } } }
javax.ws.rs.Consumes methodConsumes = ReflectionUtils.getAnnotation(method, javax.ws.rs.Consumes.class); if (ReflectionUtils.isOverriddenMethod(method, cls)) { continue;
/** * Checks if the method methodToFind is the overridden method from the superclass or superinterface. * * @param methodToFind is method to check * @param cls is method class * @return true if the method is overridden method */ public static boolean isOverriddenMethod(Method methodToFind, Class<?> cls) { Set<Class<?>> superClasses = new HashSet<>(); for (Class c : cls.getInterfaces()) { superClasses.add(c); } if (cls.getSuperclass() != null) { superClasses.add(cls.getSuperclass()); } for (Class<?> superClass : superClasses) { if (superClass != null && !(superClass.equals(Object.class))) { for (Method method : superClass.getMethods()) { if (method.getName().equals(methodToFind.getName()) && method.getReturnType().isAssignableFrom(methodToFind.getReturnType()) && Arrays.equals(method.getParameterTypes(), methodToFind.getParameterTypes()) && !Arrays.equals(method.getGenericParameterTypes(), methodToFind.getGenericParameterTypes())) { return true; } } if (isOverriddenMethod(methodToFind, superClass)) { return true; } } } return false; }
javax.ws.rs.Consumes methodConsumes = ReflectionUtils.getAnnotation(method, javax.ws.rs.Consumes.class); if (ReflectionUtils.isOverriddenMethod(method, cls)) { continue;
javax.ws.rs.Consumes methodConsumes = ReflectionUtils.getAnnotation(method, javax.ws.rs.Consumes.class); if (ReflectionUtils.isOverriddenMethod(method, cls))