public static AMethodMeta getOverriddenMethod(AMethodMeta entity) {
        IClass superClass = entity.getActuallyOwner().getSuperclass();
        String methodName = entity.getName();
        IClass[] argClasses = entity.getParameterTypes() == null ? new IClass[0] : entity.getParameterTypes();

        for (; superClass != null && !Object.class.equals(superClass);) {
        	AMethodMeta method = superClass.getDeclaredMethod(methodName, argClasses);
        	if(method != null) {
        		IClass callerOwner = entity.getActuallyOwner();
        		IClass calledOwner = method.getActuallyOwner();
                if (IClassUtils.visible(callerOwner, calledOwner, calledOwner, method.getModifiers())) {
                    return method;
                }
        	}
            superClass = superClass.getSuperclass();
        }
        return null;
    }