Skip to content

Commit 1041390

Browse files
committed
make use of ConstantTypeHelper
1 parent ca0ce35 commit 1041390

File tree

3 files changed

+33
-30
lines changed

3 files changed

+33
-30
lines changed

Diff for: src/Type/Nette/JsonDecodeDynamicReturnTypeExtension.php

+24-21
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use PHPStan\Type\ArrayType;
1414
use PHPStan\Type\BooleanType;
1515
use PHPStan\Type\Constant\ConstantStringType;
16+
use PHPStan\Type\ConstantTypeHelper;
1617
use PHPStan\Type\DynamicStaticMethodReturnTypeExtension;
1718
use PHPStan\Type\FloatType;
1819
use PHPStan\Type\IntegerType;
@@ -117,27 +118,29 @@ private function resolveConstantStringType(ConstantStringType $constantStringTyp
117118
$decodedValue = Json::decode($constantStringType->getValue());
118119
}
119120

120-
if (is_bool($decodedValue)) {
121-
return new BooleanType();
122-
}
123-
124-
if (is_array($decodedValue)) {
125-
return new ArrayType(new MixedType(), new MixedType());
126-
}
127-
128-
if (is_object($decodedValue) && get_class($decodedValue) === stdClass::class) {
129-
return new ObjectType(stdClass::class);
130-
}
131-
132-
if (is_int($decodedValue)) {
133-
return new IntegerType();
134-
}
135-
136-
if (is_float($decodedValue)) {
137-
return new FloatType();
138-
}
139-
140-
return new MixedType();
121+
return ConstantTypeHelper::getTypeFromValue($decodedValue);
122+
//
123+
// if (is_bool($decodedValue)) {
124+
// return new BooleanType();
125+
// }
126+
//
127+
// if (is_array($decodedValue)) {
128+
// return new ArrayType(new MixedType(), new MixedType());
129+
// }
130+
//
131+
// if (is_object($decodedValue) && get_class($decodedValue) === stdClass::class) {
132+
// return new ObjectType(stdClass::class);
133+
// }
134+
//
135+
// if (is_int($decodedValue)) {
136+
// return new IntegerType();
137+
// }
138+
//
139+
// if (is_float($decodedValue)) {
140+
// return new FloatType();
141+
// }
142+
//
143+
// return new MixedType();
141144
}
142145

143146
}

Diff for: tests/Type/Nette/data/json_decode.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
use function PHPStan\Testing\assertType;
55

66
$value = Json::decode('true');
7-
assertType('bool', $value);
7+
assertType('true', $value);
88

99
$value = Json::decode('1');
10-
assertType('int', $value);
10+
assertType('1', $value);
1111

1212
$value = Json::decode('1.5');
13-
assertType('float', $value);
13+
assertType('1.5', $value);
1414

1515
$value = Json::decode('false');
16-
assertType('bool', $value);
16+
assertType('false', $value);
1717

1818
function unknownType($mixed) {
1919
$value = Json::decode($mixed);

Diff for: tests/Type/Nette/data/json_decode_force_array.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44
use function PHPStan\Testing\assertType;
55

66
$value = Json::decode('true', Json::FORCE_ARRAY);
7-
assertType('bool', $value);
7+
assertType('true', $value);
88

99
$value = Json::decode('1', Json::FORCE_ARRAY);
10-
assertType('int', $value);
10+
assertType('1', $value);
1111

1212
$value = Json::decode('1.5', Json::FORCE_ARRAY);
13-
assertType('float', $value);
13+
assertType('1.5', $value);
1414

1515
$value = Json::decode('false', Json::FORCE_ARRAY);
16-
assertType('bool', $value);
16+
assertType('false', $value);
1717

1818
$value = Json::decode('{}', Json::FORCE_ARRAY);
19-
assertType('array', $value);
19+
assertType('array{}', $value);
2020

2121

2222
function unknownType($mixed) {

0 commit comments

Comments
 (0)