@@ -25,6 +25,8 @@ class BetterReflectionParser implements ParserInterface
25
25
*/
26
26
private ?array $ aliases = null ;
27
27
28
+ private ?array $ classAliases = null ;
29
+
28
30
/**
29
31
* @param ReaderInterface[] $sources
30
32
* @param ReaderInterface[] $resolvingSources These sources are used to resolve reflections but won't generate stubs
@@ -58,6 +60,9 @@ public function parse(): void
58
60
);
59
61
}
60
62
63
+ $ classAliases = [];
64
+ $ secondarySourceLocators [] = new AliasSourceLocator ($ mainSourceLocator , $ classAliases );
65
+
61
66
// php internals
62
67
$ secondarySourceLocators [] = new MemoizingSourceLocator (
63
68
new PhpInternalSourceLocator ($ astLocator , new ReflectionSourceStubber ())
@@ -74,10 +79,19 @@ public function parse(): void
74
79
$ aliases = [];
75
80
76
81
$ classIdent = new IdentifierType (IdentifierType::IDENTIFIER_CLASS );
82
+
77
83
foreach ($ reflector ->reflectAllClasses () as $ class ) {
78
84
$ className = $ class ->getName ();
79
- $ classes [$ class ->getNamespaceName ()][$ className ] = new ReflectionClass ($ class );
80
85
86
+ $ docComment = $ class ->getDocComment () ?? '' ;
87
+ $ classAliasPos = \strpos ($ docComment , '@alias ' );
88
+ if ($ classAliasPos !== false ) {
89
+ $ lineEnding = \strpos ($ docComment , "\n" , $ classAliasPos );
90
+ $ alias = \ltrim (\substr ($ docComment , $ classAliasPos + 7 , $ lineEnding - $ classAliasPos - 7 ), '\\' );
91
+ $ classAliases [$ alias ] = \ltrim ($ className , '\\' );
92
+ }
93
+
94
+ $ classes [$ class ->getNamespaceName ()][$ className ] = new ReflectionClass ($ class );
81
95
$ aliases [self ::TYPE_CLASS ][$ className ] = $ astLocator ->getNamespaceUses ($ classIdent , $ className );
82
96
}
83
97
@@ -97,6 +111,7 @@ public function parse(): void
97
111
// $this->functions = $functions;
98
112
// $this->constants = $constants;
99
113
$ this ->aliases = $ aliases ;
114
+ $ this ->classAliases = $ classAliases ;
100
115
}
101
116
102
117
/**
@@ -153,4 +168,16 @@ public function getAliases(string $classOrFunctionName, string $type): array
153
168
154
169
return $ this ->aliases [$ type ][$ classOrFunctionName ];
155
170
}
171
+
172
+ /**
173
+ * @inheritdoc
174
+ */
175
+ public function getClassAliases (): array
176
+ {
177
+ if ($ this ->classAliases === null ) {
178
+ throw new \BadMethodCallException ('BetterReflectionParser::parse wasn \'t called yet! ' );
179
+ }
180
+
181
+ return $ this ->classAliases ;
182
+ }
156
183
}
0 commit comments