private static function getPropertyValueByPropertiesChain($source, $property, $force)
    {
        $exploded = explode('.', $property);

        $property = $exploded[0];
        $source = self::getPropertyValue($source, $property, $force);

        /*
         * Value of processed property from the chain is not null?
         * Let's dig more and get proper value
         *
         * Required to avoid bug:
         * \ReflectionObject::__construct() expects parameter 1 to be object, null given
         * (...)
         * 4. at \ReflectionObject->__construct (null)
         * 5. at Reflection ::getPropertyValue (null, 'name', true)
         * 6. at ListService->getItemValue (object(Deal), 'project.name', '0')
         *
         * while using "project.name" as property - $project has $name property ($project exists in the Deal class)
         * and the $project equals null
         *
         * Meritoo <github@meritoo.pl>
         * 2016-11-07
         */
        if (null !== $source) {
            unset($exploded[0]);
            $property = implode('.', $exploded);

            return self::getPropertyValue($source, $property, $force);
        }

        return null;
    }