public function checkReturnType(Scope $scope, Type $returnType, Expr $returnValue = null, string $emptyReturnStatementMessage, string $voidMessage, string $typeMismatchMessage) : array
{
if ($returnValue === null) {
if ($returnType instanceof VoidType || $returnType instanceof MixedType) {
return [];
}
return [sprintf($emptyReturnStatementMessage, $returnType->describe())];
}
$returnValueType = $scope->getType($returnValue);
if ($returnType instanceof VoidType) {
return [sprintf($voidMessage, $returnValueType->describe())];
}
if (!$returnType->accepts($returnValueType)) {
return [sprintf($typeMismatchMessage, $returnType->describe(), $returnValueType->describe())];
}
return [];
}