From 8c17cb5b249324b4cd0bd749454ddb2b4ae6d9b8 Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Thu, 10 Jul 2008 20:43:59 +0000 Subject: [PATCH] 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 --- src/as/com/threerings/util/ClassUtil.as | 26 ++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/as/com/threerings/util/ClassUtil.as b/src/as/com/threerings/util/ClassUtil.as index 97bad3932..72000622a 100644 --- a/src/as/com/threerings/util/ClassUtil.as +++ b/src/as/com/threerings/util/ClassUtil.as @@ -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);