Added the Porter Stemmer module to improve searches. This doesn't deal with some...
[yaffs-website] / vendor / sebastian / global-state / src / Blacklist.php
1 <?php
2 /*
3  * This file is part of the GlobalState package.
4  *
5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace SebastianBergmann\GlobalState;
12
13 use ReflectionClass;
14
15 /**
16  * A blacklist for global state elements that should not be snapshotted.
17  */
18 class Blacklist
19 {
20     /**
21      * @var array
22      */
23     private $globalVariables = array();
24
25     /**
26      * @var array
27      */
28     private $classes = array();
29
30     /**
31      * @var array
32      */
33     private $classNamePrefixes = array();
34
35     /**
36      * @var array
37      */
38     private $parentClasses = array();
39
40     /**
41      * @var array
42      */
43     private $interfaces = array();
44
45     /**
46      * @var array
47      */
48     private $staticAttributes = array();
49
50     /**
51      * @param string $variableName
52      */
53     public function addGlobalVariable($variableName)
54     {
55         $this->globalVariables[$variableName] = true;
56     }
57
58     /**
59      * @param string $className
60      */
61     public function addClass($className)
62     {
63         $this->classes[] = $className;
64     }
65
66     /**
67      * @param string $className
68      */
69     public function addSubclassesOf($className)
70     {
71         $this->parentClasses[] = $className;
72     }
73
74     /**
75      * @param string $interfaceName
76      */
77     public function addImplementorsOf($interfaceName)
78     {
79         $this->interfaces[] = $interfaceName;
80     }
81
82     /**
83      * @param string $classNamePrefix
84      */
85     public function addClassNamePrefix($classNamePrefix)
86     {
87         $this->classNamePrefixes[] = $classNamePrefix;
88     }
89
90     /**
91      * @param string $className
92      * @param string $attributeName
93      */
94     public function addStaticAttribute($className, $attributeName)
95     {
96         if (!isset($this->staticAttributes[$className])) {
97             $this->staticAttributes[$className] = array();
98         }
99
100         $this->staticAttributes[$className][$attributeName] = true;
101     }
102
103     /**
104      * @param  string $variableName
105      * @return bool
106      */
107     public function isGlobalVariableBlacklisted($variableName)
108     {
109         return isset($this->globalVariables[$variableName]);
110     }
111
112     /**
113      * @param  string $className
114      * @param  string $attributeName
115      * @return bool
116      */
117     public function isStaticAttributeBlacklisted($className, $attributeName)
118     {
119         if (in_array($className, $this->classes)) {
120             return true;
121         }
122
123         foreach ($this->classNamePrefixes as $prefix) {
124             if (strpos($className, $prefix) === 0) {
125                 return true;
126             }
127         }
128
129         $class = new ReflectionClass($className);
130
131         foreach ($this->parentClasses as $type) {
132             if ($class->isSubclassOf($type)) {
133                 return true;
134             }
135         }
136
137         foreach ($this->interfaces as $type) {
138             if ($class->implementsInterface($type)) {
139                 return true;
140             }
141         }
142
143         if (isset($this->staticAttributes[$className][$attributeName])) {
144             return true;
145         }
146
147         return false;
148     }
149 }