1212use PHPJava \Compiler \Lang \Assembler \Statements \ExpressionStatementAssembler ;
1313use PHPJava \Compiler \Lang \Assembler \Statements \ForStatementAssembler ;
1414use PHPJava \Compiler \Lang \Assembler \Statements \IfStatementAssembler ;
15+ use PHPJava \Compiler \Lang \Assembler \Structure \Accessor \Declares ;
1516use PHPJava \Compiler \Lang \Assembler \Structure \Accessor \Imports ;
1617use PHPJava \Compiler \Lang \Assembler \Traits \Bindable ;
1718use PHPJava \Compiler \Lang \Assembler \Traits \NodeExtractable ;
@@ -27,6 +28,7 @@ class StatementProcessor extends AbstractProcessor
2728 use NodeExtractable;
2829
2930 protected $ imports = [];
31+ protected $ declares = [];
3032
3133 /**
3234 * @param Node[] $nodes
@@ -51,10 +53,13 @@ public function execute(array $nodes, ?callable $callback = null): array
5153 $ entryPointConstantPool
5254 );
5355
56+ $ declares = $ this ->getDeclaresAccessor () ?? new Declares ($ this ->declares );
57+
5458 $ entryPointClassAssembler = EntryPointClassAssembler::factory (...$ this ->extractNodes ($ statement ->stmts , NodeExtractorEnum::EXTRACT_OUTSIDES ))
5559 ->setNamespace ($ statement ->name ->parts )
5660 ->setConstantPool ($ entryPointConstantPool )
5761 ->setConstantPoolFinder ($ entryPointConstantPoolFinder )
62+ ->setDeclaresAccessor ($ declares )
5863 ->setStructureAccessorsLocator ($ this ->getStructureAccessorsLocator ())
5964 ->setStreamReader ($ this ->getStreamReader ());
6065
@@ -63,6 +68,7 @@ public function execute(array $nodes, ?callable $callback = null): array
6368 ->setConstantPool ($ entryPointConstantPool )
6469 ->setConstantPoolFinder ($ entryPointConstantPoolFinder )
6570 ->setStreamReader ($ this ->getStreamReader ())
71+ ->setDeclaresAccessor ($ declares )
6672 ->setEntryPointClassAssembler ($ entryPointClassAssembler )
6773 ->setStructureAccessorsLocator ($ this ->getStructureAccessorsLocator ())
6874 ->execute ($ statement ->stmts );
@@ -75,15 +81,24 @@ public function execute(array $nodes, ?callable $callback = null): array
7581 * @var \PhpParser\Node\Stmt\Use_ $statement
7682 */
7783 $ this ->imports [] = $ statement ;
84+ // no break
85+ case \PhpParser \Node \Stmt \Declare_::class:
86+ /**
87+ * @var \PhpParser\Node\Stmt\Declare_ $statement
88+ */
89+ $ this ->declares [] = $ statement ;
7890 break ;
7991 case \PhpParser \Node \Stmt \Class_::class:
8092 /**
8193 * @var \PhpParser\Node\Stmt\Class_ $statement
8294 */
95+ $ declares = $ this ->getDeclaresAccessor () ?? new Declares ($ this ->declares );
96+
8397 ClassAssembler::factory ($ statement )
8498 ->setStreamReader ($ this ->getStreamReader ())
8599 ->setNamespace ($ this ->getNamespace ())
86100 ->setStructureAccessorsLocator ($ this ->getStructureAccessorsLocator ())
101+ ->setDeclaresAccessor ($ declares )
87102 ->setImportsAccessor ($ this ->getImportsAccessor () ?? new Imports ($ this ->imports ))
88103 ->assemble ();
89104 break ;
0 commit comments