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>