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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user