Skip to content

Commit 98a5e5f

Browse files
committed
Merge pull request #52 from JonathanO/master
Avoid reparsing types repeatedly.
2 parents d2c2a6e + 53ef9ba commit 98a5e5f

File tree

11 files changed

+250
-99
lines changed

11 files changed

+250
-99
lines changed

lib/Weasel/JsonMarshaller/Config/ClassAnnotationDriver.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Weasel\JsonMarshaller\Config\IAnnotations\IJsonAnyGetter;
1717
use Weasel\JsonMarshaller\Config\IAnnotations\IJsonAnySetter;
1818
use Weasel\JsonMarshaller\Config\IAnnotations\IJsonTypeInfo;
19+
use Weasel\JsonMarshaller\Utils\TypeParser;
1920

2021
/**
2122
* Load the configuration for a given class from annotations
@@ -137,7 +138,7 @@ protected function _configureGetter(\ReflectionMethod $method, IJsonProperty $pr
137138
throw new \Exception("Serialization for property of name $property has already been configured.");
138139
}
139140
$getterConfig->method = $name;
140-
$getterConfig->type = $propertyConfig->getType();
141+
$getterConfig->type = TypeParser::parseType($propertyConfig->getType(), true);
141142

142143
$this->config->serialization->properties[$property] = $getterConfig;
143144
}
@@ -169,7 +170,7 @@ protected function _configureSetter(\ReflectionMethod $method, IJsonProperty $pr
169170
}
170171
$setterConfig = new Deserialization\SetterDeserialization();
171172
$setterConfig->method = $name;
172-
$setterConfig->type = $propertyConfig->getType();
173+
$setterConfig->type = TypeParser::parseType($propertyConfig->getType(), true);
173174
$setterConfig->typeInfo = $this->_getDeserializationTypeInfo($typeInfo, $subTypes);
174175
$setterConfig->strict = $propertyConfig->getStrict();
175176

@@ -213,7 +214,7 @@ protected function _configureCreator(\ReflectionMethod $method, IJsonCreator $cr
213214
foreach ($creatorConfig->getParams() as $paramConfig) {
214215
$param = new Deserialization\Param();
215216
$param->name = $paramConfig->getName();
216-
$param->type = $paramConfig->getType();
217+
$param->type = TypeParser::parseType($paramConfig->getType(), true);
217218
$param->strict = $paramConfig->getStrict();
218219
if (!isset($param->name)) {
219220
if (!isset($paramNames[$i])) {
@@ -284,7 +285,7 @@ protected function _configureProperty(\ReflectionProperty $property)
284285
if (!isset($this->config->deserialization->properties[$propertyName])) {
285286
$setterConfig = new Deserialization\DirectDeserialization();
286287
$setterConfig->property = $name;
287-
$setterConfig->type = $propertyConfig->getType();
288+
$setterConfig->type = TypeParser::parseType($propertyConfig->getType(), true);
288289
$setterConfig->typeInfo = $this->_getDeserializationTypeInfo($typeInfo, $subTypes);
289290

290291
$this->config->deserialization->properties[$propertyName] = $setterConfig;
@@ -294,7 +295,7 @@ protected function _configureProperty(\ReflectionProperty $property)
294295
if (!isset($this->config->serialization->properties[$propertyName])) {
295296
$getterConfig = new Serialization\DirectSerialization();
296297
$getterConfig->property = $name;
297-
$getterConfig->type = $propertyConfig->getType();
298+
$getterConfig->type = TypeParser::parseType($propertyConfig->getType(), true);
298299

299300
/**
300301
* @var Annotations\JsonInclude $includer
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
namespace Weasel\JsonMarshaller\Config\Type;
3+
4+
use Weasel\JsonMarshaller\Config\DoctrineAnnotations\JsonProperty;
5+
6+
class ListType extends Type {
7+
8+
/**
9+
* @var Type
10+
* @JsonProperty(type="\Weasel\JsonMarshaller\Config\Type\Type")
11+
*/
12+
public $valueType;
13+
14+
function __construct($valueType = null)
15+
{
16+
$this->valueType = $valueType;
17+
}
18+
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
namespace Weasel\JsonMarshaller\Config\Type;
3+
4+
use Weasel\JsonMarshaller\Config\DoctrineAnnotations\JsonProperty;
5+
6+
class MapType extends ListType {
7+
8+
/**
9+
* @var Type
10+
* @JsonProperty(type="\Weasel\JsonMarshaller\Config\Type\Type")
11+
*/
12+
public $keyType;
13+
14+
function __construct($keyType = null, $valueType = null)
15+
{
16+
$this->keyType = $keyType;
17+
parent::__construct($valueType);
18+
}
19+
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
namespace Weasel\JsonMarshaller\Config\Type;
3+
4+
use Weasel\JsonMarshaller\Config\DoctrineAnnotations\JsonProperty;
5+
6+
class ObjectType extends Type {
7+
8+
/**
9+
* @var string
10+
* @JsonProperty(type="string")
11+
*/
12+
public $class;
13+
14+
function __construct($class = null)
15+
{
16+
$this->class = $class;
17+
}
18+
19+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
namespace Weasel\JsonMarshaller\Config\Type;
3+
4+
use Weasel\JsonMarshaller\Config\DoctrineAnnotations\JsonProperty;
5+
use Weasel\JsonMarshaller\Types\JsonType;
6+
7+
class ScalarType extends Type {
8+
9+
public function __construct($typeName = null) {
10+
$this->typeName = $typeName;
11+
}
12+
13+
/**
14+
* @var string
15+
* @JsonProperty(type="string")
16+
*/
17+
public $typeName;
18+
19+
/**
20+
* This is a bit of a dirty hack...
21+
* @var JsonType
22+
*/
23+
public $jsonType;
24+
25+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
namespace Weasel\JsonMarshaller\Config\Type;
3+
4+
use Weasel\JsonMarshaller\Config\DoctrineAnnotations\JsonSubTypes;
5+
use Weasel\JsonMarshaller\Config\DoctrineAnnotations\JsonTypeInfo;
6+
7+
8+
/**
9+
* Class Type
10+
* @package Weasel\JsonMarshaller\Config\Type
11+
* @JsonSubTypes({
12+
* @JsonSubTypes\Type("\Weasel\JsonMarshaller\Config\Type\ListType"),
13+
* @JsonSubTypes\Type("\Weasel\JsonMarshaller\Config\Type\MapType"),
14+
* @JsonSubTypes\Type("\Weasel\JsonMarshaller\Config\Type\ScalarType"),
15+
* })
16+
* @JsonTypeInfo(use=JsonTypeInfo::ID_NAME, include=JsonTypeInfo::AS_PROPERTY, property="type")
17+
*/
18+
abstract class Type {
19+
20+
}

0 commit comments

Comments
 (0)