Completed
Push — master ( ac15b4...98e0ae )
by Jeroen De
38:18 queued 18:19
created

formats/tree/TreeNode.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace SRF\Formats\Tree;
4
5
use Cdb\Exception;
6
use Tree\Node\Node;
7
use Tree\Node\NodeInterface;
8
use Tree\Node\NodeTrait;
9
10
class TreeNode extends Node {
11
12
	/**
13
	 * SRFTreeElement constructor.
14
	 *
15
	 * @param \SMWResultArray[] | null $row
16 5
	 */
17 5
	public function __construct( $row = null ) {
18 5
		parent::__construct( $row );
19
	}
20
21
	/**
22
	 * @return string
23 5
	 */
24
	public function getHash() {
25 5
26
		$resultSubject = $this->getResultSubject();
27 5
28 5
		if ( $resultSubject !== null ) {
29
			return $resultSubject->getSerialization();
30
		}
31 5
32
		return '';
33
	}
34
35
	/**
36
	 * @return null|\SMWDIWikiPage
37 5
	 */
38
	public function getResultSubject() {
39 5
		/** @var \SMWResultArray[] | null $row */
40
		$row = $this->getValue();
41 5
42 5
		if ( $row !== null ) {
43
			return $row[0]->getResultSubject();
44
		}
45 5
46
		return null;
47
	}
48
49
	/**
50
	 * @param NodeInterface $child
51
	 *
52
	 * @return NodeTrait
0 ignored issues
show
Comprehensibility Bug introduced by
The return type NodeTrait is a trait, and thus cannot be used for type-hinting in PHP. Maybe consider adding an interface and use that for type-hinting?

In PHP traits cannot be used for type-hinting as they do not define a well-defined structure. This is because any class that uses a trait can rename that trait’s methods.

If you would like to return an object that has a guaranteed set of methods, you could create a companion interface that lists these methods explicitly.

Loading history...
53 5
	 * @throws Exception
54
	 */
55 5
	public function addChild( NodeInterface $child ) {
56 5
57 5
		foreach ( $this->getAncestorsAndSelf() as $ancestor ) {
58
			if ( $ancestor->getHash() === $child->getHash() ) {
59
				throw new Exception( 'srf-tree-circledetected' );
60
			}
61 5
		}
62
63
		return parent::addChild( $child );
64
	}
65
66
}
67
68