55namespace Picamator \TransferObject \DefinitionGenerator \Generator ;
66
77// phpcs:disable Generic.Files.LineLength
8- use Picamator \TransferObject \DefinitionGenerator \Builder \DefinitionBuilder ;
8+ use Picamator \TransferObject \DefinitionGenerator \Builder \DefinitionBuilderFactory ;
99use Picamator \TransferObject \DefinitionGenerator \Builder \DefinitionBuilderInterface ;
10- use Picamator \TransferObject \DefinitionGenerator \Builder \DefinitionContentBuilder ;
11- use Picamator \TransferObject \DefinitionGenerator \Builder \DefinitionContentBuilderInterface ;
12- use Picamator \TransferObject \DefinitionGenerator \Builder \Expander \BuilderExpanderInterface ;
13- use Picamator \TransferObject \DefinitionGenerator \Builder \Expander \BuildInTypeBuilderExpander ;
14- use Picamator \TransferObject \DefinitionGenerator \Builder \Expander \CollectionTypeBuilderExpander ;
15- use Picamator \TransferObject \DefinitionGenerator \Builder \Expander \TransferTypeBuilderExpander ;
1610use Picamator \TransferObject \DefinitionGenerator \Generator \Builder \DefinitionGeneratorBuilder ;
1711use Picamator \TransferObject \DefinitionGenerator \Generator \Builder \DefinitionGeneratorBuilderInterface ;
1812use Picamator \TransferObject \DefinitionGenerator \Generator \Filesystem \DefinitionFilesystem ;
@@ -37,9 +31,10 @@ class DefinitionGeneratorFactory
3731 use SharedFactoryTrait;
3832 use CachedFactoryTrait;
3933
34+ private static DefinitionBuilderFactory $ definitionBuilderFactory ;
35+
4036 public function createDefinitionGeneratorService (): DefinitionGeneratorServiceInterface
4137 {
42- /** @phpstan-ignore return.type */
4338 return $ this ->getCached (
4439 key: 'definition-generator-service ' ,
4540 factory: fn (): DefinitionGeneratorServiceInterface => new DefinitionGeneratorService (
@@ -50,7 +45,6 @@ public function createDefinitionGeneratorService(): DefinitionGeneratorServiceIn
5045
5146 public function createDefinitionGeneratorBuilder (): DefinitionGeneratorBuilderInterface
5247 {
53- /** @phpstan-ignore return.type */
5448 return $ this ->getCached (
5549 key: 'definition-generator-builder ' ,
5650 factory: fn (): DefinitionGeneratorBuilderInterface => new DefinitionGeneratorBuilder (
@@ -96,7 +90,6 @@ protected function createPreDefinitionProcessCommand(): PreDefinitionProcessComm
9690
9791 protected function createDefinitionFilesystem (): DefinitionFilesystemInterface
9892 {
99- /** @phpstan-ignore return.type */
10093 return $ this ->getCached (
10194 key: 'definition-filesystem ' ,
10295 factory: fn (): DefinitionFilesystemInterface => new DefinitionFilesystem (
@@ -108,7 +101,6 @@ protected function createDefinitionFilesystem(): DefinitionFilesystemInterface
108101
109102 protected function createDefinitionRender (): DefinitionRenderInterface
110103 {
111- /** @phpstan-ignore return.type */
112104 return $ this ->getCached (
113105 key: 'definition-render ' ,
114106 factory: fn (): DefinitionRenderInterface => new DefinitionRender ()
@@ -117,40 +109,12 @@ protected function createDefinitionRender(): DefinitionRenderInterface
117109
118110 protected function createDefinitionBuilder (): DefinitionBuilderInterface
119111 {
120- return new DefinitionBuilder (
121- $ this ->createDefinitionContentBuilder (),
122- $ this ->createBuilderExpander (),
123- );
124- }
125-
126- protected function createDefinitionContentBuilder (): DefinitionContentBuilderInterface
127- {
128- return new DefinitionContentBuilder ();
129- }
130-
131- protected function createBuilderExpander (): BuilderExpanderInterface
132- {
133- $ builderExpander = $ this ->createTransferTypeBuilderExpander ();
134-
135- $ builderExpander
136- ->setNextExpander ($ this ->createCollectionTypeBuilderExpander ())
137- ->setNextExpander ($ this ->createBuildInTypeBuilderExpander ());
138-
139- return $ builderExpander ;
140- }
141-
142- protected function createBuildInTypeBuilderExpander (): BuilderExpanderInterface
143- {
144- return new BuildInTypeBuilderExpander ();
145- }
146-
147- protected function createCollectionTypeBuilderExpander (): BuilderExpanderInterface
148- {
149- return new CollectionTypeBuilderExpander ();
112+ return $ this ->getDefinitionBuilderFactory ()
113+ ->createDefinitionBuilder ();
150114 }
151115
152- protected function createTransferTypeBuilderExpander (): BuilderExpanderInterface
116+ protected function getDefinitionBuilderFactory (): DefinitionBuilderFactory
153117 {
154- return new TransferTypeBuilderExpander ();
118+ return self :: $ definitionBuilderFactory ??= new DefinitionBuilderFactory ();
155119 }
156120}
0 commit comments