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 {
import flash.system.ApplicationDomain;
import flash.utils.describeType;
import flash.utils.getQualifiedClassName;
import flash.utils.getDefinitionByName;
@@ -62,9 +64,9 @@ public class ClassUtil
* Return a new instance that is the same class as the specified
* 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();
}
@@ -73,16 +75,26 @@ public class ClassUtil
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 {
// see also ApplicationDomain.currentDomain.getClass(cname)
return (getDefinitionByName(cname.replace("::", ".")) as Class);
cname = cname.replace("::", ".");
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) {
var log :Log = Log.getLog(ClassUtil);