diff --git a/src/as/com/threerings/io/SimpleStreamableObject.as b/src/as/com/threerings/io/SimpleStreamableObject.as index 3dc4ce18e..dfd00bc3e 100644 --- a/src/as/com/threerings/io/SimpleStreamableObject.as +++ b/src/as/com/threerings/io/SimpleStreamableObject.as @@ -21,7 +21,9 @@ package com.threerings.io { +import com.threerings.util.ClassUtil; import com.threerings.util.StringBuilder; +import com.threerings.util.StringUtil; /** * A simple serializable object implements the {@link Streamable} @@ -48,8 +50,9 @@ public class SimpleStreamableObject implements Streamable public function toString () :String { var buf :StringBuilder = new StringBuilder("["); + buf.append(ClassUtil.tinyClassName(this)).append("("); toStringBuilder(buf); - return buf.append("]").toString(); + return buf.append(")]").toString(); } /** @@ -58,7 +61,7 @@ public class SimpleStreamableObject implements Streamable */ protected function toStringBuilder (buf :StringBuilder): void { - // TODO: StringUtil.fieldsToString(buf, this); + StringUtil.fieldsToString(buf, this); } } } diff --git a/src/as/com/threerings/util/StringUtil.as b/src/as/com/threerings/util/StringUtil.as index ee2d4e9b3..a266db53d 100644 --- a/src/as/com/threerings/util/StringUtil.as +++ b/src/as/com/threerings/util/StringUtil.as @@ -23,6 +23,8 @@ package com.threerings.util { import flash.utils.ByteArray; +import flash.utils.describeType; // function import + import mx.utils.*; public class StringUtil @@ -202,6 +204,34 @@ public class StringUtil return String(obj); } + /** + * Return a string containing all the public fields of the object + */ + public static function fieldsToString (buf :StringBuilder, obj :Object) :void + { + var desc :XML = describeType(obj); + var appended :Boolean = false; + for each (var varName :String in desc..variable.@name) { + if (appended) { + buf.append(", "); + } + buf.append(varName, "=", obj[varName]); + appended = true; + } + } + + /** + * Return a pretty basic toString of the supplied Object. + */ + public static function simpleToString (obj :Object) :String + { + var buf :StringBuilder = new StringBuilder("["); + buf.append(ClassUtil.tinyClassName(obj)); + buf.append("("); + fieldsToString(buf, obj); + return buf.append(")]").toString(); + } + /** * Truncate the specified String if it is longer than maxLength. * The string will be truncated at a position such that it is