You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2003/01/19 19:49:05 UTC

cvs commit: jakarta-commons/lang/src/test/org/apache/commons/lang/builder ToStringBuilderTest.java

scolebourne    2003/01/19 10:49:05

  Modified:    lang/src/java/org/apache/commons/lang/builder
                        CompareToBuilder.java ToStringBuilder.java
                        HashCodeBuilder.java EqualsBuilder.java
               lang/src/test/org/apache/commons/lang/builder
                        ToStringBuilderTest.java
  Log:
  Fix infinite recursion in inner classes reflection methods
  from Per Velschow
  
  Revision  Changes    Path
  1.12      +10 -9     jakarta-commons/lang/src/java/org/apache/commons/lang/builder/CompareToBuilder.java
  
  Index: CompareToBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/CompareToBuilder.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- CompareToBuilder.java	19 Jan 2003 17:51:42 -0000	1.11
  +++ CompareToBuilder.java	19 Jan 2003 18:49:05 -0000	1.12
  @@ -247,14 +247,15 @@
           Field.setAccessible(fields, true);
           for (int i = 0; i < fields.length && builder.comparison == 0; i++) {
               Field f = fields[i];
  -            if (useTransients || !Modifier.isTransient(f.getModifiers())) {
  -                if (!Modifier.isStatic(f.getModifiers())) {
  -                    try {
  -                        builder.append(f.get(lhs), f.get(rhs));
  -                    } catch (IllegalAccessException e) {
  -                        //this can't happen. Would get a Security exception instead
  -                        //throw a runtime exception in case the impossible happens.
  -                    }
  +            if ((f.getName().indexOf('$') == -1) &&
  +                (useTransients || !Modifier.isTransient(f.getModifiers())) &&
  +                (!Modifier.isStatic(f.getModifiers()))) {
  +                try {
  +                    builder.append(f.get(lhs), f.get(rhs));
  +                } catch (IllegalAccessException e) {
  +                    //this can't happen. Would get a Security exception instead
  +                    //throw a runtime exception in case the impossible happens.
  +                    throw new InternalError("Unexpected IllegalAccessException");
                   }
               }
           }
  
  
  
  1.14      +10 -9     jakarta-commons/lang/src/java/org/apache/commons/lang/builder/ToStringBuilder.java
  
  Index: ToStringBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/ToStringBuilder.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ToStringBuilder.java	19 Jan 2003 17:35:21 -0000	1.13
  +++ ToStringBuilder.java	19 Jan 2003 18:49:05 -0000	1.14
  @@ -373,14 +373,15 @@
           Field.setAccessible(fields, true);
           for (int i = 0; i < fields.length; i++) {
               Field f = fields[i];
  -            if (useTransients || !Modifier.isTransient(f.getModifiers())) {
  -                if (!Modifier.isStatic(f.getModifiers())) {
  -                    try {
  -                        builder.append(f.getName(), f.get(object));
  -                    } catch (IllegalAccessException ex) {
  -                        //this can't happen. Would get a Security exception instead
  -                        //throw a runtime exception in case the impossible happens.
  -                    }
  +            if ((f.getName().indexOf('$') == -1) &&
  +                (useTransients || !Modifier.isTransient(f.getModifiers())) &&
  +                (!Modifier.isStatic(f.getModifiers()))) {
  +                try {
  +                    builder.append(f.getName(), f.get(object));
  +                } catch (IllegalAccessException ex) {
  +                    //this can't happen. Would get a Security exception instead
  +                    //throw a runtime exception in case the impossible happens.
  +                    throw new InternalError("Unexpected IllegalAccessException");
                   }
               }
           }
  
  
  
  1.10      +10 -9     jakarta-commons/lang/src/java/org/apache/commons/lang/builder/HashCodeBuilder.java
  
  Index: HashCodeBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/HashCodeBuilder.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- HashCodeBuilder.java	19 Jan 2003 17:35:21 -0000	1.9
  +++ HashCodeBuilder.java	19 Jan 2003 18:49:05 -0000	1.10
  @@ -337,14 +337,15 @@
           Field.setAccessible(fields, true);
           for (int i = 0; i < fields.length; i++) {
               Field f = fields[i];
  -            if (useTransients || !Modifier.isTransient(f.getModifiers())) {
  -                if (!Modifier.isStatic(f.getModifiers())) {
  -                    try {
  -                        builder.append(f.get(object));
  -                    } catch (IllegalAccessException e) {
  -                        //this can't happen. Would get a Security exception instead
  -                        //throw a runtime exception in case the impossible happens.
  -                    }
  +            if ((f.getName().indexOf('$') == -1) &&
  +                (useTransients || !Modifier.isTransient(f.getModifiers())) &&
  +                (!Modifier.isStatic(f.getModifiers()))) {
  +                try {
  +                    builder.append(f.get(object));
  +                } catch (IllegalAccessException e) {
  +                    //this can't happen. Would get a Security exception instead
  +                    //throw a runtime exception in case the impossible happens.
  +                    throw new InternalError("Unexpected IllegalAccessException");
                   }
               }
           }
  
  
  
  1.11      +10 -9     jakarta-commons/lang/src/java/org/apache/commons/lang/builder/EqualsBuilder.java
  
  Index: EqualsBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/EqualsBuilder.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- EqualsBuilder.java	19 Jan 2003 17:35:21 -0000	1.10
  +++ EqualsBuilder.java	19 Jan 2003 18:49:05 -0000	1.11
  @@ -258,14 +258,15 @@
           Field.setAccessible(fields, true);
           for (int i = 0; i < fields.length && builder.isEquals; i++) {
               Field f = fields[i];
  -            if (useTransients || !Modifier.isTransient(f.getModifiers())) {
  -                if (!Modifier.isStatic(f.getModifiers())) {
  -                    try {
  -                        builder.append(f.get(lhs), f.get(rhs));
  -                    } catch (IllegalAccessException e) {
  -                        //this can't happen. Would get a Security exception instead
  -                        //throw a runtime exception in case the impossible happens.
  -                    }
  +            if ((f.getName().indexOf('$') == -1) &&
  +                (useTransients || !Modifier.isTransient(f.getModifiers())) &&
  +                (!Modifier.isStatic(f.getModifiers()))) {
  +                try {
  +                    builder.append(f.get(lhs), f.get(rhs));
  +                } catch (IllegalAccessException e) {
  +                    //this can't happen. Would get a Security exception instead
  +                    //throw a runtime exception in case the impossible happens.
  +                    throw new InternalError("Unexpected IllegalAccessException");
                   }
               }
           }
  
  
  
  1.4       +18 -1     jakarta-commons/lang/src/test/org/apache/commons/lang/builder/ToStringBuilderTest.java
  
  Index: ToStringBuilderTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/builder/ToStringBuilderTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ToStringBuilderTest.java	31 Dec 2002 20:17:53 -0000	1.3
  +++ ToStringBuilderTest.java	19 Jan 2003 18:49:05 -0000	1.4
  @@ -215,6 +215,23 @@
           private transient char transientB='t';
   	}
   
  +    public void testInnerClassReflection() {
  +        Outer outer = new Outer();
  +        assertEquals(toBaseString(outer) + "[inner=" + toBaseString(outer.inner) + "[]]", outer.toString());
  +    }
  +    
  +    static class Outer {
  +        Inner inner = new Inner();
  +        class Inner {
  +            public String toString() {
  +                return ToStringBuilder.reflectionToString(this);
  +            }
  +        }
  +        public String toString() {
  +            return ToStringBuilder.reflectionToString(this);
  +        }
  +    }
  +    
       public void testAppendSuper() {
           assertEquals(baseStr + "[]", new ToStringBuilder(base).appendSuper("Integer@8888[]").toString());
           assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).appendSuper("Integer@8888[<null>]").toString());
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>