Completed
Push — master ( 21ccfa...6f5178 )
by Mark A.
08:49
created

DispatchingPropertyAnnotator.php (1 issue)

assigning incompatible types to properties.

Bug Documentation Major

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 SESP\PropertyAnnotators;
4
5
use SMW\DIProperty;
6
use SMW\DIWikiPage;
7
use SMW\SemanticData;
8
use SMWDataItem as DataItem;
9
use SESP\PropertyAnnotator;
10
use SESP\AppFactory;
11
use Closure;
12
13
/**
14
 * @private
15
 * @ingroup SESP
16
 *
17
 * @license GNU GPL v2+
18
 * @since 2.0
19
 *
20
 * @author mwjames
21
 */
22
class DispatchingPropertyAnnotator implements PropertyAnnotator {
23
24
	/**
25
	 * @var AppFactory
26
	 */
27
	private $appFactory;
28
29
	/**
30
	 * @var PropertyAnnotator[]
31
	 */
32
	private $propertyAnnotators = [];
33
34
	/**
35
	 * @var PropertyAnnotator
36
	 */
37
	private $localPropertyAnnotator;
38
39
	/**
40
	 * @since 2.0
41
	 *
42
	 * @param AppFactory $appFactory
43
	 */
44 20
	public function __construct( AppFactory $appFactory ) {
45 20
		$this->appFactory = $appFactory;
46 20
	}
47
48
	/**
49
	 * @since 2.0
50
	 *
51
	 * {@inheritDoc}
52
	 */
53 1
	public function isAnnotatorFor( DIProperty $property ) {
54 1
		return true;
55
	}
56
57
	/**
58
	 * @since 2.0
59
	 *
60
	 * @param string $key
61
	 * @param PropertyAnnotator $propertyAnnotator
62
	 */
63 1
	public function addPropertyAnnotator( $key, PropertyAnnotator $propertyAnnotator ) {
64 1
		$this->propertyAnnotators[$key] = $propertyAnnotator;
65 1
	}
66
67
	/**
68
	 * @since 2.0
69
	 *
70
	 * {@inheritDoc}
71
	 */
72 1
	public function addAnnotation( DIProperty $property, SemanticData $semanticData ) {
73 1
		$this->findPropertyAnnotator( $property )->addAnnotation( $property, $semanticData );
74 1
	}
75
76
	/**
77
	 * @since 2.0
78
	 *
79
	 * @param DIProperty $property
80
	 *
81
	 * @return PropertyAnnotator
82
	 */
83 18
	public function findPropertyAnnotator( DIProperty $property ) {
84
85 18
		$key = $property->getKey();
86
87 18
		if ( $this->propertyAnnotators === [] ) {
88 17
			$this->initDefaultPropertyAnnotators();
89 17
		}
90
91 18
		if ( isset( $this->propertyAnnotators[$key] ) && is_callable( $this->propertyAnnotators[$key] ) ) {
92 16
			return call_user_func( $this->propertyAnnotators[$key], $this->appFactory );
93 2
		} elseif( isset( $this->propertyAnnotators[$key] ) ) {
94 1
			return $this->propertyAnnotators[$key];
95
		}
96
97 1
		return new NullPropertyAnnotator();
98
	}
99
100 17
	private function initDefaultPropertyAnnotators() {
101
102
		// Encapsulate each instance to avoid direct instantiation for unused
103
		// matches
104 17
		$this->propertyAnnotators = [
0 ignored issues
show
Documentation Bug introduced by
It seems like array(\SESP\PropertyAnno...otator($appFactory); }) of type array<string|integer,object<Closure>> is incompatible with the declared type array<integer,object<SESP\PropertyAnnotator>> of property $propertyAnnotators.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
105
106
			CreatorPropertyAnnotator::PROP_ID => function( $appFactory ) {
107 1
				return new CreatorPropertyAnnotator( $appFactory );
108 17
			},
109
110
			PageViewsPropertyAnnotator::PROP_ID => function( $appFactory ) {
111 1
				return new PageViewsPropertyAnnotator( $appFactory );
112 17
			},
113
114
			ApprovedRevPropertyAnnotator::PROP_ID => function ( $appFactory ) {
115
				return new ApprovedRevPropertyAnnotator( $appFactory );
116 17
			},
117
118
			ApprovedByPropertyAnnotator::PROP_ID => function ( $appFactory ) {
119
				return new ApprovedByPropertyAnnotator( $appFactory );
120 17
			},
121
122
			ApprovedDatePropertyAnnotator::PROP_ID => function ( $appFactory ) {
123
				return new ApprovedDatePropertyAnnotator( $appFactory );
124 17
			},
125
126
			ApprovedStatusPropertyAnnotator::PROP_ID => function ( $appFactory ) {
127
				return new ApprovedStatusPropertyAnnotator( $appFactory );
128 17
			},
129
130
			UserRegistrationDatePropertyAnnotator::PROP_ID => function( $appFactory ) {
131 1
				return new UserRegistrationDatePropertyAnnotator( $appFactory );
132 17
			},
133
134
			UserEditCountPropertyAnnotator::PROP_ID => function( $appFactory ) {
135 1
				return new UserEditCountPropertyAnnotator( $appFactory );
136 17
			},
137
138
			UserBlockPropertyAnnotator::PROP_ID => function( $appFactory ) {
139 1
				return new UserBlockPropertyAnnotator( $appFactory );
140 17
			},
141
142
			UserRightPropertyAnnotator::PROP_ID => function( $appFactory ) {
143 1
				return new UserRightPropertyAnnotator( $appFactory );
144 17
			},
145
146
			UserGroupPropertyAnnotator::PROP_ID => function( $appFactory ) {
147 1
				return new UserGroupPropertyAnnotator( $appFactory );
148 17
			},
149
150
			PageIDPropertyAnnotator::PROP_ID => function( $appFactory ) {
151 1
				return new PageIDPropertyAnnotator( $appFactory );
152 17
			},
153
154
			PageLengthPropertyAnnotator::PROP_ID => function( $appFactory ) {
155 1
				return new PageLengthPropertyAnnotator( $appFactory );
156 17
			},
157
158
			RevisionIDPropertyAnnotator::PROP_ID => function( $appFactory ) {
159 1
				return new RevisionIDPropertyAnnotator( $appFactory );
160 17
			},
161
162
			PageNumRevisionPropertyAnnotator::PROP_ID => function( $appFactory ) {
163 1
				return new PageNumRevisionPropertyAnnotator( $appFactory );
164 17
			},
165
166
			TalkPageNumRevisionPropertyAnnotator::PROP_ID => function( $appFactory ) {
167 1
				return new TalkPageNumRevisionPropertyAnnotator( $appFactory );
168 17
			},
169
170
			PageContributorsPropertyAnnotator::PROP_ID => function( $appFactory ) {
171 1
				return new PageContributorsPropertyAnnotator( $appFactory );
172 17
			},
173
174
			SubPagePropertyAnnotator::PROP_ID => function( $appFactory ) {
175 1
				return new SubPagePropertyAnnotator( $appFactory );
176 17
			},
177
178
			ShortUrlPropertyAnnotator::PROP_ID => function( $appFactory ) {
179 1
				return new ShortUrlPropertyAnnotator( $appFactory );
180 17
			},
181
182 17
			ExifPropertyAnnotator::PROP_ID => function( $appFactory ) {
183 1
				return new ExifPropertyAnnotator( $appFactory );
184 17
			},
185
186
		];
187 17
	}
188
189
}
190