public function visitCatch(Node $node) : Context
{
try {
$union_type = UnionTypeVisitor::unionTypeFromClassNode($this->code_base, $this->context, $node->children['class']);
$class_list = (new ContextNode($this->code_base, $this->context, $node->children['class']))->getClassList();
foreach ($class_list as $class) {
$class->addReference($this->context);
}
} catch (CodeBaseException $exception) {
$this->emitIssue(Issue::UndeclaredClassCatch, $node->lineno ?? 0, (string) $exception->getFQSEN());
}
$variable_name = (new ContextNode($this->code_base, $this->context, $node->children['var']))->getVariableName();
if (!empty($variable_name)) {
$variable = Variable::fromNodeInContext($node->children['var'], $this->context, $this->code_base, false);
if (!$union_type->isEmpty()) {
$variable->setUnionType($union_type);
}
$this->context->addScopeVariable($variable);
}
return $this->context;
}