@@ -36,15 +36,17 @@ public function getRootNode(): self
3636 return $ node ;
3737 }
3838
39- public function getName (): string
39+ public function getName (bool $ emptyParent = false ): string
4040 {
4141 if ($ this ->parent && str_contains ($ this ->name , '$parent ' )) {
4242 $ parent = $ this ;
4343 $ parentName = '' ;
44- while ($ parent = $ parent ->getParent ()) {
45- $ parentName = $ parent ->getName ();
46- if ($ parentName ) {
47- break ;
44+ if (!$ emptyParent ) {
45+ while ($ parent = $ parent ->getParent ()) {
46+ $ parentName = $ parent ->getName ();
47+ if ($ parentName ) {
48+ break ;
49+ }
4850 }
4951 }
5052 return str_replace ('$parent ' , $ parentName , $ this ->name );
@@ -56,28 +58,15 @@ public function getName(): string
5658 public function getClassName (): ?string
5759 {
5860 $ prefix = $ this ->parent ?->getClassName() ?? '' ;
59- $ name = $ this ->getName () ?: $ this ->getParentKey ();
60- if (!$ name ) {
61+ $ name = $ this ->getName (true ) ?: $ this ->getParentKey ();
62+ if (!$ name || ( $ this -> parent && ! $ prefix ) ) {
6163 return null ;
6264 }
63-
64- $ segments = array_filter (explode ('. ' , str_replace ('_ ' , '. ' , $ prefix . '. ' . $ name )));
65-
66- $ deduped = [];
67- foreach ($ segments as $ segment ) {
68- foreach ($ deduped as $ existing ) {
69- if (str_starts_with ($ segment , $ existing )) {
70- $ segment = substr ($ segment , strlen ($ existing ));
71- $ segment = ltrim ($ segment , '._ ' );
72- }
73- }
74- $ deduped [] = $ segment ;
75- }
76-
65+
7766 return str_replace (
7867 ['$ ' , ' ' , '- ' , '. ' ],
7968 ['' , '_ ' , '_ ' , '_ ' ],
80- implode ( ' . ' , array_filter ( $ deduped ))
69+ $ prefix === '' ? $ name : $ prefix . ' _ ' . $ name ,
8170 );
8271 }
8372
0 commit comments