[ 
https://issues.apache.org/jira/browse/LANG-754?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas Neidhart updated LANG-754:
---------------------------------

    Attachment: LANG-754.patch

The attached patch fixes ClassUtils.getShortName(String) to only do the 
reverseAbbreviation lookup if the supplied className contains an array 
definition.

Otherwise the abbreviated class names for primitive types are not used imho.

                
> embedded objects are not toString-ed like top-level objects
> -----------------------------------------------------------
>
>                 Key: LANG-754
>                 URL: https://issues.apache.org/jira/browse/LANG-754
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.builder.*
>    Affects Versions: 2.5, 3.0.1
>         Environment: Linux Ubuntu
> java version "1.6.0_24"
> Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
> Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
>            Reporter: Dominique De Vito
>            Priority: Minor
>         Attachments: LANG-754.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> I have a simple class 'A' defined as follows:
> ======================================
> public class A {
>   int p1;
>   String p2;
>   B b;
> }
> ======================================
> While I execute the following instructions:
> ToStringBuilder builder = new ReflectionToStringBuilder(a);
> System.out.println(builder.toString());
> The output is:
> A@3ea981ca[p1=0,p2=<null>,b=B@1ee7b241]
> that's normal, without recursion
> So, I defined my own style, for recursive toString-ing display:
> ======================================
> class MyStyle extends ToStringStyle {
>   private final static ToStringStyle instance = new MyStyle();
>   public MyStyle() {
>     setArrayContentDetail(true);
>     setUseShortClassName(true);
>     setUseClassName(true);
>     setUseIdentityHashCode(true);
>     setFieldSeparator(", ");
>   }
>   public static ToStringStyle getInstance() {
>     return instance;
>   };
>   @Override
>   public void appendDetail(final StringBuffer buffer, final String fieldName, 
> final Object value) {
>     if (!value.getClass().getName().startsWith("java")) {
>       buffer.append(ReflectionToStringBuilder.toString(value, instance));
>     } else {
>       super.appendDetail(buffer, fieldName, value);
>     }
>   }
>   @Override
>   public void appendDetail(final StringBuffer buffer, final String fieldName, 
> final Collection value) {
>     appendDetail(buffer, fieldName, value.toArray());
>   }
> }
> ======================================
> When I use my custom MyStyle:
> String s = ReflectionToStringBuilder.toString(a, MyStyle.getInstance());
> System.out.println(s);
> The output is:
> A@3ea981ca[p1=0, p2=<null>, b=byte@1ee7b241[p4=234]]
> So, the name of the class 'B' is not displayed.
> I expected something like: b=B@1ee7b241[p4=234]
> Instead, the name of the class 'B' is replaced with 'byte'.
> I don't know why.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to