2020 */
2121class PhpName implements Hashable
2222{
23+ const TYPE_NAMESPACE = 1 ;
24+ const TYPE_USE = 2 ;
25+ const TYPE_CLASS = 3 ;
26+ const TYPE_USAGE = 4 ;
27+
2328 private $ fullyQualifiedName ;
2429 private $ relativeName ;
30+ private $ type ;
2531
2632 static public function createDeclarationName ($ fullyQualifiedName )
2733 {
2834 $ parts = self ::stringToParts ($ fullyQualifiedName );
2935
3036 return new PhpName (
3137 $ fullyQualifiedName ,
32- end ($ parts )
38+ end ($ parts ),
39+ self ::TYPE_CLASS
3340 );
3441 }
3542
36- public function __construct ($ fullyQualifiedName , $ relativeName )
43+ public function __construct ($ fullyQualifiedName , $ relativeName, $ type = self :: TYPE_USAGE )
3744 {
3845 $ this ->fullyQualifiedName = $ fullyQualifiedName ;
3946 $ this ->relativeName = $ relativeName ;
47+ $ this ->type = $ type ;
4048 }
4149
4250 /**
@@ -96,7 +104,7 @@ public function change(PhpName $from, PhpName $to)
96104 $ relativeNewParts = array_slice ($ newParts , -1 * count (explode ('\\' , $ this ->relativeName )));
97105 }
98106
99- return new PhpName (self ::partsToString ($ newParts ), self ::partsToString ($ relativeNewParts ));
107+ return new PhpName (self ::partsToString ($ newParts ), self ::partsToString ($ relativeNewParts ), $ this -> type );
100108 }
101109
102110 private function adjustSize ($ from , $ newParts )
@@ -128,7 +136,7 @@ public function namespaceName()
128136
129137 $ name = self ::partsToString ($ parts );
130138
131- return new PhpName ($ name , $ name );
139+ return new PhpName ($ name , $ name, self :: TYPE_NAMESPACE );
132140 }
133141
134142 public function shortName ()
@@ -161,7 +169,7 @@ public function hashCode()
161169
162170 public function fullyQualified ()
163171 {
164- return new PhpName ($ this ->fullyQualifiedName , $ this ->fullyQualifiedName );
172+ return new PhpName ($ this ->fullyQualifiedName , $ this ->fullyQualifiedName , $ this -> type );
165173 }
166174
167175 static private function partsToString ($ parts )
@@ -173,4 +181,9 @@ static private function stringToParts($string)
173181 {
174182 return explode ('\\' , $ string );
175183 }
184+
185+ public function type ()
186+ {
187+ return $ this ->type ;
188+ }
176189}
0 commit comments