DebugUtils.as

Go to the documentation of this file.
00001 import gugga.debug.Debugger;
00002 import gugga.logging.Logger;
00003 import gugga.logging.publishers.SOSPublisher;
00004 import gugga.utils.ReflectUtil;
00005 import gugga.utils.SOSTraceUtil;
00006 
00007 class gugga.utils.DebugUtils 
00008 {       
00009         private static var mSOSTraceSocket : XMLSocket = new XMLSocket();
00010         private static var mSOSCommandSocket : XMLSocket = new XMLSocket();
00011         private static var mSocketsInitialized : Boolean = false;
00012         
00013         public static function setDebugMarker(aObject : Object, aMarker : String)
00014         {
00015                 aObject["___debug_marker"] = aMarker;
00016                 _global.ASSetPropFlags(aObject, "___debug_marker", 1, true);;
00017         }
00018 
00019         public static function getDebugMarker(aObject : Object)
00020         {
00021                 return aObject["___debug_marker"];
00022         }
00023         
00024         public static function getCallContextString(aContextObject, aCallArguments) : String
00025         {
00026                 var argumentsArray : Array = aCallArguments;
00027                 var argumentsString : String = arrayToString(argumentsArray);
00028                 
00029                 var contextMethod : Function = aCallArguments.callee;           
00030                 var typeAndMethodInfo : Array; 
00031                 
00032                 if(typeof(aContextObject) == "function")
00033                 {
00034                         typeAndMethodInfo = ReflectUtil.getTypeAndMethodInfoByType(aContextObject, contextMethod);
00035                 }
00036                 else
00037                 {
00038                         typeAndMethodInfo = ReflectUtil.getTypeAndMethodInfoByInstance(aContextObject, contextMethod);
00039                 }
00040 
00041                 var contextString : String;
00042                 contextString = typeAndMethodInfo[1] + "." + typeAndMethodInfo[2] + "(" + argumentsString + ")";
00043                 
00044                 return contextString;
00045         }
00046         
00047         private static function arrayToString(aArray : Array) : String
00048         {
00049                 var result : String = "";
00050 
00051                 for(var i : Number = 0; i < aArray.length; i++)
00052                 {
00053                         if(result != "")
00054                         {
00055                                 result += ", "; 
00056                         }
00057                         
00058                         result += objectToString(aArray[i]);    
00059                 }
00060                 
00061                 return result;
00062         }
00063         
00064         //TODO: should be moved in another class
00065         public static function objectToString(aObject) : String
00066         {
00067                 var result : String = "";
00068                 
00069                 if(aObject instanceof Array)
00070                 {
00071                         var objectAsArray : Array = aObject;
00072                         result = "[" + arrayToString(objectAsArray) + "]";
00073                 }
00074                 else
00075                 {
00076                         switch(typeof(aObject))
00077                         {
00078                                 case "string":
00079                                         result = "\"" + aObject + "\"";
00080                                 break;
00081                                 
00082                                 case "function":
00083                                         if(aObject[ReflectUtil.METHOD_NAME_KEY])
00084                                         {
00085                                                 result = "[Function: " + aObject[ReflectUtil.METHOD_NAME_KEY] + "]";
00086                                         }
00087                                         else
00088                                         {
00089                                                 result = "[Function]";
00090                                         }
00091                                 break;
00092                                 
00093                                 case "object":
00094                                         result = aObject.toString();
00095                                         
00096                                         if(result == "[object Object]")
00097                                         {
00098                                                 result = ReflectUtil.getTypeNameForInstance(aObject);
00099                                         }
00100                                         
00101                                         if(!result)
00102                                         {
00103                                                 result = "[Object]";
00104                                         }
00105                                 break;
00106                                 
00107                                 case "movieclip":
00108                                         result = aObject;
00109                                 break;
00110                                 
00111                                 // "number", "boolean", null, undefined
00112                                 default:
00113                                         result = aObject.toString();
00114                         }
00115                 }
00116                 
00117                 return result;
00118         }
00119                 
00120         public static function trace(aTracedObject)
00121         {
00122                 if(aTracedObject instanceof Object)
00123                 {
00124                         dump(aTracedObject);
00125                 }
00126                 else
00127                 {
00128                         SOSTraceUtil.trace(aTracedObject);
00129                 }
00130         }
00131         
00132         public static function traceContext(aTracedObject, contextObject:Object, contextArguments:Object)
00133         {
00134                 if(aTracedObject instanceof Object)
00135                 {
00136                         dump(aTracedObject, null, null, contextObject, contextArguments);
00137                 }
00138                 else
00139                 {
00140                         var contextString : String = getCallContextString(contextObject, contextArguments);
00141                         var logger : Logger = Logger.getLoggerFor(contextObject);
00142                         
00143                         logger.info(aTracedObject.toString() + " [" + contextString + "]");
00144                 }
00145         }
00146         
00147         public static function dump(o:Object, marker:String, recurseDepth:Number) : Void 
00148         {
00149                 var title : String = getDumpTitle(o, marker);
00150                 var dumpString : String = getDumpString(o, recurseDepth, 0);
00151         
00152                 SOSTraceUtil.traceFoldedMessage(title, dumpString);
00153         }
00154 
00155         public static function dumpContext(o:Object, marker:String, recurseDepth:Number, contextObject:Object, contextArguments:Object) : Void 
00156         {
00157                 var title : String = getDumpTitle(o, marker);
00158                 var dumpString : String = getDumpString(o, recurseDepth, 0);
00159                 var contextString : String = getCallContextString(contextObject, contextArguments);
00160                 
00161                 title += " [" + contextString + "]";
00162         
00163                 var logger : Logger = Logger.getLoggerFor(contextObject);
00164                 var dumpStringPackage : String = SOSPublisher.getFoldedMessagePackage(title, dumpString);
00165                 
00166                 logger.info(dumpStringPackage);
00167         }
00168         
00169         public static function getDumpTitle(aObject:Object, aMarker:String) : String
00170         {
00171                 var title : String;
00172                 
00173                 var objectAsString : String = objectToString(aObject);
00174                 
00175                 if(aMarker)
00176                 {
00177                         setDebugMarker(aObject, aMarker);
00178                         title = aMarker + " <" + objectAsString + ">";
00179                 }
00180                 else
00181                 {
00182                         title = objectAsString;
00183                 }
00184                 
00185                 return title;
00186         }
00187         
00188         public static function getDumpString(aObject:Object, aRecurseDepth:Number, indent:Number) : String 
00189         {
00190                 if(aRecurseDepth == undefined)
00191                 {
00192                         aRecurseDepth = 0;
00193                 }
00194                 
00195                 if(indent == undefined)
00196                 {
00197                         indent = 0;
00198                 }
00199                 
00200                 var dumpResult : String = "";
00201                 
00202                 var lead:String = "";
00203                 for(var i=0;i<indent;i++)
00204                 {
00205                         lead += ".   ";
00206                 }
00207                 
00208                 for (var prop:String in aObject)
00209                 {       
00210                         var obj:String;
00211                         if(aObject[prop] instanceof Array)
00212                         {
00213                             obj = "[Array]";
00214                         }
00215                         else
00216                         {
00217                         obj = objectToString(aObject[prop]);
00218                 }
00219                                         
00220                         dumpResult += lead + prop + ": " + obj + "\n";// + " (" + typeof o[prop] + ")");
00221                         
00222                         if(aRecurseDepth > 0)
00223                         {
00224                                 var typeofObjectProperty : String = typeof(aObject[prop]);
00225                                 if(typeofObjectProperty == "object" || typeofObjectProperty == "movieclip" || typeofObjectProperty == "function")
00226                                 {
00227                                         dumpResult += getDumpString(aObject[prop], aRecurseDepth - 1, indent+1);
00228                                 }
00229                         }
00230                 }
00231                 
00232                 return dumpResult;
00233         }
00234 }

Generated on Fri May 11 17:12:42 2007 for GuggaFramework by  doxygen 1.5.2