File tree Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Original file line number Diff line number Diff line change 12
12
use function token_get_all ;
13
13
use const PHP_VERSION_ID ;
14
14
use const T_AS ;
15
+ use const T_CLASS ;
15
16
use const T_COMMENT ;
16
17
use const T_DOC_COMMENT ;
18
+ use const T_ENUM ;
19
+ use const T_INTERFACE ;
17
20
use const T_NAME_FULLY_QUALIFIED ;
18
21
use const T_NAME_QUALIFIED ;
19
22
use const T_NAMESPACE ;
20
23
use const T_NS_SEPARATOR ;
21
24
use const T_STRING ;
25
+ use const T_TRAIT ;
22
26
use const T_USE ;
23
27
use const T_WHITESPACE ;
24
28
@@ -40,6 +44,18 @@ class UsedSymbolExtractor
40
44
*/
41
45
private $ pointer = 0 ;
42
46
47
+ /**
48
+ * When not null, we are inside class-like and use statements dont need to be parsed
49
+ *
50
+ * @var int|null
51
+ */
52
+ private $ inClassLevel = null ;
53
+
54
+ /**
55
+ * @var int
56
+ */
57
+ private $ level = 0 ;
58
+
43
59
public function __construct (string $ code )
44
60
{
45
61
$ this ->tokens = token_get_all ($ code );
@@ -149,6 +165,20 @@ private function getNextEffectiveToken()
149
165
continue ;
150
166
}
151
167
168
+ if ($ token [0 ] === T_CLASS || $ token [0 ] === T_INTERFACE || $ token [0 ] === T_TRAIT || (PHP_VERSION_ID >= 80100 && $ token [0 ] === T_ENUM )) {
169
+ $ this ->inClassLevel = $ this ->level + 1 ;
170
+ }
171
+
172
+ if ($ token === '{ ' ) {
173
+ $ this ->level ++;
174
+ } elseif ($ token === '} ' ) {
175
+ if ($ this ->level === $ this ->inClassLevel ) {
176
+ $ this ->inClassLevel = null ;
177
+ }
178
+
179
+ $ this ->level --;
180
+ }
181
+
152
182
return $ token ;
153
183
}
154
184
@@ -198,6 +228,10 @@ private function parseNameForOldPhp(): string
198
228
*/
199
229
public function parseUseStatement (): ?array
200
230
{
231
+ if ($ this ->inClassLevel !== null ) {
232
+ return null ;
233
+ }
234
+
201
235
$ groupRoot = '' ;
202
236
$ class = '' ;
203
237
$ alias = '' ;
Original file line number Diff line number Diff line change 17
17
new DirectoryExists ();
18
18
new FileExists ();
19
19
20
+ trait Trait_ {
21
+ public function originalMethod (): void {}
22
+ }
23
+
24
+ class Class_
25
+ {
26
+ use Trait_ {
27
+ originalMethod as newMethodName;
28
+ }
29
+
30
+ public function test () {
31
+ $ this ->newMethodName ();
32
+ }
33
+
34
+ }
You can’t perform that action at this time.
0 commit comments