public function getCompleter(Context $context, Project $project) { if ($context->isNamespace()) { return $this->namespaceCompleter; } elseif ($context->isUse()) { return $this->useCompleter; } elseif ($context->isClassName()) { return $this->classNameCompleter; } elseif ($context->isInterfaceName()) { return $this->interfaceNameCompleter; } elseif ($context->isThis() || $context->isObject()) { return $this->objectCompleter; } elseif ($context->isClassStatic()) { return $this->staticCompleter; } elseif ($context->isVar()) { return $this->varCompleter; } $event = new CustomCompleterEvent($project, $context); $this->dispatcher->dispatch(self::CUSTOM_COMPLETER, $event); $completer = $event->completer; if ($completer) { return $completer; } return null; }