Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
AnnotationReader
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 propertyHasAnnotation
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Wikimedia\DebugInfo;
4
5/**
6 * Utility class for reading doc comment annotations
7 *
8 * @since 1.40
9 */
10class AnnotationReader {
11    /** @var bool[] */
12    private static $cache = [];
13
14    /**
15     * Determine whether a ReflectionProperty has a specified annotation
16     *
17     * @param \ReflectionProperty $property
18     * @param string $annotationName
19     * @return bool
20     */
21    public static function propertyHasAnnotation(
22        \ReflectionProperty $property,
23        string $annotationName
24    ) {
25        $cacheKey = "$annotationName@{$property->class}::{$property->name}";
26        if ( !isset( self::$cache[$cacheKey] ) ) {
27            $comment = $property->getDocComment();
28            if ( $comment === false ) {
29                self::$cache[$cacheKey] = false;
30            } else {
31                $encAnnotation = preg_quote( $annotationName, '!' );
32                self::$cache[$cacheKey] =
33                    (bool)preg_match( "!^[ \t]*(/\*\*|\*)[ \t]*@$encAnnotation\b!im", $comment );
34            }
35        }
36        return self::$cache[$cacheKey];
37    }
38}