summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/sdk/Common/Dev/Compatibility/Util.php
blob: 1a3debfddce70a3c445c714227a65d5e62187707 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php

declare(strict_types=1);

namespace OpenTelemetry\SDK\Common\Dev\Compatibility;

class Util
{
    public const E_NONE = 0;
    public const DEFAULT_ERROR_LEVEL = E_USER_NOTICE;
    public const ERROR_LEVELS = [
        self::E_NONE,
        E_USER_DEPRECATED,
        E_USER_NOTICE,
        E_USER_WARNING,
        E_USER_ERROR,
    ];

    private static int $errorLevel = E_USER_NOTICE;

    public static function setErrorLevel(int $errorLevel = E_USER_NOTICE): void
    {
        self::validateErrorLevel($errorLevel);

        self::$errorLevel = $errorLevel;
    }

    public static function getErrorLevel(): int
    {
        return self::$errorLevel;
    }

    /**
     * @psalm-suppress ArgumentTypeCoercion
     */
    public static function triggerClassDeprecationNotice(string $className, string $alternativeClassName = null): void
    {
        if (self::getErrorLevel() === self::E_NONE) {
            return;
        }

        $notice = sprintf(
            'Class "%s" is deprecated and will be removed in a future release. ',
            $className
        );

        if ($alternativeClassName !== null) {
            $notice .= sprintf('Please, use "%s" instead.', $alternativeClassName);
        }

        trigger_error($notice, self::$errorLevel);
    }

    /**
     * @psalm-suppress ArgumentTypeCoercion
     */
    public static function triggerMethodDeprecationNotice(
        string $methodName,
        string $alternativeMethodName = null,
        string $alternativeClassName = null
    ): void {
        if (self::getErrorLevel() === self::E_NONE) {
            return;
        }

        $notice = sprintf(
            'Method "%s " is deprecated and will be removed in a future release. ',
            $methodName
        );

        if ($alternativeMethodName !== null) {
            $method = $alternativeClassName === null
                ? $alternativeMethodName
                : sprintf('%s::%s', $alternativeClassName, $alternativeMethodName);

            $notice .= sprintf('Please, use "%s" instead.', $method);
        }

        trigger_error($notice, self::$errorLevel);
    }

    private static function validateErrorLevel(int $errorLevel): void
    {
        if (!in_array($errorLevel, self::ERROR_LEVELS, true)) {
            throw new \InvalidArgumentException(
                sprintf(
                    'Error level must be one of "%s"',
                    implode('", "', self::ERROR_LEVELS)
                ),
            );
        }
    }
}