From f155af12d62b5ac46335b8204593fd6b72e168bb Mon Sep 17 00:00:00 2001 From: mdb Date: Wed, 5 Feb 2003 00:20:35 +0000 Subject: [PATCH] Add support for custom toString() methods on a per-field basis. It's slow, but it's damned cool! git-svn-id: https://samskivert.googlecode.com/svn/trunk@1049 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- .../src/java/com/samskivert/util/StringUtil.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/projects/samskivert/src/java/com/samskivert/util/StringUtil.java b/projects/samskivert/src/java/com/samskivert/util/StringUtil.java index 8464e48a..d172581c 100644 --- a/projects/samskivert/src/java/com/samskivert/util/StringUtil.java +++ b/projects/samskivert/src/java/com/samskivert/util/StringUtil.java @@ -1,5 +1,5 @@ // -// $Id: StringUtil.java,v 1.54 2003/02/04 03:01:28 mdb Exp $ +// $Id: StringUtil.java,v 1.55 2003/02/05 00:20:35 mdb Exp $ // // samskivert library - useful routines for java programs // Copyright (C) 2001 Michael Bayne @@ -25,6 +25,7 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.security.MessageDigest; @@ -503,7 +504,7 @@ public class StringUtil Field[] fields = clazz.getFields(); int written = 0; - // we only want non-static, non-final, non-transient fields + // we only want non-static fields for (int i = 0; i < fields.length; i++) { int mods = fields[i].getModifiers(); if ((mods & Modifier.PUBLIC) == 0 || @@ -515,9 +516,16 @@ public class StringUtil buf.append(sep); } + // look for a toString() method for this field buf.append(fields[i].getName()).append("="); try { - toString(buf, fields[i].get(object)); + try { + Method meth = clazz.getMethod( + fields[i].getName() + "ToString", new Class[0]); + buf.append(meth.invoke(object, null)); + } catch (NoSuchMethodException nsme) { + toString(buf, fields[i].get(object)); + } } catch (Exception e) { buf.append(""); }