@@ -18,10 +18,6 @@ class PhpReflection
1818{
1919 use Nette \StaticClass;
2020
21- /** @var array for expandClassName() */
22- private static $ cache = [];
23-
24-
2521 /**
2622 * Returns an annotation value.
2723 * @return string|NULL
@@ -127,11 +123,7 @@ public static function expandClassName($name, \ReflectionClass $rc)
127123 return ltrim ($ name , '\\' );
128124 }
129125
130- $ uses = & self ::$ cache [$ rc ->getName ()];
131- if ($ uses === NULL ) {
132- self ::$ cache = self ::parseUseStatemenets (file_get_contents ($ rc ->getFileName ()), $ rc ->getName ()) + self ::$ cache ;
133- $ uses = & self ::$ cache [$ rc ->getName ()];
134- }
126+ $ uses = self ::getUseStatements ($ rc );
135127 $ parts = explode ('\\' , $ name , 2 );
136128 if (isset ($ uses [$ parts [0 ]])) {
137129 $ parts [0 ] = $ uses [$ parts [0 ]];
@@ -146,10 +138,28 @@ public static function expandClassName($name, \ReflectionClass $rc)
146138 }
147139
148140
141+ /**
142+ * @return array of [alias => class]
143+ */
144+ public static function getUseStatements (\ReflectionClass $ class )
145+ {
146+ static $ cache = [];
147+ if (!isset ($ cache [$ name = $ class ->getName ()])) {
148+ if ($ class ->isInternal ()) {
149+ $ cache [$ name ] = [];
150+ } else {
151+ $ code = file_get_contents ($ class ->getFileName ());
152+ $ cache = self ::parseUseStatemenets ($ code , $ name ) + $ cache ;
153+ }
154+ }
155+ return $ cache [$ name ];
156+ }
157+
158+
149159 /**
150160 * Parses PHP code.
151161 * @param string
152- * @return array
162+ * @return array of [class => [alias => class, ...]]
153163 */
154164 public static function parseUseStatemenets ($ code , $ forClass = NULL )
155165 {
0 commit comments