11
11
*/
12
12
class ClassScanner
13
13
{
14
- public function getClassNameFromFile ($ file )
14
+ public function getClassNameFromFile (string $ file ): ? string
15
15
{
16
- if (!file_exists ($ file )) {
17
- return null ;
18
- }
19
-
20
16
$ fp = fopen ($ file , 'r ' );
21
17
22
- if (false === $ fp ) {
23
- throw new RuntimeException (sprintf (
24
- 'Could not open file "%s" ' ,
25
- $ file
26
- ));
27
- }
28
-
29
18
$ class = $ namespace = $ buffer = '' ;
30
19
$ i = 0 ;
31
20
@@ -38,29 +27,31 @@ public function getClassNameFromFile($file)
38
27
for ($ line = 0 ; $ line <= 20 ; $ line ++) {
39
28
$ buffer .= fgets ($ fp );
40
29
}
41
- $ tokens = @token_get_all ($ buffer );
30
+ $ tokens = @\ token_get_all ($ buffer );
42
31
43
32
if (strpos ($ buffer , '{ ' ) === false ) {
44
33
continue ;
45
34
}
46
35
47
36
for (; $ i < count ($ tokens ); $ i ++) {
48
- if ($ tokens [$ i ][0 ] === \ T_NAMESPACE ) {
37
+ if ($ tokens [$ i ][0 ] === T_NAMESPACE ) {
49
38
for ($ j = $ i + 1 ; $ j < count ($ tokens ); $ j ++) {
50
39
$ tokenId = $ tokens [$ j ][0 ];
51
- if ($ tokenId === T_STRING || $ tokenId === 314 ) {
40
+ $ namespaceToken = defined ('T_NAME_QUALIFIED ' ) ? T_NAME_QUALIFIED : T_STRING ;
41
+
42
+ if ($ tokenId === T_STRING || $ tokenId === $ namespaceToken ) {
52
43
$ namespace .= '\\' . $ tokens [$ j ][1 ];
53
44
} elseif ($ tokens [$ j ] === '{ ' || $ tokens [$ j ] === '; ' ) {
54
45
break ;
55
46
}
56
47
}
57
48
}
58
49
59
- $ token = $ tokens [$ i ][0 ];
60
- if ($ token === \T_INTERFACE || $ token === \T_CLASS || $ token === \T_TRAIT ) {
50
+ if ($ tokens [$ i ][0 ] === T_CLASS ) {
61
51
for ($ j = $ i + 1 ; $ j < count ($ tokens ); $ j ++) {
62
- if ($ tokens [$ j ][0 ] === \ T_STRING ) {
52
+ if ($ tokens [$ j ][0 ] === T_STRING ) {
63
53
$ class = $ tokens [$ i + 2 ][1 ];
54
+
64
55
break 2 ;
65
56
}
66
57
}
@@ -72,8 +63,6 @@ public function getClassNameFromFile($file)
72
63
return null ;
73
64
}
74
65
75
- fclose ($ fp );
76
-
77
- return ltrim ($ namespace . '\\' . $ class , '\\' );
66
+ return $ namespace . '\\' . $ class ;
78
67
}
79
68
}
0 commit comments