Completed
Push — master ( 79db5d...420d44 )
by Konstantin
11s
created

KeywordPatch::supports()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Prophecy.
5
 * (c) Konstantin Kudryashov <[email protected]>
6
 *     Marcello Duarte <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Prophecy\Doubler\ClassPatch;
13
14
use Prophecy\Doubler\Generator\Node\ClassNode;
15
16
/**
17
 * Remove method functionality from the double which will clash with php keywords.
18
 *
19
 * @author Milan Magudia <[email protected]>
20
 */
21
class KeywordPatch implements ClassPatchInterface
22
{
23
    /**
24
     * Support any class
25
     *
26
     * @param ClassNode $node
27
     *
28
     * @return boolean
29
     */
30
    public function supports(ClassNode $node)
31
    {
32
        return true;
33
    }
34
35
    /**
36
     * Remove methods that clash with php keywords
37
     *
38
     * @param ClassNode $node
39
     */
40
    public function apply(ClassNode $node)
41
    {
42
        $methodNames = array_keys($node->getMethods());
43
        $methodsToRemove = array_intersect($methodNames, $this->getKeywords());
44
        foreach ($methodsToRemove as $methodName) {
45
            $node->removeMethod($methodName);
46
        }
47
    }
48
49
    /**
50
     * Returns patch priority, which determines when patch will be applied.
51
     *
52
     * @return int Priority number (higher - earlier)
53
     */
54
    public function getPriority()
55
    {
56
        return 49;
57
    }
58
59
    /**
60
     * Returns array of php keywords.
61
     *
62
     * @return array
63
     */
64
    private function getKeywords()
65
    {
66
        if (\PHP_VERSION_ID >= 70000) {
67
            return array('__halt_compiler');
68
        }
69
70
        return array(
71
            '__halt_compiler',
72
            'abstract',
73
            'and',
74
            'array',
75
            'as',
76
            'break',
77
            'callable',
78
            'case',
79
            'catch',
80
            'class',
81
            'clone',
82
            'const',
83
            'continue',
84
            'declare',
85
            'default',
86
            'die',
87
            'do',
88
            'echo',
89
            'else',
90
            'elseif',
91
            'empty',
92
            'enddeclare',
93
            'endfor',
94
            'endforeach',
95
            'endif',
96
            'endswitch',
97
            'endwhile',
98
            'eval',
99
            'exit',
100
            'extends',
101
            'final',
102
            'finally',
103
            'for',
104
            'foreach',
105
            'function',
106
            'global',
107
            'goto',
108
            'if',
109
            'implements',
110
            'include',
111
            'include_once',
112
            'instanceof',
113
            'insteadof',
114
            'interface',
115
            'isset',
116
            'list',
117
            'namespace',
118
            'new',
119
            'or',
120
            'print',
121
            'private',
122
            'protected',
123
            'public',
124
            'require',
125
            'require_once',
126
            'return',
127
            'static',
128
            'switch',
129
            'throw',
130
            'trait',
131
            'try',
132
            'unset',
133
            'use',
134
            'var',
135
            'while',
136
            'xor',
137
            'yield',
138
        );
139
    }
140
}
141