public function getModelsDefinition()
    {
        $file = $this->getModelsConfigFile();
        if (!file_exists($file) || !is_readable($file)) {
            throw new Exception\ModelFileNotFoundException(__METHOD__ . " Model configuration file '$file' does not exists or not readable");
        }

        if (defined('HHVM_VERSION')) {
            // As an 'evil' workaround, waiting for hhvm to comply
            // see https://github.com/facebook/hhvm/issues/1447
            $definition = false;
            $file_content = file_get_contents($file);
            $file_content = trim(str_replace('<?php', '', $file_content));
            $file_content = trim(str_replace('return array(', '$definition = array(', $file_content));
            eval($file_content);
        } else {
            $definition = include $file;
        }

        if (!$definition) {
            throw new Exception\ModelFileCorruptedException(__METHOD__ . " Model configuration file '$file' cannot be included");
        }
        if (!is_array($definition)) {
            throw new Exception\ModelFileCorruptedException(__METHOD__ . " Model configuration file '$file' was included but is not a valid array");
        }

        return $definition;
    }