DispatchingSimplifier   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
c 1
b 0
f 0
lcom 1
cbo 2
dl 0
loc 50
ccs 21
cts 21
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A isSimplifierFor() 0 9 3
A simplify() 0 8 2
A doDispatchedSimplification() 0 9 3
1
<?php
2
3
namespace PPP\Module\TreeSimplifier;
4
5
use PPP\DataModel\AbstractNode;
6
7
/**
8
 * Runs NodeSimplifiers as much as possible on the tree.
9
 *
10
 * @licence MIT
11
 * @author Thomas Pellissier Tanon
12
 */
13
class DispatchingSimplifier implements NodeSimplifier {
14
15
	/**
16
	 * @var NodeSimplifier[]
17
	 */
18
	private $simplifiers;
19
20
	/**
21
	 * @param NodeSimplifier[] $simplifiers
22
	 */
23 4
	public function __construct(array $simplifiers = array()) {
24 4
		$this->simplifiers = $simplifiers;
25 4
	}
26
27
	/**
28
	 * @see NodeSimplifier::sSimplifierFor
29
	 */
30 2
	public function isSimplifierFor(AbstractNode $node) {
31 2
		foreach($this->simplifiers as $simplifier) {
32 2
			if($simplifier->isSimplifierFor($node)) {
33 1
				return true;
34
			}
35 1
		}
36
37 1
		return false;
38
	}
39
40
	/**
41
	 * @param AbstractNode $node
42
	 * @return AbstractNode
43
	 */
44 1
	public function simplify(AbstractNode $node) {
45
		do {
46 1
			$oldNode = $node;
47 1
			$node = $this->doDispatchedSimplification($node);
48 1
		} while(!$oldNode->equals($node));
49
50 1
		return $node;
51
	}
52
53 1
	private function doDispatchedSimplification(AbstractNode $node) {
54 1
		foreach($this->simplifiers as $simplifier) {
55 1
			if($simplifier->isSimplifierFor($node)) {
56 1
				$node = $simplifier->simplify($node);
57 1
			}
58 1
		}
59
60 1
		return $node;
61
	}
62
}
63