} final public static function newFromDiffusionRequest( DiffusionRequest $request) { $repository = $request->getRepository(); switch ($repository->getVersionControlSystem()) { case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: $class = 'DiffusionGitFileContentQuery'; break; case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: $class = 'DiffusionSvnFileContentQuery'; break; default: throw new Exception("Unsupported VCS!"); } PhutilSymbolLoader::loadClass($class); $query = new $class(); $query->request = $request; return $query; } final protected function getRequest() { return $this->request; } final public function loadFileContent() { return $this->executeQuery(); } abstract protected function executeQuery(); final public function getRawData() { return $this->loadFileContent()->getCorpus(); } final public function getTokenizedData() { return $this->tokenizeData($this->getRawData()); } abstract protected function tokenizeData($data); public function setNeedsBlame($needs_blame) { $this->needsBlame = $needs_blame; } public function getNeedsBlame() { return $this->needsBlame; } }