*/
final class IdentifierTypeResolver implements NodeTypeResolverInterface
{
/**
* @return array>
*/
public function getNodeClasses() : array
{
return [Identifier::class];
}
/**
* @param Identifier $node
* @return StringType|BooleanType|ConstantBooleanType|NullType|ObjectWithoutClassType|ArrayType|IterableType|IntegerType|FloatType|MixedType
*/
public function resolve(Node $node) : Type
{
$lowerString = $node->toLowerString();
if ($lowerString === 'string') {
return new StringType();
}
if ($lowerString === 'bool') {
return new BooleanType();
}
if ($lowerString === 'false') {
return new ConstantBooleanType(\false);
}
if ($lowerString === 'true') {
return new ConstantBooleanType(\true);
}
if ($lowerString === 'null') {
return new NullType();
}
if ($lowerString === 'object') {
return new ObjectWithoutClassType();
}
if ($lowerString === 'array') {
return new ArrayType(new MixedType(), new MixedType());
}
if ($lowerString === 'int') {
return new IntegerType();
}
if ($lowerString === 'iterable') {
return new IterableType(new MixedType(), new MixedType());
}
if ($lowerString === 'float') {
return new FloatType();
}
return new MixedType();
}
}