diff --git a/build/generate-registry-annotations.php b/build/generate-registry-annotations.php index 2eece2cae..b92fd67c8 100644 --- a/build/generate-registry-annotations.php +++ b/build/generate-registry-annotations.php @@ -23,21 +23,62 @@ declare(strict_types=1); namespace pocketmine\build\update_registry_annotations; -use pocketmine\utils\RegistryUtils; use function basename; use function class_exists; use function count; use function dirname; use function file_get_contents; use function file_put_contents; +use function implode; +use function ksort; use function preg_match; +use function sprintf; use function str_replace; use function substr; +use const SORT_STRING; if(count($argv) !== 2){ die("Provide a path to process"); } +/** + * @param object[] $members + */ +function generateMethodAnnotations(string $namespaceName, array $members) : string{ + $selfName = basename(__FILE__); + $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 build/$selfName"; + $lines[] = " * @generate-registry-docblock"; + $lines[] = " *"; + + static $lineTmpl = " * @method static %2\$s %s()"; + $memberLines = []; + 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(); + } + $accessor = mb_strtoupper($name); + $memberLines[$accessor] = sprintf($lineTmpl, $accessor, $typehint); + } + ksort($memberLines, SORT_STRING); + + foreach($memberLines as $line){ + $lines[] = $line; + } + $lines[] = " */"; + return implode("\n", $lines); +} + require dirname(__DIR__) . '/vendor/autoload.php'; foreach(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($argv[1], \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::CURRENT_AS_PATHNAME)) as $file){ @@ -59,12 +100,12 @@ foreach(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($argv[1], } $reflect = new \ReflectionClass($className); $docComment = $reflect->getDocComment(); - if($docComment === false || (preg_match("/^\s*\*\s*\@see .+::_generateMethodAnnotations\(\)$/m", $docComment) !== 1 && preg_match("/^\s*\*\s*@generate-registry-docblock$/m", $docComment) !== 1)){ + if($docComment === false || preg_match("/^\s*\*\s*@generate-registry-docblock$/m", $docComment) !== 1){ continue; } echo "Found registry in $file\n"; - $replacement = RegistryUtils::_generateMethodAnnotations($matches[1], $className::getAll()); + $replacement = generateMethodAnnotations($matches[1], $className::getAll()); $newContents = str_replace($docComment, $replacement, $contents); if($newContents !== $contents){ diff --git a/src/block/VanillaBlocks.php b/src/block/VanillaBlocks.php index 6d752b67f..7cfd702d0 100644 --- a/src/block/VanillaBlocks.php +++ b/src/block/VanillaBlocks.php @@ -29,7 +29,8 @@ use function assert; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static WoodenButton ACACIA_BUTTON() * @method static WoodenDoor ACACIA_DOOR() diff --git a/src/block/utils/BannerPatternType.php b/src/block/utils/BannerPatternType.php index 51d85f6e4..5ede3d92b 100644 --- a/src/block/utils/BannerPatternType.php +++ b/src/block/utils/BannerPatternType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static BannerPatternType BORDER() * @method static BannerPatternType BRICKS() diff --git a/src/block/utils/BellAttachmentType.php b/src/block/utils/BellAttachmentType.php index f07b047c9..dc80e0c19 100644 --- a/src/block/utils/BellAttachmentType.php +++ b/src/block/utils/BellAttachmentType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static BellAttachmentType CEILING() * @method static BellAttachmentType FLOOR() diff --git a/src/block/utils/BrewingStandSlot.php b/src/block/utils/BrewingStandSlot.php index 7d257e9ad..c5b14af1b 100644 --- a/src/block/utils/BrewingStandSlot.php +++ b/src/block/utils/BrewingStandSlot.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static BrewingStandSlot EAST() * @method static BrewingStandSlot NORTHWEST() diff --git a/src/block/utils/CoralType.php b/src/block/utils/CoralType.php index fb61a95e5..07d94d7ea 100644 --- a/src/block/utils/CoralType.php +++ b/src/block/utils/CoralType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static CoralType BRAIN() * @method static CoralType BUBBLE() diff --git a/src/block/utils/DyeColor.php b/src/block/utils/DyeColor.php index 0bd40c8c3..91fe73fbf 100644 --- a/src/block/utils/DyeColor.php +++ b/src/block/utils/DyeColor.php @@ -29,7 +29,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static DyeColor BLACK() * @method static DyeColor BLUE() diff --git a/src/block/utils/MushroomBlockType.php b/src/block/utils/MushroomBlockType.php index 413c27370..33b04831d 100644 --- a/src/block/utils/MushroomBlockType.php +++ b/src/block/utils/MushroomBlockType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static MushroomBlockType ALL_CAP() * @method static MushroomBlockType CAP_EAST() diff --git a/src/block/utils/RecordType.php b/src/block/utils/RecordType.php index 8b72d0a78..093663d0b 100644 --- a/src/block/utils/RecordType.php +++ b/src/block/utils/RecordType.php @@ -31,7 +31,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static RecordType DISK_11() * @method static RecordType DISK_13() diff --git a/src/block/utils/SkullType.php b/src/block/utils/SkullType.php index 72bd94d6c..2bbb566dd 100644 --- a/src/block/utils/SkullType.php +++ b/src/block/utils/SkullType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static SkullType CREEPER() * @method static SkullType DRAGON() diff --git a/src/block/utils/SlabType.php b/src/block/utils/SlabType.php index 806fdf5a4..26648481f 100644 --- a/src/block/utils/SlabType.php +++ b/src/block/utils/SlabType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static SlabType BOTTOM() * @method static SlabType DOUBLE() diff --git a/src/block/utils/StairShape.php b/src/block/utils/StairShape.php index 5f963728e..dadd7d15e 100644 --- a/src/block/utils/StairShape.php +++ b/src/block/utils/StairShape.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static StairShape INNER_LEFT() * @method static StairShape INNER_RIGHT() diff --git a/src/block/utils/TreeType.php b/src/block/utils/TreeType.php index 6896784d5..7667d144d 100644 --- a/src/block/utils/TreeType.php +++ b/src/block/utils/TreeType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static TreeType ACACIA() * @method static TreeType BIRCH() diff --git a/src/crafting/FurnaceType.php b/src/crafting/FurnaceType.php index d68702f10..889150c45 100644 --- a/src/crafting/FurnaceType.php +++ b/src/crafting/FurnaceType.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static FurnaceType BLAST_FURNACE() * @method static FurnaceType FURNACE() diff --git a/src/entity/effect/VanillaEffects.php b/src/entity/effect/VanillaEffects.php index bef5f7aa9..db5d28fff 100644 --- a/src/entity/effect/VanillaEffects.php +++ b/src/entity/effect/VanillaEffects.php @@ -30,7 +30,8 @@ use function assert; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static AbsorptionEffect ABSORPTION() * @method static Effect BLINDNESS() diff --git a/src/item/ItemUseResult.php b/src/item/ItemUseResult.php index 57eff8e2d..8b5079289 100644 --- a/src/item/ItemUseResult.php +++ b/src/item/ItemUseResult.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static ItemUseResult FAIL() * @method static ItemUseResult NONE() diff --git a/src/item/PotionType.php b/src/item/PotionType.php index 023b3f936..952aa7e71 100644 --- a/src/item/PotionType.php +++ b/src/item/PotionType.php @@ -30,7 +30,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static PotionType AWKWARD() * @method static PotionType FIRE_RESISTANCE() diff --git a/src/item/ToolTier.php b/src/item/ToolTier.php index 85e363c3e..a0984c6ad 100644 --- a/src/item/ToolTier.php +++ b/src/item/ToolTier.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static ToolTier DIAMOND() * @method static ToolTier GOLD() diff --git a/src/item/VanillaItems.php b/src/item/VanillaItems.php index 6aadc4c48..f9ab3ade7 100644 --- a/src/item/VanillaItems.php +++ b/src/item/VanillaItems.php @@ -29,7 +29,8 @@ use function assert; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static Boat ACACIA_BOAT() * @method static Apple APPLE() diff --git a/src/item/enchantment/VanillaEnchantments.php b/src/item/enchantment/VanillaEnchantments.php index f961f2283..8ff97770a 100644 --- a/src/item/enchantment/VanillaEnchantments.php +++ b/src/item/enchantment/VanillaEnchantments.php @@ -29,7 +29,8 @@ use pocketmine\utils\RegistryTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static ProtectionEnchantment BLAST_PROTECTION() * @method static Enchantment EFFICIENCY() diff --git a/src/player/GameMode.php b/src/player/GameMode.php index e3bcd9e1b..a604f720e 100644 --- a/src/player/GameMode.php +++ b/src/player/GameMode.php @@ -31,7 +31,8 @@ use function mb_strtolower; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static GameMode ADVENTURE() * @method static GameMode CREATIVE() diff --git a/src/player/UsedChunkStatus.php b/src/player/UsedChunkStatus.php index ff8c03089..bbdb9a061 100644 --- a/src/player/UsedChunkStatus.php +++ b/src/player/UsedChunkStatus.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static UsedChunkStatus NEEDED() * @method static UsedChunkStatus REQUESTED() diff --git a/src/plugin/PluginEnableOrder.php b/src/plugin/PluginEnableOrder.php index 5b4483032..16851cc72 100644 --- a/src/plugin/PluginEnableOrder.php +++ b/src/plugin/PluginEnableOrder.php @@ -29,7 +29,8 @@ use function mb_strtolower; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static PluginEnableOrder POSTWORLD() * @method static PluginEnableOrder STARTUP() diff --git a/src/utils/RegistryUtils.php b/src/utils/RegistryUtils.php deleted file mode 100644 index 7b76a14f7..000000000 --- a/src/utils/RegistryUtils.php +++ /dev/null @@ -1,92 +0,0 @@ - $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()"; - $memberLines = []; - 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(); - } - $accessor = mb_strtoupper($name); - $memberLines[$accessor] = sprintf($lineTmpl, $accessor, $typehint); - } - ksort($memberLines, SORT_STRING); - - foreach($memberLines as $line){ - $lines[] = $line; - } - $lines[] = " */"; - return implode("\n", $lines); - } -} diff --git a/src/world/sound/NoteInstrument.php b/src/world/sound/NoteInstrument.php index bec080d07..b22bc2149 100644 --- a/src/world/sound/NoteInstrument.php +++ b/src/world/sound/NoteInstrument.php @@ -28,7 +28,8 @@ use pocketmine\utils\EnumTrait; /** * This doc-block is generated automatically, do not modify it manually. * This must be regenerated whenever registry members are added, removed or changed. - * @see \pocketmine\utils\RegistryUtils::_generateMethodAnnotations() + * @see build/generate-registry-annotations.php + * @generate-registry-docblock * * @method static NoteInstrument BASS_DRUM() * @method static NoteInstrument CLICKS_AND_STICKS()