@@ -59,17 +59,28 @@ public static function type($arg) {
5959 /**
6060 * Returns a reflection package for a given argument.
6161 *
62- * @param string
62+ * @param string|object|lang.XPClass|lang.reflection.Type|ReflectionClass $arg
6363 * @return lang.reflection.Type
6464 * @throws lang.IllegalArgumentException
6565 */
6666 public static function package ($ arg ) {
67- $ cl = ClassLoader::getDefault ();
68- $ name = strtr ($ arg , '\\' , '. ' );
69- if ($ cl ->providesPackage ($ name )) {
70- return new Package ($ name );
67+ if ($ arg instanceof XPClass) {
68+ return new Package ($ arg ->getPackage ()->getName ());
69+ } else if ($ arg instanceof \ReflectionClass) {
70+ return new Package ($ arg ->getNamespaceName ());
71+ } else if ($ arg instanceof Type) {
72+ return $ arg ->package ();
73+ } else if (is_object ($ arg )) {
74+ $ class = get_class ($ arg );
75+ return new Package (substr ($ class , 0 , strrpos ($ class , '\\' )));
76+ } else {
77+ $ cl = ClassLoader::getDefault ();
78+ $ name = strtr ($ arg , '\\' , '. ' );
79+ if ($ cl ->providesPackage ($ name )) {
80+ return new Package ($ name );
81+ }
82+ throw new IllegalArgumentException ('No package named ' .$ name );
7183 }
72- throw new IllegalArgumentException ('No package named ' .$ name );
7384 }
7485
7586 /**
0 commit comments