private function findClassNameByVersion($startFromClassName, $version, &$visited = array())
    {
        $versionAnnotation = $this->reader->getClassAnnotation(
            new \ReflectionClass($startFromClassName),
            'Evispa\ObjectMigration\Annotations\Version'
        );

        if ($versionAnnotation->version === $version) {
            return $startFromClassName;
        }

        $migrationAnnotations = $this->getClassMigrationMethodInfo($startFromClassName);
        /** @var MethodInfo $methodInfo */
        foreach ($migrationAnnotations as $methodInfo) {
            if ($methodInfo->annotation->from && !in_array($methodInfo->annotation->from, $visited)) {
                $visited[] = $methodInfo->annotation->from;
                $className = $this->getClassNameByVersion($methodInfo->annotation->from, $version, $visited);
                if ($className) {
                    return $className;
                }
            }

            if ($methodInfo->annotation->to && !in_array($methodInfo->annotation->to, $visited)) {
                $visited[] = $methodInfo->annotation->to;
                $className = $this->getClassNameByVersion($methodInfo->annotation->to, $version, $visited);
                if ($className) {
                    return $className;
                }
            }
        }

        return null;
    }