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

Commit 1af216e

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

File tree

1 file changed

+17
-40
lines changed

1 file changed

+17
-40
lines changed

generator/src/FluentStageFactoryGenerator.php

Lines changed: 17 additions & 40 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,6 +56,7 @@ 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

@@ -106,6 +71,7 @@ private function createFluentFactoryClass(GeneratorDefinition $definition): PhpN
10671

10772
// Import the other methods provided by the generated trait
10873
foreach ($staticFactory->getTraits() as $trait) {
74+
$this->addUsesFrom($trait->getName(), $namespace);
10975
$staticFactory = TraitType::from($trait->getName());
11076
assert($staticFactory instanceof TraitType);
11177
foreach ($staticFactory->getMethods() as $method) {
@@ -156,4 +122,15 @@ private function addMethod(Method $factoryMethod, ClassType $class): void
156122
implode(', ', $args),
157123
));
158124
}
125+
126+
private static function addUsesFrom(string $class, PhpNamespace $namespace): void
127+
{
128+
$file = PhpFile::fromCode(file_get_contents((new ReflectionClass($class))->getFileName()));
129+
130+
foreach ($file->getNamespaces() as $ns) {
131+
foreach ($ns->getUses() as $use) {
132+
$namespace->addUse($use);
133+
}
134+
}
135+
}
159136
}

0 commit comments

Comments
 (0)