Skip to content
This repository was archived by the owner on Feb 28, 2025. It is now read-only.

Commit 7f8a396

Browse files
committed
Import use statements from PHP files
1 parent 6efa8bd commit 7f8a396

File tree

1 file changed

+17
-44
lines changed

1 file changed

+17
-44
lines changed

generator/src/FluentStageFactoryGenerator.php

Lines changed: 17 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,22 @@
44

55
namespace MongoDB\CodeGenerator;
66

7-
use MongoDB\BSON\Decimal128;
8-
use MongoDB\BSON\Document;
9-
use MongoDB\BSON\Int64;
10-
use MongoDB\BSON\PackedArray;
11-
use MongoDB\BSON\Serializable;
12-
use MongoDB\BSON\Timestamp;
13-
use MongoDB\BSON\Type;
14-
use MongoDB\Builder\Expression\ArrayFieldPath;
15-
use MongoDB\Builder\Expression\FieldPath;
16-
use MongoDB\Builder\Expression\ResolvesToArray;
17-
use MongoDB\Builder\Expression\ResolvesToObject;
187
use MongoDB\Builder\Pipeline;
198
use MongoDB\Builder\Stage;
20-
use MongoDB\Builder\Type\AccumulatorInterface;
21-
use MongoDB\Builder\Type\ExpressionInterface;
22-
use MongoDB\Builder\Type\FieldQueryInterface;
23-
use MongoDB\Builder\Type\Optional;
24-
use MongoDB\Builder\Type\QueryInterface;
25-
use MongoDB\Builder\Type\Sort;
269
use MongoDB\Builder\Type\StageInterface;
2710
use MongoDB\CodeGenerator\Definition\GeneratorDefinition;
28-
use MongoDB\Model\BSONArray;
2911
use Nette\PhpGenerator\ClassType;
3012
use Nette\PhpGenerator\Method;
3113
use Nette\PhpGenerator\Parameter;
14+
use Nette\PhpGenerator\PhpFile;
3215
use Nette\PhpGenerator\PhpNamespace;
3316
use Nette\PhpGenerator\TraitType;
3417
use ReflectionClass;
35-
use stdClass;
3618

3719
use function array_key_last;
3820
use function array_map;
3921
use function assert;
22+
use function file_get_contents;
4023
use function implode;
4124
use function sprintf;
4225

@@ -59,29 +42,10 @@ private function createFluentFactoryClass(GeneratorDefinition $definition): PhpN
5942
$namespace = new PhpNamespace($definition->namespace);
6043
$class = $namespace->addClass('FluentFactory');
6144

45+
$namespace->addUse(self::FACTORY_CLASS);
6246
$namespace->addUse(StageInterface::class);
63-
$namespace->addUse(FieldQueryInterface::class);
64-
$namespace->addUse(Pipeline::class);
65-
$namespace->addUse(Decimal128::class);
66-
$namespace->addUse(Document::class);
67-
$namespace->addUse(Int64::class);
68-
$namespace->addUse(PackedArray::class);
69-
$namespace->addUse(Serializable::class);
70-
$namespace->addUse(Timestamp::class);
71-
$namespace->addUse(Type::class);
72-
$namespace->addUse(ArrayFieldPath::class);
73-
$namespace->addUse(FieldPath::class);
74-
$namespace->addUse(ResolvesToArray::class);
75-
$namespace->addUse(ResolvesToObject::class);
7647
$namespace->addUse(Pipeline::class);
77-
$namespace->addUse(AccumulatorInterface::class);
78-
$namespace->addUse(ExpressionInterface::class);
79-
$namespace->addUse(Optional::class);
80-
$namespace->addUse(QueryInterface::class);
81-
$namespace->addUse(Sort::class);
82-
$namespace->addUse(BSONArray::class);
83-
$namespace->addUse(stdClass::class);
84-
$namespace->addUse(self::FACTORY_CLASS);
48+
8549
$class->addProperty('pipeline')
8650
->setType('array')
8751
->setComment('@var list<StageInterface>')
@@ -92,20 +56,18 @@ private function createFluentFactoryClass(GeneratorDefinition $definition): PhpN
9256
return new Pipeline(...$this->pipeline);
9357
PHP);
9458

59+
$this->addUsesFrom(self::FACTORY_CLASS, $namespace);
9560
$staticFactory = ClassType::from(self::FACTORY_CLASS);
9661
assert($staticFactory instanceof ClassType);
9762

9863
// Import the methods customized in the factory class
9964
foreach ($staticFactory->getMethods() as $method) {
100-
if (! $method->isPublic()) {
101-
continue;
102-
}
103-
10465
$this->addMethod($method, $class);
10566
}
10667

10768
// Import the other methods provided by the generated trait
10869
foreach ($staticFactory->getTraits() as $trait) {
70+
$this->addUsesFrom($trait->getName(), $namespace);
10971
$staticFactory = TraitType::from($trait->getName());
11072
assert($staticFactory instanceof TraitType);
11173
foreach ($staticFactory->getMethods() as $method) {
@@ -156,4 +118,15 @@ private function addMethod(Method $factoryMethod, ClassType $class): void
156118
implode(', ', $args),
157119
));
158120
}
121+
122+
private static function addUsesFrom(string $class, PhpNamespace $namespace): void
123+
{
124+
$file = PhpFile::fromCode(file_get_contents((new ReflectionClass($class))->getFileName()));
125+
126+
foreach ($file->getNamespaces() as $ns) {
127+
foreach ($ns->getUses() as $use) {
128+
$namespace->addUse($use);
129+
}
130+
}
131+
}
159132
}

0 commit comments

Comments
 (0)