| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\TestFramework\Utility;
 
- /**
 
-  * Searches for usage of classes, namespaces, functions, etc in PHP files
 
-  */
 
- class CodeCheck
 
- {
 
-     /**
 
-      * Check if the class is used in the content
 
-      *
 
-      * @param string $className
 
-      * @param string $content
 
-      * @return bool
 
-      */
 
-     public static function isClassUsed($className, $content)
 
-     {
 
-         /* avoid matching namespace instead of class */
 
-         $content = preg_replace('/namespace[^;]+;/', '', $content);
 
-         return self::_isRegexpMatched('/[^a-z\d_\$]' . preg_quote($className, '/') . '[^a-z\d_\\\\]/iS', $content);
 
-     }
 
-     /**
 
-      * Check if the namespace is used in the content
 
-      *
 
-      * @param string $namespace
 
-      * @param string $content
 
-      * @return bool
 
-      */
 
-     public static function isNamespaceUsed($namespace, $content)
 
-     {
 
-         return self::_isRegexpMatched('/namespace\s+' . preg_quote($namespace, '/') . ';/S', $content)
 
-         || self::_isRegexpMatched('/[^a-zA-Z\d_]' . preg_quote($namespace . '\\', '/') . '/S', $content);
 
-     }
 
-     /**
 
-      * Check if the specified function is called in the content.
 
-      * Note that declarations are not considered.
 
-      *
 
-      * If class context is not specified, invocation of all functions or methods (of any class)
 
-      * will be matched across the board
 
-      *
 
-      * If some class is specified, only its methods will be matched as follows:
 
-      * - usage of class::method
 
-      * - usage of $this, self and static within the class and its descendants
 
-      *
 
-      * @param string $method
 
-      * @param string $content
 
-      * @param string $class
 
-      * @return bool
 
-      */
 
-     public static function isFunctionCalled($method, $content, $class = null)
 
-     {
 
-         $quotedMethod = preg_quote($method, '/');
 
-         if (!$class) {
 
-             return self::_isRegexpMatched(
 
-                 '/(?<![a-z\d_:]|->|function\s)' . $quotedMethod . '\s*\(/iS',
 
-                 $content
 
-             );
 
-         }
 
-         // without opening parentheses to match static callbacks notation
 
-         if (self::_isRegexpMatched(
 
-             '/' . preg_quote($class, '/') . '::\s*' . $quotedMethod . '[^a-z\d_]/iS',
 
-             $content
 
-         )
 
-         ) {
 
-             return true;
 
-         }
 
-         if (self::isClassOrInterface($content, $class) || self::isDirectDescendant($content, $class)) {
 
-             return self::_isRegexpMatched('/this->' . $quotedMethod . '\s*\(/iS', $content)
 
-             || self::_isRegexpMatched(
 
-                 '/(self|static|parent)::\s*' . $quotedMethod . '\s*\(/iS',
 
-                 $content
 
-             );
 
-         }
 
-     }
 
-     /**
 
-      * Check if methods or functions are used in the content
 
-      *
 
-      * If class context is specified, only the class and its descendants will be checked.
 
-      *
 
-      * @param string $property
 
-      * @param string $content
 
-      * @param string $class
 
-      * @return bool
 
-      */
 
-     public static function isPropertyUsed($property, $content, $class = null)
 
-     {
 
-         if ($class) {
 
-             if (!self::isClassOrInterface($content, $class) && !self::isDirectDescendant($content, $class)) {
 
-                 return false;
 
-             }
 
-         }
 
-         return self::_isRegexpMatched(
 
-             '/[^a-z\d_]' . preg_quote($property, '/') . '[^a-z\d_]/iS',
 
-             $content
 
-         );
 
-     }
 
-     /**
 
-      * Analyze content to determine whether it is a declaration of the specified class/interface
 
-      *
 
-      * @param string $content
 
-      * @param string $name
 
-      * @return bool
 
-      */
 
-     public static function isClassOrInterface($content, $name)
 
-     {
 
-         return self::_isRegexpMatched('/\b(?:class|interface)\s+' . preg_quote($name, '/') . '\b[^{]*\{/iS', $content);
 
-     }
 
-     /**
 
-      * Analyze content to determine whether this is a direct descendant of the specified class/interface
 
-      *
 
-      * @param string $content
 
-      * @param string $name
 
-      * @return bool
 
-      */
 
-     public static function isDirectDescendant($content, $name)
 
-     {
 
-         $name = preg_quote($name, '/');
 
-         return self::_isRegexpMatched(
 
-             '/\s+extends\s+\\\\?' . $name . '\b|\s+implements\s+[^{]*\b' . $name . '\b[^{^\\\\]*\{/iS',
 
-             $content
 
-         );
 
-     }
 
-     /**
 
-      * Check if content matches the regexp
 
-      *
 
-      * @param string $regexp
 
-      * @param string $content
 
-      * @throws \Exception
 
-      * @return bool True if the content matches the regexp
 
-      */
 
-     protected static function _isRegexpMatched($regexp, $content)
 
-     {
 
-         $result = preg_match($regexp, $content);
 
-         if ($result === false) {
 
-             throw new \Exception('An error occurred when matching regexp "' . $regexp . '""');
 
-         }
 
-         return 1 === $result;
 
-     }
 
- }
 
 
  |