name = $reflectionObject->name; $this->value = $reflectionObject->getValue(); if ($reflectionObject->isPrivate()) { $this->visibility = 'private'; } elseif ($reflectionObject->isProtected()) { $this->visibility = 'protected'; } else { $this->visibility = 'public'; } return $this; } /** * @param Const_ $node * @return static */ public function readObjectFromStubNode($node) { $this->name = $this->getConstantFQN($node, $node->name->name); $this->value = $this->getConstValue($node); $this->collectTags($node); $parentNode = $node->getAttribute('parent'); if (property_exists($parentNode, 'attrGroups')) { $this->availableVersionsRangeFromAttribute = self::findAvailableVersionsRangeFromAttribute($parentNode->attrGroups); } if ($parentNode instanceof ClassConst) { if ($parentNode->isPrivate()) { $this->visibility = 'private'; } elseif ($parentNode->isProtected()) { $this->visibility = 'protected'; } else { $this->visibility = 'public'; } $this->parentName = self::getFQN($parentNode->getAttribute('parent')); } return $this; } /** * @param $node * @return int|string|bool|float|null */ protected function getConstValue($node) { if (in_array('value', $node->value->getSubNodeNames(), true)) { return $node->value->value; } if (in_array('expr', $node->value->getSubNodeNames(), true)) { if ($node->value instanceof UnaryMinus) { return -$node->value->expr->value; } elseif ($node->value instanceof Cast && $node->value->expr instanceof ConstFetch) { return $node->value->expr->name->name; } return $node->value->expr->value; } if (in_array('name', $node->value->getSubNodeNames(), true)) { $value = isset($node->value->name->parts[0]) ? $node->value->name->parts[0] : $node->value->name->name; return $value === 'null' ? null : $value; } return null; } /** * @param NodeAbstract $node * @param string $nodeName * @return string */ protected function getConstantFQN(NodeAbstract $node, $nodeName) { $namespace = ''; $parentNode = $node->getAttribute('parent'); if ($parentNode instanceof Enum_) { return $nodeName; } else { $parentParentNode = $parentNode->getAttribute('parent'); if ($parentParentNode instanceof Namespace_ && !empty($parentParentNode->name)) { $namespace = '\\' . $parentParentNode->name->name . '\\'; } } return $namespace . $nodeName; } /** * @param stdClass|array $jsonData * @throws Exception */ public function readMutedProblems($jsonData) { foreach ($jsonData as $constant) { if ($constant->name === $this->name && !empty($constant->problems)) { foreach ($constant->problems as $problem) { switch ($problem->description) { case 'wrong value': $this->mutedProblems[StubProblemType::WRONG_CONSTANT_VALUE] = $problem->versions; break; case 'missing constant': $this->mutedProblems[StubProblemType::STUB_IS_MISSED] = $problem->versions; break; default: throw new Exception("Unexpected value $problem->description"); } } } } } }