diff --git a/src/utils/RegistryTrait.php b/src/utils/RegistryTrait.php index 9be348d68..9aff738f1 100644 --- a/src/utils/RegistryTrait.php +++ b/src/utils/RegistryTrait.php @@ -112,55 +112,4 @@ trait RegistryTrait{ return self::preprocessMember($o); }, self::$members); } - - /** - * Generates code for static methods for all known registry members. - */ - public static function _generateGetters() : string{ - $lines = []; - - static $fnTmpl = ' -public static function %1$s() : %2$s{ - return self::fromString("%1$s"); -}'; - - foreach(self::_registryGetAll() as $name => $member){ - $lines[] = sprintf($fnTmpl, $name, '\\' . get_class($member)); - } - return "//region auto-generated code\n" . implode("\n", $lines) . "\n\n//endregion\n"; - } - - /** - * Generates a block of @ method annotations for accessors for this registry's known members. - */ - public static function _generateMethodAnnotations() : string{ - $traitName = (new \ReflectionClass(__TRAIT__))->getShortName(); - $fnName = (new \ReflectionMethod(__METHOD__))->getShortName(); - $lines = ["/**"]; - $lines[] = " * This doc-block is generated automatically, do not modify it manually."; - $lines[] = " * This must be regenerated whenever registry members are added, removed or changed."; - $lines[] = " * @see $traitName::$fnName()"; - $lines[] = " *"; - static $lineTmpl = " * @method static %2\$s %s()"; - - $thisNamespace = (new \ReflectionClass(__CLASS__))->getNamespaceName(); - foreach(self::_registryGetAll() as $name => $member){ - $reflect = new \ReflectionClass($member); - while($reflect !== false and $reflect->isAnonymous()){ - $reflect = $reflect->getParentClass(); - } - if($reflect === false){ - $typehint = "object"; - }elseif($reflect->getName() === __CLASS__){ - $typehint = "self"; - }elseif(strpos($reflect->getName(), $thisNamespace) === 0){ - $typehint = substr($reflect->getName(), strlen($thisNamespace . '\\')); - }else{ - $typehint = '\\' . $reflect->getName(); - } - $lines[] = sprintf($lineTmpl, $name, $typehint); - } - $lines[] = " */\n"; - return implode("\n", $lines); - } } diff --git a/src/utils/RegistryUtils.php b/src/utils/RegistryUtils.php new file mode 100644 index 000000000..12e3a978d --- /dev/null +++ b/src/utils/RegistryUtils.php @@ -0,0 +1,80 @@ + $member){ + $lines[] = sprintf($fnTmpl, mb_strtoupper($name), '\\' . get_class($member)); + } + return "//region auto-generated code\n" . implode("\n", $lines) . "\n\n//endregion\n"; + } + + /** + * Generates a block of @ method annotations for accessors for this registry's known members. + * + * @param object[] $members + */ + public static function _generateMethodAnnotations(string $namespaceName, array $members) : string{ + $selfName = __METHOD__; + $lines = ["/**"]; + $lines[] = " * This doc-block is generated automatically, do not modify it manually."; + $lines[] = " * This must be regenerated whenever registry members are added, removed or changed."; + $lines[] = " * @see \\$selfName()"; + $lines[] = " *"; + + static $lineTmpl = " * @method static %2\$s %s()"; + foreach($members as $name => $member){ + $reflect = new \ReflectionClass($member); + while($reflect !== false and $reflect->isAnonymous()){ + $reflect = $reflect->getParentClass(); + } + if($reflect === false){ + $typehint = "object"; + }elseif($reflect->getNamespaceName() === $namespaceName){ + $typehint = $reflect->getShortName(); + }else{ + $typehint = '\\' . $reflect->getName(); + } + $lines[] = sprintf($lineTmpl, mb_strtoupper($name), $typehint); + } + $lines[] = " */"; + return implode("\n", $lines); + } +}