Take an optional ApplicationDomain on a few methods that create classes.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5226 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ray Greenwell
2008-07-10 20:43:59 +00:00
parent 1578adceb1
commit 8c17cb5b24
+19 -7
View File
@@ -21,6 +21,8 @@
package com.threerings.util { package com.threerings.util {
import flash.system.ApplicationDomain;
import flash.utils.describeType; import flash.utils.describeType;
import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedClassName;
import flash.utils.getDefinitionByName; import flash.utils.getDefinitionByName;
@@ -62,9 +64,9 @@ public class ClassUtil
* Return a new instance that is the same class as the specified * Return a new instance that is the same class as the specified
* object. The class must have a zero-arg constructor. * object. The class must have a zero-arg constructor.
*/ */
public static function newInstance (obj :Object) :Object public static function newInstance (obj :Object, appDom :ApplicationDomain = null) :Object
{ {
var clazz :Class = getClass(obj); var clazz :Class = getClass(obj, appDom);
return new clazz(); return new clazz();
} }
@@ -73,16 +75,26 @@ public class ClassUtil
return (getQualifiedClassName(obj1) == getQualifiedClassName(obj2)); return (getQualifiedClassName(obj1) == getQualifiedClassName(obj2));
} }
public static function getClass (obj :Object) :Class public static function getClass (obj :Object, appDom :ApplicationDomain = null) :Class
{ {
return getClassByName(getQualifiedClassName(obj)); return getClassByName(getQualifiedClassName(obj), appDom);
} }
public static function getClassByName (cname :String) :Class public static function getClassByName (cname :String, appDom :ApplicationDomain = null) :Class
{ {
try { try {
// see also ApplicationDomain.currentDomain.getClass(cname) cname = cname.replace("::", ".");
return (getDefinitionByName(cname.replace("::", ".")) as Class); if (appDom != null) {
try {
var c :Class = appDom.getDefinition(cname) as Class;
if (c != null) {
return c;
}
} catch (err :Error) {
// fall through
}
}
return (getDefinitionByName(cname) as Class);
} catch (error :ReferenceError) { } catch (error :ReferenceError) {
var log :Log = Log.getLog(ClassUtil); var log :Log = Log.getLog(ClassUtil);