annotate vendor/sebastian/global-state/src/Blacklist.php @ 5:c69a71b4f40f

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