mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-13 15:05:33 +00:00
Simplify generation of enum serializers code
This commit is contained in:
parent
e6f1cb69d1
commit
ceff230d73
@ -60,11 +60,10 @@ require dirname(__DIR__) . '/vendor/autoload.php';
|
|||||||
* @return string[]
|
* @return string[]
|
||||||
* @phpstan-return list<string>
|
* @phpstan-return list<string>
|
||||||
*/
|
*/
|
||||||
function buildWriterFunc(string $virtualTypeName, string $nativeTypeName, array $memberNames, string &$functionName) : array{
|
function buildWriterFunc(string $virtualTypeName, string $nativeTypeName, array $memberNames, string $functionName) : array{
|
||||||
$bits = getBitsRequired($memberNames);
|
$bits = getBitsRequired($memberNames);
|
||||||
$lines = [];
|
$lines = [];
|
||||||
|
|
||||||
$functionName = lcfirst($virtualTypeName);
|
|
||||||
$lines[] = "public function $functionName(\\$nativeTypeName \$value) : void{";
|
$lines[] = "public function $functionName(\\$nativeTypeName \$value) : void{";
|
||||||
$lines[] = "\t\$this->int($bits, match(\$value){";
|
$lines[] = "\t\$this->int($bits, match(\$value){";
|
||||||
|
|
||||||
@ -85,11 +84,10 @@ function buildWriterFunc(string $virtualTypeName, string $nativeTypeName, array
|
|||||||
* @return string[]
|
* @return string[]
|
||||||
* @phpstan-return list<string>
|
* @phpstan-return list<string>
|
||||||
*/
|
*/
|
||||||
function buildReaderFunc(string $virtualTypeName, string $nativeTypeName, array $memberNames, string &$functionName) : array{
|
function buildReaderFunc(string $virtualTypeName, string $nativeTypeName, array $memberNames, string $functionName) : array{
|
||||||
$bits = getBitsRequired($memberNames);
|
$bits = getBitsRequired($memberNames);
|
||||||
$lines = [];
|
$lines = [];
|
||||||
|
|
||||||
$functionName = lcfirst($virtualTypeName);
|
|
||||||
$lines[] = "public function $functionName(\\$nativeTypeName &\$value) : void{";
|
$lines[] = "public function $functionName(\\$nativeTypeName &\$value) : void{";
|
||||||
$lines[] = "\t\$value = match(\$this->readInt($bits)){";
|
$lines[] = "\t\$value = match(\$this->readInt($bits)){";
|
||||||
|
|
||||||
@ -122,43 +120,6 @@ function stringifyEnumMembers(array $members, string $enumClass) : array{
|
|||||||
return array_map(fn(string $enumCaseName) => "\\$enumClass::$enumCaseName()", array_keys($members));
|
return array_map(fn(string $enumCaseName) => "\\$enumClass::$enumCaseName()", array_keys($members));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param object[] $enumMembers
|
|
||||||
* @phpstan-param array<string, object> $enumMembers
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
* @phpstan-return list<string>
|
|
||||||
*/
|
|
||||||
function buildEnumWriterFunc(array $enumMembers, string &$functionName) : array{
|
|
||||||
$reflect = new \ReflectionClass($enumMembers[array_key_first($enumMembers)]);
|
|
||||||
return buildWriterFunc(
|
|
||||||
$reflect->getShortName(),
|
|
||||||
$reflect->getName(),
|
|
||||||
stringifyEnumMembers($enumMembers, $reflect->getName()),
|
|
||||||
$functionName
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param object[] $enumMembers
|
|
||||||
* @phpstan-param array<string, object> $enumMembers
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
* @phpstan-return list<string>
|
|
||||||
*/
|
|
||||||
function buildEnumReaderFunc(array $enumMembers, string &$functionName) : array{
|
|
||||||
if(count($enumMembers) === 0){
|
|
||||||
throw new \InvalidArgumentException("Enum members cannot be empty");
|
|
||||||
}
|
|
||||||
$reflect = new \ReflectionClass($enumMembers[array_key_first($enumMembers)]);
|
|
||||||
return buildReaderFunc(
|
|
||||||
$reflect->getShortName(),
|
|
||||||
$reflect->getName(),
|
|
||||||
stringifyEnumMembers($enumMembers, $reflect->getName()),
|
|
||||||
$functionName
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$enumsUsed = [
|
$enumsUsed = [
|
||||||
BellAttachmentType::getAll(),
|
BellAttachmentType::getAll(),
|
||||||
CopperOxidation::getAll(),
|
CopperOxidation::getAll(),
|
||||||
@ -185,15 +146,29 @@ $writerFuncs = [
|
|||||||
"abstract public function int(int \$bits, int \$value) : void;"
|
"abstract public function int(int \$bits, int \$value) : void;"
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
$functionName = "";
|
|
||||||
|
|
||||||
foreach($enumsUsed as $enumMembers){
|
foreach($enumsUsed as $enumMembers){
|
||||||
$writerF = buildEnumWriterFunc($enumMembers, $functionName);
|
if(count($enumMembers) === 0){
|
||||||
/** @var string $functionName */
|
throw new \InvalidArgumentException("Enum members cannot be empty");
|
||||||
$writerFuncs[$functionName] = $writerF;
|
}
|
||||||
$readerF = buildEnumReaderFunc($enumMembers, $functionName);
|
$reflect = new \ReflectionClass($enumMembers[array_key_first($enumMembers)]);
|
||||||
/** @var string $functionName */
|
$virtualTypeName = $reflect->getShortName();
|
||||||
$readerFuncs[$functionName] = $readerF;
|
$nativeTypeName = $reflect->getName();
|
||||||
|
$functionName = lcfirst($virtualTypeName);
|
||||||
|
|
||||||
|
$stringifiedMembers = stringifyEnumMembers($enumMembers, $nativeTypeName);
|
||||||
|
$writerFuncs[$functionName] = buildWriterFunc(
|
||||||
|
$virtualTypeName,
|
||||||
|
$nativeTypeName,
|
||||||
|
$stringifiedMembers,
|
||||||
|
$functionName
|
||||||
|
);
|
||||||
|
$readerFuncs[$functionName] = buildReaderFunc(
|
||||||
|
$virtualTypeName,
|
||||||
|
$nativeTypeName,
|
||||||
|
$stringifiedMembers,
|
||||||
|
$functionName
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user