22
33namespace Wikibase \DataModel \Deserializers ;
44
5+ use DataValues \DataValue ;
6+ use DataValues \Deserializers \DataValueDeserializer ;
57use DataValues \UnDeserializableValue ;
68use Deserializers \Deserializer ;
79use Deserializers \DispatchableDeserializer ;
1012use Deserializers \Exceptions \MissingAttributeException ;
1113use Deserializers \Exceptions \MissingTypeException ;
1214use Deserializers \Exceptions \UnsupportedTypeException ;
15+ use InvalidArgumentException ;
1316use Wikibase \DataModel \Entity \PropertyId ;
1417use Wikibase \DataModel \Snak \PropertyNoValueSnak ;
1518use Wikibase \DataModel \Snak \PropertySomeValueSnak ;
@@ -29,17 +32,8 @@ class SnakDeserializer implements DispatchableDeserializer {
2932 */
3033 private $ dataValueDeserializer ;
3134
32- /**
33- * @var Deserializer
34- */
35- private $ entityIdDeserializer ;
36-
37- public function __construct (
38- Deserializer $ dataValueDeserializer ,
39- Deserializer $ entityIdDeserializer
40- ) {
35+ public function __construct ( Deserializer $ dataValueDeserializer ) {
4136 $ this ->dataValueDeserializer = $ dataValueDeserializer ;
42- $ this ->entityIdDeserializer = $ entityIdDeserializer ;
4337 }
4438
4539 /**
@@ -114,12 +108,24 @@ private function newValueSnak( array $serialization ) {
114108 );
115109 }
116110
111+ /**
112+ * @param array $serialization
113+ *
114+ * @return DataValue
115+ */
117116 private function deserializeDataValue ( $ serialization ) {
118117 try {
119118 return $ this ->dataValueDeserializer ->deserialize ( $ serialization );
120119 } catch ( DeserializationException $ ex ) {
120+ $ value = isset ( $ serialization [DataValueDeserializer::VALUE_KEY ] )
121+ ? $ serialization [DataValueDeserializer::VALUE_KEY ]
122+ : null ;
123+ $ type = isset ( $ serialization [DataValueDeserializer::TYPE_KEY ] )
124+ ? $ serialization [DataValueDeserializer::TYPE_KEY ]
125+ : null ;
121126 $ error = isset ( $ serialization ['error ' ] ) ? $ serialization ['error ' ] : $ ex ->getMessage ();
122- return new UnDeserializableValue ( $ serialization ['value ' ], $ serialization ['type ' ], $ error );
127+
128+ return new UnDeserializableValue ( $ value , $ type , $ error );
123129 }
124130 }
125131
@@ -130,17 +136,15 @@ private function deserializeDataValue( $serialization ) {
130136 * @return PropertyId
131137 */
132138 private function deserializePropertyId ( $ serialization ) {
133- $ propertyId = $ this -> entityIdDeserializer -> deserialize ( $ serialization );
134-
135- if ( !( $ propertyId instanceof PropertyId ) ) {
139+ try {
140+ return new PropertyId ( $ serialization );
141+ } catch ( InvalidArgumentException $ ex ) {
136142 throw new InvalidAttributeException (
137143 'property ' ,
138144 $ serialization ,
139145 "' $ serialization' is not a valid property ID "
140146 );
141147 }
142-
143- return $ propertyId ;
144148 }
145149
146150 private function assertCanDeserialize ( $ serialization ) {
0 commit comments