Chris@0: Chris@0: * Marcello Duarte Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Prophecy\Doubler\ClassPatch; Chris@0: Chris@0: use Prophecy\Doubler\Generator\Node\ClassNode; Chris@0: Chris@0: /** Chris@0: * Remove method functionality from the double which will clash with php keywords. Chris@0: * Chris@0: * @author Milan Magudia Chris@0: */ Chris@0: class KeywordPatch implements ClassPatchInterface Chris@0: { Chris@0: /** Chris@0: * Support any class Chris@0: * Chris@0: * @param ClassNode $node Chris@0: * Chris@0: * @return boolean Chris@0: */ Chris@0: public function supports(ClassNode $node) Chris@0: { Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Remove methods that clash with php keywords Chris@0: * Chris@0: * @param ClassNode $node Chris@0: */ Chris@0: public function apply(ClassNode $node) Chris@0: { Chris@0: $methodNames = array_keys($node->getMethods()); Chris@0: $methodsToRemove = array_intersect($methodNames, $this->getKeywords()); Chris@0: foreach ($methodsToRemove as $methodName) { Chris@0: $node->removeMethod($methodName); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns patch priority, which determines when patch will be applied. Chris@0: * Chris@0: * @return int Priority number (higher - earlier) Chris@0: */ Chris@0: public function getPriority() { Chris@0: return 49; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns array of php keywords. Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: private function getKeywords() { Chris@0: Chris@0: return array( Chris@0: '__halt_compiler', Chris@0: 'abstract', Chris@0: 'and', Chris@0: 'array', Chris@0: 'as', Chris@0: 'break', Chris@0: 'callable', Chris@0: 'case', Chris@0: 'catch', Chris@0: 'class', Chris@0: 'clone', Chris@0: 'const', Chris@0: 'continue', Chris@0: 'declare', Chris@0: 'default', Chris@0: 'die', Chris@0: 'do', Chris@0: 'echo', Chris@0: 'else', Chris@0: 'elseif', Chris@0: 'empty', Chris@0: 'enddeclare', Chris@0: 'endfor', Chris@0: 'endforeach', Chris@0: 'endif', Chris@0: 'endswitch', Chris@0: 'endwhile', Chris@0: 'eval', Chris@0: 'exit', Chris@0: 'extends', Chris@0: 'final', Chris@0: 'finally', Chris@0: 'for', Chris@0: 'foreach', Chris@0: 'function', Chris@0: 'global', Chris@0: 'goto', Chris@0: 'if', Chris@0: 'implements', Chris@0: 'include', Chris@0: 'include_once', Chris@0: 'instanceof', Chris@0: 'insteadof', Chris@0: 'interface', Chris@0: 'isset', Chris@0: 'list', Chris@0: 'namespace', Chris@0: 'new', Chris@0: 'or', Chris@0: 'print', Chris@0: 'private', Chris@0: 'protected', Chris@0: 'public', Chris@0: 'require', Chris@0: 'require_once', Chris@0: 'return', Chris@0: 'static', Chris@0: 'switch', Chris@0: 'throw', Chris@0: 'trait', Chris@0: 'try', Chris@0: 'unset', Chris@0: 'use', Chris@0: 'var', Chris@0: 'while', Chris@0: 'xor', Chris@0: 'yield', Chris@0: ); Chris@0: } Chris@0: }