ggregory 2003/12/28 17:47:02 Modified: lang/src/java/org/apache/commons/lang/builder ReflectionToStringBuilder.java Log: Reformat (Eclipse) for line-length 120 and add missing @throws documentation. Revision Changes Path 1.16 +467 -299 jakarta-commons/lang/src/java/org/apache/commons/lang/builder/ReflectionToStringBuilder.java Index: ReflectionToStringBuilder.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/ReflectionToStringBuilder.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- ReflectionToStringBuilder.java 2 Dec 2003 19:11:58 -0000 1.15 +++ ReflectionToStringBuilder.java 29 Dec 2003 01:47:02 -0000 1.16 @@ -58,36 +58,53 @@ import java.lang.reflect.Modifier; import java.util.HashSet; import java.util.Set; - import org.apache.commons.lang.ClassUtils; /** - * <p>Assists in implementing [EMAIL PROTECTED] Object#toString()} methods using reflection.</p> - * - * <p>This class uses reflection to determine the fields to append. - * Because these fields are usually private, the class - * uses <code>AccessibleObject.setAccessible</code> to - * change the visibility of the fields. This will fail under a security manager, - * unless the appropriate permissions are set up correctly.</p> - * - * <p>A typical invocation for this method would look like:</p> + * <p> + * Assists in implementing [EMAIL PROTECTED] Object#toString()}methods using reflection. + * </p> + * + * <p> + * This class uses reflection to determine the fields to append. Because these + * fields are usually private, the class uses + * [EMAIL PROTECTED] java.lang.reflect.AccessibleObject#setAccessible(java.lang.reflect.AccessibleObject[], boolean)} + * to change the visibility of the fields. This will fail under a security + * manager, unless the appropriate permissions are set up correctly. + * </p> + * + * <p> + * A typical invocation for this method would look like: + * </p> + * * <pre> * public String toString() { * return ReflectionToStringBuilder.toString(this); * }</pre> - * - * <p>You can also use the builder to debug 3rd party objects:</p> + * + * + * + * <p> + * You can also use the builder to debug 3rd party objects: + * </p> + * * <pre> * System.out.println("An object: " + ReflectionToStringBuilder.toString(anObject));</pre> * - * <p>A subclass can control field output by overriding the methods: - * <ul> - * <li>[EMAIL PROTECTED] #accept(java.lang.reflect.Field)}</li> - * <li>[EMAIL PROTECTED] #getValue(java.lang.reflect.Field)}</li> + * + * + * <p> + * A subclass can control field output by overriding the methods: + * <ul> + * <li>[EMAIL PROTECTED] #accept(java.lang.reflect.Field)}</li> + * <li>[EMAIL PROTECTED] #getValue(java.lang.reflect.Field)}</li> * </ul> * </p> - * <p>For example, this method does <i>not</i> include the <code>password</code> field in the returned - * <code>String</code>:</p> + * <p> + * For example, this method does <i>not</i> include the <code>password</code> + * field in the returned <code>String</code>: + * </p> + * * <pre> * public String toString() { * return (new ReflectionToStringBuilder(this) { @@ -97,250 +114,342 @@ * }).toString(); * }</pre> * - * <p>The exact format of the <code>toString</code> is determined by - * the [EMAIL PROTECTED] ToStringStyle} passed into the constructor.</p> - * + * + * + * <p> + * The exact format of the <code>toString</code> is determined by the + * [EMAIL PROTECTED] ToStringStyle}passed into the constructor. + * </p> + * * @author Gary Gregory * @author Stephen Colebourne * @author Pete Gieser * @since 2.0 - * @version $Id$ + * @version $Id: ReflectionToStringBuilder.java,v 1.15 2003/12/02 19:11:58 + * ggregory Exp $ */ public class ReflectionToStringBuilder extends ToStringBuilder { - /** - * <p>A registry of objects used by <code>reflectionToString</code> methods - * to detect cyclical object references and avoid infinite loops.</p> + * <p> + * A registry of objects used by <code>reflectionToString</code> methods + * to detect cyclical object references and avoid infinite loops. + * </p> */ private static ThreadLocal registry = new ThreadLocal() { protected synchronized Object initialValue() { - // The HashSet implementation is not synchronized, - // which is just what we need here. - return new HashSet(); + // The HashSet implementation is not synchronized, + // which is just what we need here. + return new HashSet(); } }; /** - * <p>Returns the registry of objects being traversed by the - * <code>reflectionToString</code> methods in the current thread.</p> - * - * @return Set the registry of objects being traversed + * <p> + * Returns the registry of objects being traversed by the <code>reflectionToString</code> + * methods in the current thread. + * </p> + * + * @return Set the registry of objects being traversed */ static Set getRegistry() { return (Set) registry.get(); } /** - * <p>Returns <code>true</code> if the registry contains the given object. - * Used by the reflection methods to avoid infinite loops.</p> - * - * @param value The object to lookup in the registry. - * @return boolean <code>true</code> if the registry contains the given object. + * <p> + * Returns <code>true</code> if the registry contains the given object. + * Used by the reflection methods to avoid infinite loops. + * </p> + * + * @param value + * The object to lookup in the registry. + * @return boolean <code>true</code> if the registry contains the given + * object. */ static boolean isRegistered(Object value) { return getRegistry().contains(value); } /** - * <p>Registers the given object. - * Used by the reflection methods to avoid infinite loops.</p> + * <p> + * Registers the given object. Used by the reflection methods to avoid + * infinite loops. + * </p> * - * @param value The object to register. + * @param value + * The object to register. */ static void register(Object value) { getRegistry().add(value); } /** - * <p>This method uses reflection to build a suitable - * <code>toString</code> using the default <code>ToStringStyle</code>. - * - * <p>It uses <code>AccessibleObject.setAccessible</code> to gain access to private - * fields. This means that it will throw a security exception if run - * under a security manager, if the permissions are not set up correctly. - * It is also not as efficient as testing explicitly.</p> - * - * <p>Transient members will be not be included, as they are likely derived. - * Static fields will not be included. Superclass fields will be appended.</p> - * - * @param object the Object to be output + * <p> + * This method uses reflection to build a suitable <code>toString</code> + * using the default <code>ToStringStyle</code>. + * + * <p> + * It uses <code>AccessibleObject.setAccessible</code> to gain access to + * private fields. This means that it will throw a security exception if + * run under a security manager, if the permissions are not set up + * correctly. It is also not as efficient as testing explicitly. + * </p> + * + * <p> + * Transient members will be not be included, as they are likely derived. + * Static fields will not be included. Superclass fields will be appended. + * </p> + * + * @param object + * the Object to be output * @return the String result - * @throws IllegalArgumentException if the Object is <code>null</code> + * @throws IllegalArgumentException + * if the Object is <code>null</code> */ public static String toString(Object object) { return toString(object, null, false, false, null); } /** - * <p>This method uses reflection to build a suitable - * <code>toString</code>.</p> - * - * <p>It uses <code>AccessibleObject.setAccessible</code> to gain access to private - * fields. This means that it will throw a security exception if run - * under a security manager, if the permissions are not set up correctly. - * It is also not as efficient as testing explicitly.</p> - * - * <p>Transient members will be not be included, as they are likely derived. - * Static fields will not be included. Superclass fields will be appended.</p> - * - * <p>If the style is <code>null</code>, the default - * <code>ToStringStyle</code> is used.</p> - * - * @param object the Object to be output - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> + * <p> + * This method uses reflection to build a suitable <code>toString</code>. + * </p> + * + * <p> + * It uses <code>AccessibleObject.setAccessible</code> to gain access to + * private fields. This means that it will throw a security exception if + * run under a security manager, if the permissions are not set up + * correctly. It is also not as efficient as testing explicitly. + * </p> + * + * <p> + * Transient members will be not be included, as they are likely derived. + * Static fields will not be included. Superclass fields will be appended. + * </p> + * + * <p> + * If the style is <code>null</code>, the default <code>ToStringStyle</code> + * is used. + * </p> + * + * @param object + * the Object to be output + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> * @return the String result - * @throws IllegalArgumentException if the Object or - * <code>ToStringStyle</code> is <code>null</code> + * @throws IllegalArgumentException + * if the Object or <code>ToStringStyle</code> is <code>null</code> */ public static String toString(Object object, ToStringStyle style) { return toString(object, style, false, false, null); } /** - * <p>This method uses reflection to build a suitable - * <code>toString</code>.</p> - * - * <p>It uses <code>AccessibleObject.setAccessible</code> to gain access to private - * fields. This means that it will throw a security exception if run - * under a security manager, if the permissions are not set up correctly. - * It is also not as efficient as testing explicitly. </p> - * - * <p>If the <code>outputTransients</code> is <code>true</code>, - * transient members will be output, otherwise they are ignored, - * as they are likely derived fields, and not part of the value of the - * Object.</p> - * - * <p>Static fields will not be included. Superclass fields will be appended.</p> - * - * <p>If the style is <code>null</code>, the default - * <code>ToStringStyle</code> is used.</p> - * - * @param object the Object to be output - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param outputTransients whether to include transient fields + * <p> + * This method uses reflection to build a suitable <code>toString</code>. + * </p> + * + * <p> + * It uses <code>AccessibleObject.setAccessible</code> to gain access to + * private fields. This means that it will throw a security exception if + * run under a security manager, if the permissions are not set up + * correctly. It is also not as efficient as testing explicitly. + * </p> + * + * <p> + * If the <code>outputTransients</code> is <code>true</code>, + * transient members will be output, otherwise they are ignored, as they + * are likely derived fields, and not part of the value of the Object. + * </p> + * + * <p> + * Static fields will not be included. Superclass fields will be appended. + * </p> + * + * <p> + * If the style is <code>null</code>, the default <code>ToStringStyle</code> + * is used. + * </p> + * + * @param object + * the Object to be output + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param outputTransients + * whether to include transient fields * @return the String result - * @throws IllegalArgumentException if the Object is <code>null</code> + * @throws IllegalArgumentException + * if the Object is <code>null</code> */ public static String toString(Object object, ToStringStyle style, boolean outputTransients) { return toString(object, style, outputTransients, false, null); } /** - * <p>This method uses reflection to build a suitable - * <code>toString</code>.</p> - * - * <p>It uses <code>AccessibleObject.setAccessible</code> to gain access to private - * fields. This means that it will throw a security exception if run - * under a security manager, if the permissions are not set up correctly. - * It is also not as efficient as testing explicitly.</p> - * - * <p>If the <code>outputTransients</code> is <code>true</code>, - * transient fields will be output, otherwise they are ignored, - * as they are likely derived fields, and not part of the value of the - * Object.</p> - * - * <p>If the <code>outputStatics</code> is <code>true</code>, - * static fields will be output, otherwise they are ignored.</p> - * - * <p>Static fields will not be included. Superclass fields will be appended.</p> - * - * <p>If the style is <code>null</code>, the default - * <code>ToStringStyle</code> is used.</p> - * - * @param object the Object to be output - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param outputTransients whether to include transient fields - * @param outputStatics whether to include transient fields + * <p> + * This method uses reflection to build a suitable <code>toString</code>. + * </p> + * + * <p> + * It uses <code>AccessibleObject.setAccessible</code> to gain access to + * private fields. This means that it will throw a security exception if + * run under a security manager, if the permissions are not set up + * correctly. It is also not as efficient as testing explicitly. + * </p> + * + * <p> + * If the <code>outputTransients</code> is <code>true</code>, + * transient fields will be output, otherwise they are ignored, as they are + * likely derived fields, and not part of the value of the Object. + * </p> + * + * <p> + * If the <code>outputStatics</code> is <code>true</code>, static + * fields will be output, otherwise they are ignored. + * </p> + * + * <p> + * Static fields will not be included. Superclass fields will be appended. + * </p> + * + * <p> + * If the style is <code>null</code>, the default <code>ToStringStyle</code> + * is used. + * </p> + * + * @param object + * the Object to be output + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param outputTransients + * whether to include transient fields + * @param outputStatics + * whether to include transient fields * @return the String result - * @throws IllegalArgumentException if the Object is <code>null</code> + * @throws IllegalArgumentException + * if the Object is <code>null</code> */ public static String toString(Object object, ToStringStyle style, boolean outputTransients, boolean outputStatics) { return toString(object, style, outputTransients, outputStatics, null); } /** - * <p>This method uses reflection to build a suitable - * <code>toString</code>.</p> - * - * <p>It uses <code>AccessibleObject.setAccessible</code> to gain access to private - * fields. This means that it will throw a security exception if run - * under a security manager, if the permissions are not set up correctly. - * It is also not as efficient as testing explicitly. </p> - * - * <p>If the <code>outputTransients</code> is <code>true</code>, - * transient fields will be output, otherwise they are ignored, - * as they are likely derived fields, and not part of the value of the - * Object.</p> - * - * <p>If the <code>outputStatics</code> is <code>true</code>, - * static fields will be output, otherwise they are ignored.</p> - * - * <p>Superclass fields will be appended up to and including the - * specified superclass. A null superclass is treated as - * <code>java.lang.Object</code>.</p> - * - * <p>If the style is <code>null</code>, the default - * <code>ToStringStyle</code> is used.</p> - * - * @param object the Object to be output - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param outputTransients whether to include transient fields - * @param outputStatics whether to include static fields - * @param reflectUpToClass the superclass to reflect up to (inclusive), - * may be <code>null</code> + * <p> + * This method uses reflection to build a suitable <code>toString</code>. + * </p> + * + * <p> + * It uses <code>AccessibleObject.setAccessible</code> to gain access to + * private fields. This means that it will throw a security exception if + * run under a security manager, if the permissions are not set up + * correctly. It is also not as efficient as testing explicitly. + * </p> + * + * <p> + * If the <code>outputTransients</code> is <code>true</code>, + * transient fields will be output, otherwise they are ignored, as they are + * likely derived fields, and not part of the value of the Object. + * </p> + * + * <p> + * If the <code>outputStatics</code> is <code>true</code>, static + * fields will be output, otherwise they are ignored. + * </p> + * + * <p> + * Superclass fields will be appended up to and including the specified + * superclass. A null superclass is treated as <code>java.lang.Object</code>. + * </p> + * + * <p> + * If the style is <code>null</code>, the default <code>ToStringStyle</code> + * is used. + * </p> + * + * @param object + * the Object to be output + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param outputTransients + * whether to include transient fields + * @param outputStatics + * whether to include static fields + * @param reflectUpToClass + * the superclass to reflect up to (inclusive), may be <code>null</code> * @return the String result - * @throws IllegalArgumentException if the Object is <code>null</code> + * @throws IllegalArgumentException + * if the Object is <code>null</code> */ - public static String toString(Object object, ToStringStyle style, boolean outputTransients, boolean outputStatics, Class reflectUpToClass) { - return new ReflectionToStringBuilder(object, style, null, reflectUpToClass, outputTransients, outputStatics).toString(); + public static String toString(Object object, ToStringStyle style, boolean outputTransients, boolean outputStatics, + Class reflectUpToClass) { + return new ReflectionToStringBuilder(object, style, null, reflectUpToClass, outputTransients, outputStatics) + .toString(); } /** - * <p>This method uses reflection to build a suitable - * <code>toString</code>.</p> - * - * <p>It uses <code>AccessibleObject.setAccessible</code> to gain access to private - * fields. This means that it will throw a security exception if run - * under a security manager, if the permissions are not set up correctly. - * It is also not as efficient as testing explicitly. </p> - * - * <p>If the <code>outputTransients</code> is <code>true</code>, - * transient members will be output, otherwise they are ignored, - * as they are likely derived fields, and not part of the value of the - * Object.</p> - * - * <p>Static fields will not be included. Superclass fields will be appended - * up to and including the specified superclass. A null superclass is treated - * as <code>java.lang.Object</code>.</p> - * - * <p>If the style is <code>null</code>, the default - * <code>ToStringStyle</code> is used.</p> - * - * @deprecated Use [EMAIL PROTECTED] #toString(Object,ToStringStyle,boolean,boolean,Class)} - * - * @param object the Object to be output - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param outputTransients whether to include transient fields - * @param reflectUpToClass the superclass to reflect up to (inclusive), - * may be <code>null</code> + * <p> + * This method uses reflection to build a suitable <code>toString</code>. + * </p> + * + * <p> + * It uses <code>AccessibleObject.setAccessible</code> to gain access to + * private fields. This means that it will throw a security exception if + * run under a security manager, if the permissions are not set up + * correctly. It is also not as efficient as testing explicitly. + * </p> + * + * <p> + * If the <code>outputTransients</code> is <code>true</code>, + * transient members will be output, otherwise they are ignored, as they + * are likely derived fields, and not part of the value of the Object. + * </p> + * + * <p> + * Static fields will not be included. Superclass fields will be appended + * up to and including the specified superclass. A null superclass is + * treated as <code>java.lang.Object</code>. + * </p> + * + * <p> + * If the style is <code>null</code>, the default <code>ToStringStyle</code> + * is used. + * </p> + * + * @deprecated Use + * [EMAIL PROTECTED] #toString(Object,ToStringStyle,boolean,boolean,Class)} + * + * @param object + * the Object to be output + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param outputTransients + * whether to include transient fields + * @param reflectUpToClass + * the superclass to reflect up to (inclusive), may be <code>null</code> * @return the String result - * @throws IllegalArgumentException if the Object is <code>null</code> + * @throws IllegalArgumentException + * if the Object is <code>null</code> */ public static String toString(Object object, ToStringStyle style, boolean outputTransients, Class reflectUpToClass) { return new ReflectionToStringBuilder(object, style, null, reflectUpToClass, outputTransients).toString(); } /** - * <p>Unregisters the given object.</p> - * - * <p>Used by the reflection methods to avoid infinite loops.</p> + * <p> + * Unregisters the given object. + * </p> + * + * <p> + * Used by the reflection methods to avoid infinite loops. + * </p> * - * @param value The object to unregister. + * @param value + * The object to unregister. */ static void unregister(Object value) { getRegistry().remove(value); @@ -362,51 +471,69 @@ private Class upToClass = null; /** - * <p>Constructor.</p> - * - * <p>This constructor outputs using the default style set with - * <code>setDefaultStyle</code>.</p> - * - * @param object the Object to build a <code>toString</code> for, - * must not be <code>null</code> - * @throws IllegalArgumentException if the Object passed in is - * <code>null</code> + * <p> + * Constructor. + * </p> + * + * <p> + * This constructor outputs using the default style set with <code>setDefaultStyle</code>. + * </p> + * + * @param object + * the Object to build a <code>toString</code> for, must not + * be <code>null</code> + * @throws IllegalArgumentException + * if the Object passed in is <code>null</code> */ public ReflectionToStringBuilder(Object object) { super(object); } /** - * <p>Constructor.</p> - * - * <p>If the style is <code>null</code>, the default style is used.</p> - * - * @param object the Object to build a <code>toString</code> for, - * must not be <code>null</code> - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @throws IllegalArgumentException if the Object passed in is - * <code>null</code> + * <p> + * Constructor. + * </p> + * + * <p> + * If the style is <code>null</code>, the default style is used. + * </p> + * + * @param object + * the Object to build a <code>toString</code> for, must not + * be <code>null</code> + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @throws IllegalArgumentException + * if the Object passed in is <code>null</code> */ public ReflectionToStringBuilder(Object object, ToStringStyle style) { super(object, style); } /** - * <p>Constructor.</p> - * - * <p>If the style is <code>null</code>, the default style is used.</p> - * - * <p>If the buffer is <code>null</code>, a new one is created.</p> - * - * @param object the Object to build a <code>toString</code> for, - * must not be <code>null</code> - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param buffer the <code>StringBuffer</code> to populate, may be - * <code>null</code> - * @throws IllegalArgumentException if the Object passed in is - * <code>null</code> + * <p> + * Constructor. + * </p> + * + * <p> + * If the style is <code>null</code>, the default style is used. + * </p> + * + * <p> + * If the buffer is <code>null</code>, a new one is created. + * </p> + * + * @param object + * the Object to build a <code>toString</code> for, must not + * be <code>null</code> + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param buffer + * the <code>StringBuffer</code> to populate, may be <code>null</code> + * @throws IllegalArgumentException + * if the Object passed in is <code>null</code> */ public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer) { super(object, style, buffer); @@ -415,24 +542,24 @@ /** * Constructor. * - * @deprecated Use [EMAIL PROTECTED] #ReflectionToStringBuilder(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)}. + * @deprecated Use + * [EMAIL PROTECTED] #ReflectionToStringBuilder(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)}. * - * @param object the Object to build a <code>toString</code> for, - * must not be <code>null</code> - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param buffer the <code>StringBuffer</code> to populate, may be - * <code>null</code> - * @param reflectUpToClass the superclass to reflect up to (inclusive), - * may be <code>null</code> - * @param outputTransients whether to include transient fields - */ - public ReflectionToStringBuilder( - Object object, - ToStringStyle style, - StringBuffer buffer, - Class reflectUpToClass, - boolean outputTransients) { + * @param object + * the Object to build a <code>toString</code> for, must not + * be <code>null</code> + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param buffer + * the <code>StringBuffer</code> to populate, may be <code>null</code> + * @param reflectUpToClass + * the superclass to reflect up to (inclusive), may be <code>null</code> + * @param outputTransients + * whether to include transient fields + */ + public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer, Class reflectUpToClass, + boolean outputTransients) { super(object, style, buffer); this.setUpToClass(reflectUpToClass); this.setAppendTransients(outputTransients); @@ -441,24 +568,23 @@ /** * Constructor. * - * @param object the Object to build a <code>toString</code> for, - * must not be <code>null</code> - * @param style the style of the <code>toString</code> to create, - * may be <code>null</code> - * @param buffer the <code>StringBuffer</code> to populate, may be - * <code>null</code> - * @param reflectUpToClass the superclass to reflect up to (inclusive), - * may be <code>null</code> - * @param outputTransients whether to include transient fields - * @param outputStatics whether to include static fields - */ - public ReflectionToStringBuilder( - Object object, - ToStringStyle style, - StringBuffer buffer, - Class reflectUpToClass, - boolean outputTransients, - boolean outputStatics) { + * @param object + * the Object to build a <code>toString</code> for, must not + * be <code>null</code> + * @param style + * the style of the <code>toString</code> to create, may be + * <code>null</code> + * @param buffer + * the <code>StringBuffer</code> to populate, may be <code>null</code> + * @param reflectUpToClass + * the superclass to reflect up to (inclusive), may be <code>null</code> + * @param outputTransients + * whether to include transient fields + * @param outputStatics + * whether to include static fields + */ + public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer, Class reflectUpToClass, + boolean outputTransients, boolean outputStatics) { super(object, style, buffer); this.setUpToClass(reflectUpToClass); this.setAppendTransients(outputTransients); @@ -468,11 +594,15 @@ /** * Returns whether or not to append the given <code>Field</code>. * <ul> - * <li>Transient fields are appended only if [EMAIL PROTECTED] #isAppendTransients()} returns <code>true</code>. - * <li>Static fields are appended only if [EMAIL PROTECTED] #isAppendStatics()} returns <code>true</code>. - * <li>Inner class fields are not appened.</li> + * <li>Transient fields are appended only if [EMAIL PROTECTED] #isAppendTransients()} + * returns <code>true</code>. + * <li>Static fields are appended only if [EMAIL PROTECTED] #isAppendStatics()} + * returns <code>true</code>. + * <li>Inner class fields are not appened.</li> * </ul> - * @param field The Field to test. + * + * @param field + * The Field to test. * @return Whether or not to append the given <code>Field</code>. */ protected boolean accept(Field field) { @@ -492,19 +622,26 @@ } /** - * <p>Appends the fields and values defined by the given object of the - * given Class.</p> - * - * <p>If a cycle is detected as an object is "toString()'ed", - * such an object is rendered as if <code>Object.toString()</code> - * had been called and not implemented by the object.</p> + * <p> + * Appends the fields and values defined by the given object of the given + * Class. + * </p> + * + * <p> + * If a cycle is detected as an object is "toString()'ed", such + * an object is rendered as if <code>Object.toString()</code> had been + * called and not implemented by the object. + * </p> * - * @param clazz The class of object parameter + * @param clazz + * The class of object parameter */ protected void appendFieldsIn(Class clazz) { if (isRegistered(this.getObject())) { - // The object has already been appended, therefore we have an object cycle. - // Append a simple Object.toString style string. The field name is already appended at this point. + // The object has already been appended, therefore we have an + // object cycle. + // Append a simple Object.toString style string. The field name is + // already appended at this point. this.appendAsObjectToString(this.getObject()); return; } @@ -521,16 +658,18 @@ String fieldName = field.getName(); if (this.accept(field)) { try { - // Warning: Field.get(Object) creates wrappers objects for primitive types. + // Warning: Field.get(Object) creates wrappers objects + // for primitive types. Object fieldValue = this.getValue(field); if (isRegistered(fieldValue) && !field.getType().isPrimitive()) { - // A known field value has already been appended, therefore we have an object cycle, + // A known field value has already been appended, + // therefore we have an object cycle, // append a simple Object.toString style string. this.getStyle().appendFieldStart(this.getStringBuffer(), fieldName); this.appendAsObjectToString(fieldValue); - // The recursion out of - // builder.append(fieldName, fieldValue); - // below will append the field + // The recursion out of + // builder.append(fieldName, fieldValue); + // below will append the field // end marker. } else { try { @@ -541,8 +680,10 @@ } } } catch (IllegalAccessException ex) { - //this can't happen. Would get a Security exception instead - //throw a runtime exception in case the impossible happens. + //this can't happen. Would get a Security exception + // instead + //throw a runtime exception in case the impossible + // happens. throw new InternalError("Unexpected IllegalAccessException: " + ex.getMessage()); } } @@ -553,7 +694,9 @@ } /** - * <p>Gets the last super class to stop appending fields for.</p> + * <p> + * Gets the last super class to stop appending fields for. + * </p> * * @return The last super class to stop appending fields for. */ @@ -562,13 +705,18 @@ } /** - * <p>Calls <code>java.lang.reflect.Field.get(Object)</code>.</p> - * - * @param field The Field to query. + * <p> + * Calls <code>java.lang.reflect.Field.get(Object)</code>. + * </p> + * + * @param field + * The Field to query. * @return The Object from the given Field. * * @throws IllegalArgumentException + * see [EMAIL PROTECTED] java.lang.reflect.Field#get(Object)} * @throws IllegalAccessException + * see [EMAIL PROTECTED] java.lang.reflect.Field#get(Object)} * * @see java.lang.reflect.Field#get(Object) */ @@ -577,7 +725,9 @@ } /** - * <p>Gets whether or not to append static fields.</p> + * <p> + * Gets whether or not to append static fields. + * </p> * * @return Whether or not to append static fields. */ @@ -586,7 +736,9 @@ } /** - * <p>Gets whether or not to append transient fields.</p> + * <p> + * Gets whether or not to append transient fields. + * </p> * * @return Whether or not to append transient fields. */ @@ -595,10 +747,12 @@ } /** - * <p>Append to the <code>toString</code> an <code>Object</code> - * array.</p> - * - * @param array the array to add to the <code>toString</code> + * <p> + * Append to the <code>toString</code> an <code>Object</code> array. + * </p> + * + * @param array + * the array to add to the <code>toString</code> * @return this */ public ToStringBuilder reflectionAppendArray(Object array) { @@ -607,43 +761,56 @@ } /** - * <p>Registers this builder's source object to avoid infinite - * loops when processing circular object references.</p> + * <p> + * Registers this builder's source object to avoid infinite loops when + * processing circular object references. + * </p> */ void registerObject() { register(this.getObject()); } /** - * <p>Sets whether or not to append static fields.</p> + * <p> + * Sets whether or not to append static fields. + * </p> * - * @param appendStatics Whether or not to append static fields. + * @param appendStatics + * Whether or not to append static fields. */ public void setAppendStatics(boolean appendStatics) { this.appendStatics = appendStatics; } /** - * <p>Sets whether or not to append transient fields.</p> + * <p> + * Sets whether or not to append transient fields. + * </p> * - * @param appendTransients Whether or not to append transient fields. + * @param appendTransients + * Whether or not to append transient fields. */ public void setAppendTransients(boolean appendTransients) { this.appendTransients = appendTransients; } /** - * <p>Sets the last super class to stop appending fields for.</p> + * <p> + * Sets the last super class to stop appending fields for. + * </p> * - * @param clazz The last super class to stop appending fields for. + * @param clazz + * The last super class to stop appending fields for. */ public void setUpToClass(Class clazz) { this.upToClass = clazz; } /** - * <p>Gets the String built by this builder.</p> - * + * <p> + * Gets the String built by this builder. + * </p> + * * @return the built string */ public String toString() { @@ -660,11 +827,12 @@ } /** - * <p>Unregisters this builder's source object to avoid infinite - * loops when processing circular object references.</p> + * <p> + * Unregisters this builder's source object to avoid infinite loops when + * processing circular object references. + * </p> */ void unregisterObject() { unregister(this.getObject()); } - }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]