Skip to content

Commit 1c9b6b8

Browse files
gen_stub: move handleStatements() into FileInfo
Reduce the number of global functions by moving it to instance method `FileInfo::handleStatements()`.
1 parent ec3ecdc commit 1c9b6b8

File tree

1 file changed

+145
-145
lines changed

1 file changed

+145
-145
lines changed

build/gen_stub.php

Lines changed: 145 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -4298,6 +4298,150 @@ public function getMinimumPhpVersionIdCompatibility(): ?int {
42984298
public function shouldGenerateLegacyArginfo(): bool {
42994299
return $this->minimumPhpVersionIdCompatibility !== null && $this->minimumPhpVersionIdCompatibility < PHP_80_VERSION_ID;
43004300
}
4301+
4302+
public function handleStatements(array $stmts, PrettyPrinterAbstract $prettyPrinter): void {
4303+
$conds = [];
4304+
foreach ($stmts as $stmt) {
4305+
$cond = handlePreprocessorConditions($conds, $stmt);
4306+
4307+
if ($stmt instanceof Stmt\Nop) {
4308+
continue;
4309+
}
4310+
4311+
if ($stmt instanceof Stmt\Namespace_) {
4312+
$this->handleStatements($stmt->stmts, $prettyPrinter);
4313+
continue;
4314+
}
4315+
4316+
if ($stmt instanceof Stmt\Const_) {
4317+
foreach ($stmt->consts as $const) {
4318+
$this->constInfos[] = parseConstLike(
4319+
$prettyPrinter,
4320+
new ConstName($const->namespacedName, $const->name->toString()),
4321+
$const,
4322+
0,
4323+
null,
4324+
$stmt->getComments(),
4325+
$cond,
4326+
$this->isUndocumentable,
4327+
$this->getMinimumPhpVersionIdCompatibility(),
4328+
[]
4329+
);
4330+
}
4331+
continue;
4332+
}
4333+
4334+
if ($stmt instanceof Stmt\Function_) {
4335+
$this->funcInfos[] = parseFunctionLike(
4336+
$prettyPrinter,
4337+
new FunctionName($stmt->namespacedName),
4338+
0,
4339+
0,
4340+
$stmt,
4341+
$cond,
4342+
$this->isUndocumentable,
4343+
$this->getMinimumPhpVersionIdCompatibility()
4344+
);
4345+
continue;
4346+
}
4347+
4348+
if ($stmt instanceof Stmt\ClassLike) {
4349+
$className = $stmt->namespacedName;
4350+
$constInfos = [];
4351+
$propertyInfos = [];
4352+
$methodInfos = [];
4353+
$enumCaseInfos = [];
4354+
foreach ($stmt->stmts as $classStmt) {
4355+
$cond = handlePreprocessorConditions($conds, $classStmt);
4356+
if ($classStmt instanceof Stmt\Nop) {
4357+
continue;
4358+
}
4359+
4360+
$classFlags = $stmt instanceof Class_ ? $stmt->flags : 0;
4361+
$abstractFlag = $stmt instanceof Stmt\Interface_ ? Modifiers::ABSTRACT : 0;
4362+
4363+
if ($classStmt instanceof Stmt\ClassConst) {
4364+
foreach ($classStmt->consts as $const) {
4365+
$constInfos[] = parseConstLike(
4366+
$prettyPrinter,
4367+
new ClassConstName($className, $const->name->toString()),
4368+
$const,
4369+
$classStmt->flags,
4370+
$classStmt->type,
4371+
$classStmt->getComments(),
4372+
$cond,
4373+
$this->isUndocumentable,
4374+
$this->getMinimumPhpVersionIdCompatibility(),
4375+
AttributeInfo::createFromGroups($classStmt->attrGroups)
4376+
);
4377+
}
4378+
} else if ($classStmt instanceof Stmt\Property) {
4379+
if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) {
4380+
throw new Exception("Visibility modifier is required");
4381+
}
4382+
foreach ($classStmt->props as $property) {
4383+
$propertyInfos[] = parseProperty(
4384+
$className,
4385+
$classFlags,
4386+
$classStmt->flags,
4387+
$property,
4388+
$classStmt->type,
4389+
$classStmt->getComments(),
4390+
$prettyPrinter,
4391+
$this->getMinimumPhpVersionIdCompatibility(),
4392+
AttributeInfo::createFromGroups($classStmt->attrGroups)
4393+
);
4394+
}
4395+
} else if ($classStmt instanceof Stmt\ClassMethod) {
4396+
if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) {
4397+
throw new Exception("Visibility modifier is required");
4398+
}
4399+
$methodInfos[] = parseFunctionLike(
4400+
$prettyPrinter,
4401+
new MethodName($className, $classStmt->name->toString()),
4402+
$classFlags,
4403+
$classStmt->flags | $abstractFlag,
4404+
$classStmt,
4405+
$cond,
4406+
$this->isUndocumentable,
4407+
$this->getMinimumPhpVersionIdCompatibility()
4408+
);
4409+
} else if ($classStmt instanceof Stmt\EnumCase) {
4410+
$enumCaseInfos[] = new EnumCaseInfo(
4411+
$classStmt->name->toString(), $classStmt->expr);
4412+
} else {
4413+
throw new Exception("Not implemented {$classStmt->getType()}");
4414+
}
4415+
}
4416+
4417+
$this->classInfos[] = parseClass(
4418+
$className,
4419+
$stmt,
4420+
$constInfos,
4421+
$propertyInfos,
4422+
$methodInfos,
4423+
$enumCaseInfos,
4424+
$cond,
4425+
$this->getMinimumPhpVersionIdCompatibility(),
4426+
$this->isUndocumentable
4427+
);
4428+
continue;
4429+
}
4430+
4431+
if ($stmt instanceof Stmt\Expression) {
4432+
$expr = $stmt->expr;
4433+
if ($expr instanceof Expr\Include_) {
4434+
$this->dependencies[] = (string)EvaluatedValue::createFromExpression($expr->expr, null, null, [])->value;
4435+
continue;
4436+
}
4437+
}
4438+
4439+
throw new Exception("Unexpected node {$stmt->getType()}");
4440+
}
4441+
if (!empty($conds)) {
4442+
throw new Exception("Unterminated preprocessor conditions");
4443+
}
4444+
}
43014445
}
43024446

43034447
class DocCommentTag {
@@ -4910,150 +5054,6 @@ function getFileDocComments(array $stmts): array {
49105054
);
49115055
}
49125056

4913-
function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstract $prettyPrinter) {
4914-
$conds = [];
4915-
foreach ($stmts as $stmt) {
4916-
$cond = handlePreprocessorConditions($conds, $stmt);
4917-
4918-
if ($stmt instanceof Stmt\Nop) {
4919-
continue;
4920-
}
4921-
4922-
if ($stmt instanceof Stmt\Namespace_) {
4923-
handleStatements($fileInfo, $stmt->stmts, $prettyPrinter);
4924-
continue;
4925-
}
4926-
4927-
if ($stmt instanceof Stmt\Const_) {
4928-
foreach ($stmt->consts as $const) {
4929-
$fileInfo->constInfos[] = parseConstLike(
4930-
$prettyPrinter,
4931-
new ConstName($const->namespacedName, $const->name->toString()),
4932-
$const,
4933-
0,
4934-
null,
4935-
$stmt->getComments(),
4936-
$cond,
4937-
$fileInfo->isUndocumentable,
4938-
$fileInfo->getMinimumPhpVersionIdCompatibility(),
4939-
[]
4940-
);
4941-
}
4942-
continue;
4943-
}
4944-
4945-
if ($stmt instanceof Stmt\Function_) {
4946-
$fileInfo->funcInfos[] = parseFunctionLike(
4947-
$prettyPrinter,
4948-
new FunctionName($stmt->namespacedName),
4949-
0,
4950-
0,
4951-
$stmt,
4952-
$cond,
4953-
$fileInfo->isUndocumentable,
4954-
$fileInfo->getMinimumPhpVersionIdCompatibility()
4955-
);
4956-
continue;
4957-
}
4958-
4959-
if ($stmt instanceof Stmt\ClassLike) {
4960-
$className = $stmt->namespacedName;
4961-
$constInfos = [];
4962-
$propertyInfos = [];
4963-
$methodInfos = [];
4964-
$enumCaseInfos = [];
4965-
foreach ($stmt->stmts as $classStmt) {
4966-
$cond = handlePreprocessorConditions($conds, $classStmt);
4967-
if ($classStmt instanceof Stmt\Nop) {
4968-
continue;
4969-
}
4970-
4971-
$classFlags = $stmt instanceof Class_ ? $stmt->flags : 0;
4972-
$abstractFlag = $stmt instanceof Stmt\Interface_ ? Modifiers::ABSTRACT : 0;
4973-
4974-
if ($classStmt instanceof Stmt\ClassConst) {
4975-
foreach ($classStmt->consts as $const) {
4976-
$constInfos[] = parseConstLike(
4977-
$prettyPrinter,
4978-
new ClassConstName($className, $const->name->toString()),
4979-
$const,
4980-
$classStmt->flags,
4981-
$classStmt->type,
4982-
$classStmt->getComments(),
4983-
$cond,
4984-
$fileInfo->isUndocumentable,
4985-
$fileInfo->getMinimumPhpVersionIdCompatibility(),
4986-
AttributeInfo::createFromGroups($classStmt->attrGroups)
4987-
);
4988-
}
4989-
} else if ($classStmt instanceof Stmt\Property) {
4990-
if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) {
4991-
throw new Exception("Visibility modifier is required");
4992-
}
4993-
foreach ($classStmt->props as $property) {
4994-
$propertyInfos[] = parseProperty(
4995-
$className,
4996-
$classFlags,
4997-
$classStmt->flags,
4998-
$property,
4999-
$classStmt->type,
5000-
$classStmt->getComments(),
5001-
$prettyPrinter,
5002-
$fileInfo->getMinimumPhpVersionIdCompatibility(),
5003-
AttributeInfo::createFromGroups($classStmt->attrGroups)
5004-
);
5005-
}
5006-
} else if ($classStmt instanceof Stmt\ClassMethod) {
5007-
if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) {
5008-
throw new Exception("Visibility modifier is required");
5009-
}
5010-
$methodInfos[] = parseFunctionLike(
5011-
$prettyPrinter,
5012-
new MethodName($className, $classStmt->name->toString()),
5013-
$classFlags,
5014-
$classStmt->flags | $abstractFlag,
5015-
$classStmt,
5016-
$cond,
5017-
$fileInfo->isUndocumentable,
5018-
$fileInfo->getMinimumPhpVersionIdCompatibility()
5019-
);
5020-
} else if ($classStmt instanceof Stmt\EnumCase) {
5021-
$enumCaseInfos[] = new EnumCaseInfo(
5022-
$classStmt->name->toString(), $classStmt->expr);
5023-
} else {
5024-
throw new Exception("Not implemented {$classStmt->getType()}");
5025-
}
5026-
}
5027-
5028-
$fileInfo->classInfos[] = parseClass(
5029-
$className,
5030-
$stmt,
5031-
$constInfos,
5032-
$propertyInfos,
5033-
$methodInfos,
5034-
$enumCaseInfos,
5035-
$cond,
5036-
$fileInfo->getMinimumPhpVersionIdCompatibility(),
5037-
$fileInfo->isUndocumentable
5038-
);
5039-
continue;
5040-
}
5041-
5042-
if ($stmt instanceof Stmt\Expression) {
5043-
$expr = $stmt->expr;
5044-
if ($expr instanceof Expr\Include_) {
5045-
$fileInfo->dependencies[] = (string)EvaluatedValue::createFromExpression($expr->expr, null, null, [])->value;
5046-
continue;
5047-
}
5048-
}
5049-
5050-
throw new Exception("Unexpected node {$stmt->getType()}");
5051-
}
5052-
if (!empty($conds)) {
5053-
throw new Exception("Unterminated preprocessor conditions");
5054-
}
5055-
}
5056-
50575057
function parseStubFile(string $code): FileInfo {
50585058
$parser = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative());
50595059
$nodeTraverser = new PhpParser\NodeTraverser;
@@ -5070,7 +5070,7 @@ protected function pName_FullyQualified(Name\FullyQualified $node): string {
50705070
$fileTags = parseDocComments(getFileDocComments($stmts));
50715071
$fileInfo = new FileInfo($fileTags);
50725072

5073-
handleStatements($fileInfo, $stmts, $prettyPrinter);
5073+
$fileInfo->handleStatements($stmts, $prettyPrinter);
50745074
return $fileInfo;
50755075
}
50765076

0 commit comments

Comments
 (0)