Skip to content

Commit eaf8565

Browse files
authored
Merge pull request #185 from TomHAnderson/feature/lazy-ghosts
Feature/lazy ghosts
2 parents 47d98c8 + 0d0d9b0 commit eaf8565

File tree

6 files changed

+89
-61
lines changed

6 files changed

+89
-61
lines changed

.github/workflows/coding-standards.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ on:
1313
inputs:
1414
php-version:
1515
description: "The PHP version to use when running the job"
16-
default: "8.3"
16+
default: "8.4"
1717
required: false
1818
type: "string"
1919
composer-root-version:

.github/workflows/continuous-integration.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ jobs:
1919
fail-fast: false
2020
matrix:
2121
php-version:
22-
- "8.3"
2322
- "8.4"
23+
- "8.5"
2424
dependencies:
2525
- "highest"
2626
- "lowest"

.github/workflows/static-analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
steps:
1919
- uses: shivammathur/setup-php@v2
2020
with:
21-
php-version: '8.3'
21+
php-version: '8.4'
2222

2323
- uses: actions/checkout@v2
2424

composer.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,22 @@
1010
}
1111
],
1212
"require": {
13-
"php": "^8.3",
14-
"doctrine/orm": "^3.0",
15-
"doctrine/doctrine-laminas-hydrator": "^3.2",
16-
"webonyx/graphql-php": "^v15.0",
13+
"php": "^8.4",
14+
"doctrine/orm": "^3.6",
15+
"doctrine/doctrine-laminas-hydrator": "^3.7",
16+
"webonyx/graphql-php": "^v15.29",
1717
"psr/container": "^2.0",
18-
"league/event": "^3.0"
18+
"league/event": "^3.0",
19+
"symfony/var-exporter": "^6.4||^7"
1920
},
2021
"require-dev": {
2122
"doctrine/coding-standard": "^14.0",
22-
"doctrine/dbal": "^3.1 || ^4.0",
23+
"doctrine/dbal": "^4.0",
2324
"phpunit/phpunit": "^12.0",
24-
"vimeo/psalm": "^6.13",
25-
"symfony/cache": "^5.3||^6.2",
25+
"vimeo/psalm": "^6.14",
26+
"symfony/cache": "^7.0",
2627
"php-parallel-lint/php-parallel-lint": "^1.3.2",
27-
"phpstan/phpstan": "^1.12 || ^2.0"
28+
"phpstan/phpstan": "^2.1"
2829
},
2930
"suggest": {
3031
"ramsey/uuid-doctrine": "Support for an UUID Doctrine type"

src/Services.php

Lines changed: 75 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use ArrayObject;
1010
use Doctrine\ORM\EntityManager;
1111
use League\Event\EventDispatcher;
12+
use ReflectionClass;
1213

1314
/**
1415
* This trait is used to remove complexity from the Driver class.
@@ -41,7 +42,12 @@ static function () use ($config) {
4142
->set(Type\TypeContainer::class, static fn () => new Type\TypeContainer())
4243
->set(
4344
Type\Entity\EntityTypeContainer::class,
44-
static fn (Container $container) => new Type\Entity\EntityTypeContainer($container),
45+
static function (Container $container): Type\Entity\EntityTypeContainer {
46+
return (new ReflectionClass(Type\Entity\EntityTypeContainer::class))
47+
->newLazyGhost(static function (Type\Entity\EntityTypeContainer $object) use ($container): void {
48+
$object->__construct($container);
49+
});
50+
},
4551
)
4652
->set(
4753
'metadata',
@@ -57,77 +63,98 @@ static function (Container $container) use ($metadata) {
5763
)
5864
->set(
5965
Metadata\GlobalEnable::class,
60-
static function (Container $container) {
61-
return new Metadata\GlobalEnable(
62-
$container->get(EntityManager::class),
63-
$container->get(Config::class),
64-
$container->get(EventDispatcher::class),
65-
);
66+
static function (Container $container): Metadata\GlobalEnable {
67+
return (new ReflectionClass(Metadata\GlobalEnable::class))
68+
->newLazyGhost(static function (Metadata\GlobalEnable $object) use ($container): void {
69+
$object->__construct(
70+
$container->get(EntityManager::class),
71+
$container->get(Config::class),
72+
$container->get(EventDispatcher::class),
73+
);
74+
});
6675
},
6776
)
6877
->set(
6978
Resolve\FieldResolver::class,
70-
static function (Container $container) {
71-
return new Resolve\FieldResolver(
72-
$container->get(Config::class),
73-
$container->get(Type\Entity\EntityTypeContainer::class),
74-
);
79+
static function (Container $container): Resolve\FieldResolver {
80+
return (new ReflectionClass(Resolve\FieldResolver::class))
81+
->newLazyGhost(static function (Resolve\FieldResolver $object) use ($container): void {
82+
$object->__construct(
83+
$container->get(Config::class),
84+
$container->get(Type\Entity\EntityTypeContainer::class),
85+
);
86+
});
7587
},
7688
)
7789
->set(
7890
Resolve\ResolveCollectionFactory::class,
79-
static function (Container $container) {
80-
return new Resolve\ResolveCollectionFactory(
81-
$container->get(EntityManager::class),
82-
$container->get(Config::class),
83-
$container->get(Resolve\FieldResolver::class),
84-
$container->get(Type\TypeContainer::class),
85-
$container->get(EntityTypeContainer::class),
86-
$container->get(EventDispatcher::class),
87-
$container->get('metadata'),
88-
);
91+
static function (Container $container): Resolve\ResolveCollectionFactory {
92+
return (new ReflectionClass(Resolve\ResolveCollectionFactory::class))
93+
->newLazyGhost(static function (Resolve\ResolveCollectionFactory $object) use ($container): void {
94+
$object->__construct(
95+
$container->get(EntityManager::class),
96+
$container->get(Config::class),
97+
$container->get(Resolve\FieldResolver::class),
98+
$container->get(Type\TypeContainer::class),
99+
$container->get(EntityTypeContainer::class),
100+
$container->get(EventDispatcher::class),
101+
$container->get('metadata'),
102+
);
103+
});
89104
},
90105
)
91106
->set(
92107
Resolve\ResolveEntityFactory::class,
93-
static function (Container $container) {
94-
return new Resolve\ResolveEntityFactory(
95-
$container->get(Config::class),
96-
$container->get(EntityManager::class),
97-
$container->get(EventDispatcher::class),
98-
$container->get('metadata'),
99-
);
108+
static function (Container $container): Resolve\ResolveEntityFactory {
109+
return (new ReflectionClass(Resolve\ResolveEntityFactory::class))
110+
->newLazyGhost(static function (Resolve\ResolveEntityFactory $object) use ($container): void {
111+
$object->__construct(
112+
$container->get(Config::class),
113+
$container->get(EntityManager::class),
114+
$container->get(EventDispatcher::class),
115+
$container->get('metadata'),
116+
);
117+
});
100118
},
101119
)
102120
->set(
103121
Filter\FilterFactory::class,
104-
static function (Container $container) {
105-
return new Filter\FilterFactory(
106-
$container->get(Config::class),
107-
$container->get(EntityManager::class),
108-
$container->get(Type\TypeContainer::class),
109-
$container->get(EventDispatcher::class),
110-
);
122+
static function (Container $container): Filter\FilterFactory {
123+
return (new ReflectionClass(Filter\FilterFactory::class))
124+
->newLazyGhost(static function (Filter\FilterFactory $object) use ($container): void {
125+
$object->__construct(
126+
$container->get(Config::class),
127+
$container->get(EntityManager::class),
128+
$container->get(Type\TypeContainer::class),
129+
$container->get(EventDispatcher::class),
130+
);
131+
});
111132
},
112133
)
113134
->set(
114135
Hydrator\HydratorContainer::class,
115-
static function (Container $container) {
116-
return new Hydrator\HydratorContainer(
117-
$container->get(EntityManager::class),
118-
$container->get(Type\Entity\EntityTypeContainer::class),
119-
);
136+
static function (Container $container): Hydrator\HydratorContainer {
137+
return (new ReflectionClass(Hydrator\HydratorContainer::class))
138+
->newLazyGhost(static function (Hydrator\HydratorContainer $object) use ($container): void {
139+
$object->__construct(
140+
$container->get(EntityManager::class),
141+
$container->get(Type\Entity\EntityTypeContainer::class),
142+
);
143+
});
120144
},
121145
)
122146
->set(
123147
Input\InputFactory::class,
124-
static function (Container $container) {
125-
return new Input\InputFactory(
126-
$container->get(Config::class),
127-
$container->get(EntityManager::class),
128-
$container->get(Type\Entity\EntityTypeContainer::class),
129-
$container->get(Type\TypeContainer::class),
130-
);
148+
static function (Container $container): Input\InputFactory {
149+
return (new ReflectionClass(Input\InputFactory::class))
150+
->newLazyGhost(static function (Input\InputFactory $object) use ($container): void {
151+
$object->__construct(
152+
$container->get(Config::class),
153+
$container->get(EntityManager::class),
154+
$container->get(Type\Entity\EntityTypeContainer::class),
155+
$container->get(Type\TypeContainer::class),
156+
);
157+
});
131158
},
132159
);
133160
}

test/Feature/Type/JsonTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function testSerializeFails(): void
6060
$this->expectException(Error::class);
6161

6262
$jsonType = new Json();
63-
$jsonType->serialize(["name" => "\xB1\x31"]);
63+
$jsonType->serialize(['name' => "\xB1\x31"]);
6464
}
6565

6666
public function testContains(): void

0 commit comments

Comments
 (0)