Skip to content

Commit d19578b

Browse files
authored
Merge pull request #259 from php-java/allows-to-use-declare-statement
Allows to use declare statement
2 parents 70165c6 + 4a5696e commit d19578b

File tree

9 files changed

+74
-28
lines changed

9 files changed

+74
-28
lines changed

src/Compiler/Lang/Assembler/AbstractAssembler.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PHPJava\Compiler\Lang\Assembler\Traits\ClassAssemblerManageable;
77
use PHPJava\Compiler\Lang\Assembler\Traits\CollectionManageable;
88
use PHPJava\Compiler\Lang\Assembler\Traits\ConstantPoolManageable;
9+
use PHPJava\Compiler\Lang\Assembler\Traits\DeclareManageable;
910
use PHPJava\Compiler\Lang\Assembler\Traits\Enhancer\Operation\NamespaceManageable;
1011
use PHPJava\Compiler\Lang\Assembler\Traits\EntryPointClassAssemblerManageable;
1112
use PHPJava\Compiler\Lang\Assembler\Traits\ImportManageable;
@@ -27,6 +28,7 @@ abstract class AbstractAssembler implements AssemblerInterface, ParameterService
2728
use EntryPointClassAssemblerManageable;
2829
use StructureAccessorsLocatorManageable;
2930
use ImportManageable;
31+
use DeclareManageable;
3032

3133
/**
3234
* @var Node

src/Compiler/Lang/Assembler/EntryPointClassAssembler.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use PHPJava\Compiler\Lang\Assembler\Traits\ClassAssemblerManageable;
2323
use PHPJava\Compiler\Lang\Assembler\Traits\CollectionManageable;
2424
use PHPJava\Compiler\Lang\Assembler\Traits\ConstantPoolManageable;
25+
use PHPJava\Compiler\Lang\Assembler\Traits\DeclareManageable;
2526
use PHPJava\Compiler\Lang\Assembler\Traits\Enhancer\ConstantPoolEnhanceable;
2627
use PHPJava\Compiler\Lang\Assembler\Traits\Enhancer\Operation\NamespaceManageable;
2728
use PHPJava\Compiler\Lang\Assembler\Traits\ImportManageable;
@@ -53,6 +54,7 @@ class EntryPointClassAssembler implements AssemblerInterface, ParameterServiceIn
5354
use StaticInitializerAssignable;
5455
use StructureAccessorsLocatorManageable;
5556
use ImportManageable;
57+
use DeclareManageable;
5658

5759
/**
5860
* @var Methods

src/Compiler/Lang/Assembler/ParameterServiceInterface.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPJava\Compiler\Builder\Finder\ConstantPoolFinder;
88
use PHPJava\Compiler\Lang\Assembler\Processors\AbstractProcessor;
99
use PHPJava\Compiler\Lang\Assembler\Store\Store;
10+
use PHPJava\Compiler\Lang\Assembler\Structure\Accessor\Declares;
1011
use PHPJava\Compiler\Lang\Assembler\Structure\Accessor\Imports;
1112
use PHPJava\Compiler\Lang\Assembler\Structure\Accessor\StructureAccessorsLocator;
1213

@@ -27,7 +28,9 @@
2728
* @method ClassAssembler getClassAssembler()
2829
* @method StructureAccessorsLocator getStructureAccessorsLocator()
2930
* @method Imports getImportsAccessor()
31+
* @method Declares getDeclaresAccessor()
3032
* @method AbstractAssembler|AbstractProcessor setImportsAccessor(Imports $importsAccessor)
33+
* @method AbstractAssembler|AbstractProcessor setDeclaresAccessor(Declares $declaresAccessor)
3134
* @emthod EntryPointClassAssembler getEntryPointClassAssembler()
3235
* @emthod AbstractAssembler|AbstractProcessor setEntryPointClassAssembler(EntryPointClassAssembler $entryPointClassAssembler)
3336
*/

src/Compiler/Lang/Assembler/Processors/AbstractProcessor.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PHPJava\Compiler\Lang\Assembler\Traits\Bindable;
1010
use PHPJava\Compiler\Lang\Assembler\Traits\ClassAssemblerManageable;
1111
use PHPJava\Compiler\Lang\Assembler\Traits\ConstantPoolManageable;
12+
use PHPJava\Compiler\Lang\Assembler\Traits\DeclareManageable;
1213
use PHPJava\Compiler\Lang\Assembler\Traits\Enhancer\ConstantPoolEnhanceable;
1314
use PHPJava\Compiler\Lang\Assembler\Traits\Enhancer\Operation\NamespaceManageable;
1415
use PHPJava\Compiler\Lang\Assembler\Traits\EntryPointClassAssemblerManageable;
@@ -38,6 +39,7 @@ abstract class AbstractProcessor implements ProcessorInterface, ParameterService
3839
use EntryPointClassAssemblerManageable;
3940
use StructureAccessorsLocatorManageable;
4041
use ImportManageable;
42+
use DeclareManageable;
4143

4244
public static function factory(): self
4345
{

src/Compiler/Lang/Assembler/Processors/StatementProcessor.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use PHPJava\Compiler\Lang\Assembler\Statements\ExpressionStatementAssembler;
1313
use PHPJava\Compiler\Lang\Assembler\Statements\ForStatementAssembler;
1414
use PHPJava\Compiler\Lang\Assembler\Statements\IfStatementAssembler;
15+
use PHPJava\Compiler\Lang\Assembler\Structure\Accessor\Declares;
1516
use PHPJava\Compiler\Lang\Assembler\Structure\Accessor\Imports;
1617
use PHPJava\Compiler\Lang\Assembler\Traits\Bindable;
1718
use 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;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
declare(strict_types=1);
3+
namespace PHPJava\Compiler\Lang\Assembler\Structure\Accessor;
4+
5+
class Declares extends AbstractAccessor implements AccessorInterface
6+
{
7+
}

src/Compiler/Lang/Assembler/Traits/Bindable.php

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,14 @@ trait Bindable
2929
protected function bindParameters(ParameterServiceInterface $from): ParameterServiceInterface
3030
{
3131
return $from
32-
->setNamespace(
33-
$this->getNamespace()
34-
)
35-
->setConstantPool(
36-
$this->getConstantPool()
37-
)
38-
->setConstantPoolFinder(
39-
$this->getConstantPoolFinder()
40-
)
41-
->setOperation(
42-
$this->getOperation()
43-
)
44-
->setStreamReader(
45-
$this->getStreamReader()
46-
)
47-
->setStructureAccessorsLocator(
48-
$this->getStructureAccessorsLocator()
49-
)
50-
->setImportsAccessor(
51-
$this->getImportsAccessor()
52-
)
32+
->setNamespace($this->getNamespace())
33+
->setConstantPool($this->getConstantPool())
34+
->setConstantPoolFinder($this->getConstantPoolFinder())
35+
->setOperation($this->getOperation())
36+
->setStreamReader($this->getStreamReader())
37+
->setStructureAccessorsLocator($this->getStructureAccessorsLocator())
38+
->setImportsAccessor($this->getImportsAccessor())
39+
->setDeclaresAccessor($this->getDeclaresAccessor())
5340
->setClassAssembler(
5441
$this instanceof ClassAssembler
5542
? $this
@@ -60,11 +47,7 @@ protected function bindParameters(ParameterServiceInterface $from): ParameterSer
6047
? $this
6148
: $this->getMethodAssembler()
6249
)
63-
->setStore(
64-
$this->getStore()
65-
)
66-
->setEntryPointClassAssembler(
67-
$this->getEntryPointClassAssembler()
68-
);
50+
->setStore($this->getStore())
51+
->setEntryPointClassAssembler($this->getEntryPointClassAssembler());
6952
}
7053
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
declare(strict_types=1);
3+
namespace PHPJava\Compiler\Lang\Assembler\Traits;
4+
5+
use PHPJava\Compiler\Builder\Attributes\Architects\Operation;
6+
use PHPJava\Compiler\Builder\Finder\ConstantPoolFinder;
7+
use PHPJava\Compiler\Lang\Assembler\Enhancer\ConstantPoolEnhancer;
8+
use PHPJava\Compiler\Lang\Assembler\Structure\Accessor\Declares;
9+
10+
/**
11+
* @method Operation getOperation()
12+
* @method ConstantPoolEnhancer getEnhancedConstantPool()
13+
* @method ConstantPoolFinder getConstantPoolFinder()
14+
*/
15+
trait DeclareManageable
16+
{
17+
/**
18+
* @var Declares
19+
*/
20+
protected $declaresAccessor;
21+
22+
public function setDeclaresAccessor(?Declares $declaresAccessor): self
23+
{
24+
$this->declaresAccessor = $declaresAccessor;
25+
return $this;
26+
}
27+
28+
public function getDeclaresAccessor(): ?Declares
29+
{
30+
return $this->declaresAccessor;
31+
}
32+
}

src/Compiler/Lang/Assembler/Traits/NodeExtractable.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ protected function filterExtractingNodes(array &$nodes, int $extractType): void
2121
{
2222
foreach ($nodes as $key => $node) {
2323
switch (get_class($node)) {
24-
case \PhpParser\Node\Stmt\Declare_::class:
2524
case \PhpParser\Node\Stmt\Namespace_::class:
2625
$this->filterExtractingNodes($node->stmts, $extractType);
2726
break;
27+
case \PhpParser\Node\Stmt\Declare_::class:
2828
case \PhpParser\Node\Stmt\Use_::class:
2929
case \PhpParser\Node\Stmt\Class_::class:
3030
if ($extractType !== NodeExtractorEnum::EXTRACT_MODULES) {

0 commit comments

Comments
 (0)