Skip to content

Commit

Permalink
Compatibility with BetterReflection 6.x on ClassFromEnumFactory (take…
Browse files Browse the repository at this point in the history
… 2) (#3207)
  • Loading branch information
samsonasik committed Dec 16, 2022
1 parent bf9d5ab commit ee4050a
Showing 1 changed file with 24 additions and 5 deletions.
29 changes: 24 additions & 5 deletions rules/Php81/NodeFactory/EnumFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public function createFromSpatieClass(Class_ $class): Enum_
$enum->scalarType = new Identifier($identifierType);

foreach ($docBlockMethods as $docBlockMethod) {
$enum->stmts[] = $this->createEnumCaseFromDocComment($docBlockMethod, $mapping);
$enum->stmts[] = $this->createEnumCaseFromDocComment($docBlockMethod, $class, $mapping);
}
}

Expand All @@ -92,7 +92,15 @@ public function createFromSpatieClass(Class_ $class): Enum_
private function createEnumCaseFromConst(ClassConst $classConst): EnumCase
{
$constConst = $classConst->consts[0];
$enumCase = new EnumCase($constConst->name, $constConst->value);
$enumCase = new EnumCase(
$constConst->name,
$constConst->value,
[],
[
'startLine' => $constConst->getStartLine(),
'endLine' => $constConst->getEndLine(),
]
);

// mirror comments
$enumCase->setAttribute(AttributeKey::PHP_DOC_INFO, $classConst->getAttribute(AttributeKey::PHP_DOC_INFO));
Expand All @@ -104,15 +112,26 @@ private function createEnumCaseFromConst(ClassConst $classConst): EnumCase
/**
* @param array<int|string, mixed> $mapping
*/
private function createEnumCaseFromDocComment(PhpDocTagNode $phpDocTagNode, array $mapping = []): EnumCase
{
private function createEnumCaseFromDocComment(
PhpDocTagNode $phpDocTagNode,
Class_ $class,
array $mapping = []
): EnumCase {
/** @var MethodTagValueNode $nodeValue */
$nodeValue = $phpDocTagNode->value;
$enumValue = $mapping[$nodeValue->methodName] ?? $nodeValue->methodName;
$enumName = strtoupper($nodeValue->methodName);
$enumExpr = $this->builderFactory->val($enumValue);

return new EnumCase($enumName, $enumExpr);
return new EnumCase(
$enumName,
$enumExpr,
[],
[
'startLine' => $class->getStartLine(),
'endLine' => $class->getEndLine(),
]
);
}

/**
Expand Down

0 comments on commit ee4050a

Please sign in to comment.