Skip to content

Commit 493145f

Browse files
committed
Printer: uses single instance for printing methods, classes, namespaces
1 parent 71d6806 commit 493145f

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

src/PhpGenerator/Printer.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ public function printClass(ClassType $class, PhpNamespace $namespace = null): st
9797
. ';';
9898
}
9999

100+
$methods = [];
101+
foreach ($class->getMethods() as $method) {
102+
$methods[] = $this->printMethod($method, $namespace);
103+
}
104+
100105
return Strings::normalize(
101106
Helpers::formatDocComment($class->getComment() . "\n")
102107
. ($class->isAbstract() ? 'abstract ' : '')
@@ -109,7 +114,7 @@ public function printClass(ClassType $class, PhpNamespace $namespace = null): st
109114
($traits ? implode("\n", $traits) . "\n\n" : '')
110115
. ($consts ? implode("\n", $consts) . "\n\n" : '')
111116
. ($properties ? implode("\n\n", $properties) . "\n\n\n" : '')
112-
. ($class->getMethods() ? implode("\n\n\n", $class->getMethods()) . "\n" : ''))
117+
. ($methods ? implode("\n\n\n", $methods) . "\n" : ''))
113118
. '}'
114119
) . ($class->getName() ? "\n" : '');
115120
}
@@ -132,8 +137,13 @@ public function printNamespace(PhpNamespace $namespace): string
132137
}
133138
}
134139

140+
$classes = [];
141+
foreach ($namespace->getClasses() as $class) {
142+
$classes[] = $this->printClass($class, $namespace);
143+
}
144+
135145
$body = ($uses ? implode("\n", $uses) . "\n\n" : '')
136-
. implode("\n", $namespace->getClasses());
146+
. implode("\n", $classes);
137147

138148
if ($namespace->getBracketedSyntax()) {
139149
return 'namespace' . ($name ? " $name" : '') . " {\n\n"
@@ -149,10 +159,15 @@ public function printNamespace(PhpNamespace $namespace): string
149159

150160
public function printFile(PhpFile $file): string
151161
{
162+
$namespaces = [];
163+
foreach ($file->getNamespaces() as $namespace) {
164+
$namespaces[] = $this->printNamespace($namespace);
165+
}
166+
152167
return Strings::normalize(
153168
"<?php\n"
154169
. ($file->getComment() ? "\n" . Helpers::formatDocComment($file->getComment() . "\n") . "\n" : '')
155-
. implode("\n\n", $file->getNamespaces())
170+
. implode("\n\n", $namespaces)
156171
) . "\n";
157172
}
158173

tests/PhpGenerator/Printer.namespace.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ $class->addMethod('first')
3333

3434
sameFile(__DIR__ . '/expected/Printer.namespace.expect', $printer->printNamespace($namespace));
3535
sameFile(__DIR__ . '/expected/Printer.namespace.class.expect', $printer->printClass($class, $namespace));
36+
sameFile(__DIR__ . '/expected/Printer.namespace.class2.expect', $printer->printClass($class));
3637
sameFile(__DIR__ . '/expected/Printer.namespace.method.expect', $printer->printMethod($class->getMethod('first')));
3738

3839

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Description of class.
3+
* This is example
4+
*/
5+
final class A extends ParentClass implements IExample, Foo\IOne
6+
{
7+
use Foo\ObjectTrait;
8+
9+
/**
10+
* @return resource
11+
*/
12+
final public function first(Bar\C $var): stdClass
13+
{
14+
return $this->handle;
15+
}
16+
}

0 commit comments

Comments
 (0)