public function testFullyQualifiedGlobalConstantName() { $this->assertFQSENEqual(FullyQualifiedGlobalConstantName::make('\\Name\\Space', 'c'), '\\Name\\Space\\c'); $this->assertFQSENEqual(FullyQualifiedGlobalConstantName::make('', 'c'), '\\c'); $this->assertFQSENEqual(FullyQualifiedGlobalConstantName::make('', 'c'), '\\c'); $this->assertFQSENEqual(FullyQualifiedGlobalConstantName::fromFullyQualifiedString('\\c'), '\\c'); $this->assertFQSENEqual(FullyQualifiedGlobalConstantName::fromStringInContext('c', $this->context), '\\c'); }
/** * @param Node $node * The node where the constant was found * * @param string $name * The name of the constant * * @param Node|mixed $value * Either a node or a constant to be used as the value of * the constant. * * @param int $flags * Any flags on the definition of the constant * * @return void */ private function addConstant(Node $node, string $name, $value, int $flags = 0) { // Give it a fully-qualified name $fqsen = FullyQualifiedGlobalConstantName::fromStringInContext($name, $this->context); // Create the constant $constant = new GlobalConstant($this->context->withLineNumberStart($node->lineno ?? 0), $name, new UnionType(), $flags, $fqsen); $constant->setFutureUnionType(new FutureUnionType($this->code_base, $this->context, $value)); $this->code_base->addGlobalConstant($constant); }
/** * @return ClassConstant * Get the (non-class) constant associated with this node * in this context * * @throws NodeException * An exception is thrown if we can't understand the node * * @throws CodeBaseExtension * An exception is thrown if we can't find the given * class */ public function getConst() : ClassConstant { assert($this->node->kind === \ast\AST_CONST, "Node must be of type \\ast\\AST_CONST"); if ($this->node->children['name']->kind !== \ast\AST_NAME) { throw new NodeException($this->node, "Can't determine constant name"); } $constant_name = $this->node->children['name']->children['name']; $fqsen = FullyQualifiedGlobalConstantName::fromStringInContext($constant_name, $this->context); if (!$this->code_base->hasGlobalConstantWithFQSEN($fqsen)) { throw new IssueException(Issue::fromType(Issue::UndeclaredConstant)($this->context->getFile(), $this->node->lineno ?? 0, [$constant_name])); } return $this->code_base->getGlobalConstantByFQSEN($fqsen); }