Skip to content

Commit 408cb36

Browse files
committed
Compiler: added list of all dependencies
1 parent b0fd657 commit 408cb36

File tree

4 files changed

+60
-4
lines changed

4 files changed

+60
-4
lines changed

src/DI/Compiler.php

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class Compiler extends Nette\Object
2727
/** @var array */
2828
private $config;
2929

30+
/** @var string[] of file names */
31+
private $dependencies = array();
32+
3033
/** @var array reserved section names */
3134
private static $reserved = array('services' => 1, 'parameters' => 1);
3235

@@ -81,6 +84,27 @@ public function getConfig()
8184
}
8285

8386

87+
/**
88+
* Adds a files to the list of dependencies.
89+
* @return self
90+
*/
91+
public function addDependencies(array $files)
92+
{
93+
$this->dependencies = array_merge($this->dependencies, $files);
94+
return $this;
95+
}
96+
97+
98+
/**
99+
* Returns the unique list of dependent files.
100+
* @return array
101+
*/
102+
public function getDependencies()
103+
{
104+
return array_values(array_unique(array_filter($this->dependencies)));
105+
}
106+
107+
84108
/**
85109
* @return string
86110
*/
@@ -155,11 +179,12 @@ public function generateCode($className, $parentName = NULL)
155179
foreach ($this->extensions as $extension) {
156180
$extension->beforeCompile();
157181
$rc = new \ReflectionClass($extension);
158-
$this->builder->addDependency($rc->getFileName());
182+
$this->dependencies[] = $rc->getFileName();
159183
}
160184

161185
$classes = $this->builder->generateClasses($className, $parentName);
162186
$classes[0]->addMethod('initialize');
187+
$this->addDependencies($this->builder->getDependencies());
163188

164189
foreach ($this->extensions as $extension) {
165190
$extension->afterCompile($classes[0]);

src/DI/CompilerExtension.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,7 @@ public function loadFromFile($file)
9292
{
9393
$loader = new Config\Loader;
9494
$res = $loader->load($file);
95-
foreach ($loader->getDependencies() as $file) {
96-
$this->getContainerBuilder()->addDependency($file);
97-
}
95+
$this->compiler->addDependencies($loader->getDependencies());
9896
return $res;
9997
}
10098

src/DI/ContainerBuilder.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,7 @@ public function addExcludedClasses(array $classes)
480480
/**
481481
* Adds a file to the list of dependencies.
482482
* @return self
483+
* @internal
483484
*/
484485
public function addDependency($file)
485486
{
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\DI\Compiler and dependencies.
5+
*/
6+
7+
use Nette\DI,
8+
Tester\Assert;
9+
10+
11+
require __DIR__ . '/../bootstrap.php';
12+
13+
$compiler = new DI\Compiler;
14+
15+
Assert::same(
16+
array(),
17+
$compiler->getDependencies()
18+
);
19+
20+
$compiler->addDependencies(array('file1', 'file2'));
21+
22+
Assert::same(
23+
array('file1', 'file2'),
24+
$compiler->getDependencies()
25+
);
26+
27+
$compiler->addDependencies(array('file1', NULL, 'file3'));
28+
29+
Assert::same(
30+
array('file1', 'file2', 'file3'),
31+
$compiler->getDependencies()
32+
);

0 commit comments

Comments
 (0)