Return-Path: Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: (qmail 13155 invoked from network); 4 Feb 2010 21:58:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 4 Feb 2010 21:58:24 -0000 Received: (qmail 13342 invoked by uid 500); 4 Feb 2010 21:58:24 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 13245 invoked by uid 500); 4 Feb 2010 21:58:23 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 13229 invoked by uid 99); 4 Feb 2010 21:58:23 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Feb 2010 21:58:23 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Feb 2010 21:58:20 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5D52123889EC; Thu, 4 Feb 2010 21:57:59 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r906676 - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/builder/ToStringStyle.java test/java/org/apache/commons/lang3/builder/ToStringBuilderTest.java Date: Thu, 04 Feb 2010 21:57:59 -0000 To: commits@commons.apache.org From: mbenson@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100204215759.5D52123889EC@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mbenson Date: Thu Feb 4 21:57:58 2010 New Revision: 906676 URL: http://svn.apache.org/viewvc?rev=906676&view=rev Log: [LANG-586] part 2: refactor ToStringStyle and ToStringBuilderTest to verify that we are unsetting the registry when no longer needed Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/ToStringBuilderTest.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java?rev=906676&r1=906675&r2=906676&view=diff ============================================================================== --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java Thu Feb 4 21:57:58 2010 @@ -144,9 +144,8 @@ * * @return Set the registry of objects being traversed */ - static Set getRegistry() { - WeakHashMap m = REGISTRY.get(); - return m == null ? Collections. emptySet() : m.keySet(); + static Map getRegistry() { + return REGISTRY.get(); } /** @@ -161,7 +160,8 @@ * object. */ static boolean isRegistered(Object value) { - return getRegistry().contains(value); + Map m = getRegistry(); + return m != null && m.containsKey(value); } /** Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/ToStringBuilderTest.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/ToStringBuilderTest.java?rev=906676&r1=906675&r2=906676&view=diff ============================================================================== --- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/ToStringBuilderTest.java (original) +++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/builder/ToStringBuilderTest.java Thu Feb 4 21:57:58 2010 @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -34,7 +34,7 @@ private final Integer base = new Integer(5); private final String baseStr = base.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(base)); - + public ToStringBuilderTest(String name) { super(name); } @@ -69,7 +69,7 @@ public void testSetDefaultEx() { try { ToStringBuilder.setDefaultStyle(null); - + } catch (IllegalArgumentException ex) { return; } @@ -79,7 +79,7 @@ public void testBlank() { assertEquals(baseStr + "[]", new ToStringBuilder(base).toString()); } - + /** * Test wrapper for int primitive. */ @@ -114,9 +114,9 @@ private String toBaseString(Object o) { return o.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(o)); } - + // Reflection Array tests - + // // Note on the following line of code repeated in the reflection array tests. // @@ -124,12 +124,12 @@ // // The expected value is not baseStr + "[]" since array==null and is typed as Object. // The null array does not carry array type information. - // If we added a primitive array type constructor and pile of associated methods, + // If we added a primitive array type constructor and pile of associated methods, // then type declaring type information could be carried forward. IMHO, null is null. // - // Gary Gregory - 2003-03-12 - ggregory@seagullsw.com + // Gary Gregory - 2003-03-12 - ggregory@seagullsw.com // - + public void assertReflectionArray(String expected, Object actual) { if (actual == null) { // Until ToStringBuilder supports null objects. @@ -147,7 +147,7 @@ assertEquals(baseStr + "[{,5,{3,6}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionLongArray() { @@ -156,7 +156,7 @@ assertEquals(baseStr + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionIntArray() { @@ -165,7 +165,7 @@ assertEquals(baseStr + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionShortArray() { @@ -174,7 +174,7 @@ assertEquals(baseStr + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionyteArray() { @@ -183,7 +183,7 @@ assertEquals(baseStr + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionCharArray() { @@ -192,7 +192,7 @@ assertEquals(baseStr + "[{A,2,_,D}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionDoubleArray() { @@ -201,7 +201,7 @@ assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionFloatArray() { @@ -210,7 +210,7 @@ assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionBooleanArray() { @@ -219,9 +219,9 @@ assertEquals(baseStr + "[{true,false,false}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } - + // Reflection Array Array tests public void testReflectionFloatArrayArray() { @@ -230,7 +230,7 @@ assertEquals(baseStr + "[{{1.0,2.29686},,{NaN}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } @@ -240,7 +240,7 @@ assertEquals(baseStr + "[{{1,2},,{5}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionIntArrayArray() { @@ -249,7 +249,7 @@ assertEquals(baseStr + "[{{1,2},,{5}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionhortArrayArray() { @@ -258,7 +258,7 @@ assertEquals(baseStr + "[{{1,2},,{5}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionByteArrayArray() { @@ -267,7 +267,7 @@ assertEquals(baseStr + "[{{1,2},,{5}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionCharArrayArray() { @@ -276,7 +276,7 @@ assertEquals(baseStr + "[{{A,B},,{p}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionDoubleArrayArray() { @@ -285,7 +285,7 @@ assertEquals(baseStr + "[{{1.0,2.29686},,{NaN}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionBooleanArrayArray() { @@ -295,9 +295,9 @@ assertEquals(baseStr + "[{{true,false},,{false}}]", ToStringBuilder.reflectionToString(array)); array = null; assertReflectionArray("", array); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } - + // Reflection hierarchy tests public void testReflectionHierarchyArrayList() { @@ -305,7 +305,7 @@ String baseStr = this.toBaseString(base); assertEquals(baseStr + "[elementData={,,,,,,,,,},size=0,modCount=0]", ToStringBuilder.reflectionToString(base, null, true)); assertEquals(baseStr + "[size=0]", ToStringBuilder.reflectionToString(base, null, false)); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionHierarchy() { @@ -318,7 +318,7 @@ assertEquals(baseStr + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false, null)); assertEquals(baseStr + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false, Object.class)); assertEquals(baseStr + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false, ReflectionTestFixtureA.class)); - + ReflectionTestFixtureB baseB = new ReflectionTestFixtureB(); baseStr = this.toBaseString(baseB); assertEquals(baseStr + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB)); @@ -330,7 +330,7 @@ assertEquals(baseStr + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null, false, Object.class)); assertEquals(baseStr + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null, false, ReflectionTestFixtureA.class)); assertEquals(baseStr + "[b=b]", ToStringBuilder.reflectionToString(baseB, null, false, ReflectionTestFixtureB.class)); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } static class ReflectionTestFixtureA { @@ -351,7 +351,7 @@ Outer outer = new Outer(); assertEquals(toBaseString(outer) + "[inner=" + toBaseString(outer.inner) + "[]]", outer.toString()); } - + static class Outer { Inner inner = new Inner(); class Inner { @@ -365,7 +365,7 @@ return ToStringBuilder.reflectionToString(this); } } - + // Reflection cycle tests /** @@ -377,7 +377,7 @@ assertEquals( this.toBaseString(objects) + "[{" + this.toBaseString(objects) + "}]", ToStringBuilder.reflectionToString(objects)); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } /** @@ -394,7 +394,7 @@ assertEquals( this.toBaseString(objectsLevel2) + "[{{" + this.toBaseString(objectsLevel2) + "}}]", ToStringBuilder.reflectionToString(objectsLevel2)); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } public void testReflectionArrayArrayCycle() throws Exception { @@ -416,7 +416,7 @@ + basicToString + "}}]", ToStringBuilder.reflectionToString(objects)); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } /** @@ -475,7 +475,7 @@ return ToStringBuilder.reflectionToString(this); } } - + private static class SelfInstanceTwoVarsReflectionTestFixture { @SuppressWarnings("unused") private SelfInstanceTwoVarsReflectionTestFixture typeIsSelf; @@ -484,7 +484,7 @@ public SelfInstanceTwoVarsReflectionTestFixture() { this.typeIsSelf = this; } - + public String getOtherType(){ return this.otherType; } @@ -494,50 +494,47 @@ return ToStringBuilder.reflectionToString(this); } } - - + + /** * Test an Object pointing to itself, the simplest test. - * + * * @throws Exception */ public void testSimpleReflectionObjectCycle() throws Exception { SimpleReflectionTestFixture simple = new SimpleReflectionTestFixture(); simple.o = simple; - assertTrue(ToStringStyle.getRegistry().isEmpty()); assertEquals(this.toBaseString(simple) + "[o=" + this.toBaseString(simple) + "]", simple.toString()); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } /** * Test a class that defines an ivar pointing to itself. - * + * * @throws Exception */ public void testSelfInstanceVarReflectionObjectCycle() throws Exception { SelfInstanceVarReflectionTestFixture test = new SelfInstanceVarReflectionTestFixture(); - assertTrue(ToStringStyle.getRegistry().isEmpty()); assertEquals(this.toBaseString(test) + "[typeIsSelf=" + this.toBaseString(test) + "]", test.toString()); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } - + /** - * Test a class that defines an ivar pointing to itself. This test was + * Test a class that defines an ivar pointing to itself. This test was * created to show that handling cyclical object resulted in a missing endFieldSeparator call. - * + * * @throws Exception */ public void testSelfInstanceTwoVarsReflectionObjectCycle() throws Exception { SelfInstanceTwoVarsReflectionTestFixture test = new SelfInstanceTwoVarsReflectionTestFixture(); - assertTrue(ToStringStyle.getRegistry().isEmpty()); assertEquals(this.toBaseString(test) + "[typeIsSelf=" + this.toBaseString(test) + ",otherType=" + test.getOtherType().toString() + "]", test.toString()); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } - + /** * Test Objects pointing to each other. - * + * * @throws Exception */ public void testReflectionObjectCycle() throws Exception { @@ -548,13 +545,13 @@ assertEquals( this.toBaseString(a) + "[b=" + this.toBaseString(b) + "[a=" + this.toBaseString(a) + "]]", a.toString()); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } - + /** * Test a nasty combination of arrays and Objects pointing to each other. * objects[0] -> SimpleReflectionTestFixture[ o -> objects ] - * + * * @throws Exception */ public void testReflectionArrayAndObjectCycle() throws Exception { @@ -576,36 +573,36 @@ + this.toBaseString(simple) + "}]", ToStringBuilder.reflectionToString(simple)); - this.validateEmptyToStringStyleRegistry(); + this.validateNullToStringStyleRegistry(); } - - void validateEmptyToStringStyleRegistry() { - if (!ToStringStyle.getRegistry().isEmpty()) { + + void validateNullToStringStyleRegistry() { + if (ToStringStyle.getRegistry() != null) { System.out.println(ToStringStyle.getRegistry()); } - - assertTrue(ToStringStyle.getRegistry().isEmpty()); + + assertNull(ToStringStyle.getRegistry()); } // End: Reflection cycle tests public void testAppendSuper() { assertEquals(baseStr + "[]", new ToStringBuilder(base).appendSuper("Integer@8888[]").toString()); assertEquals(baseStr + "[]", new ToStringBuilder(base).appendSuper("Integer@8888[]").toString()); - + assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendSuper("Integer@8888[]").append("a", "hello").toString()); assertEquals(baseStr + "[,a=hello]", new ToStringBuilder(base).appendSuper("Integer@8888[]").append("a", "hello").toString()); assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendSuper(null).append("a", "hello").toString()); } - + public void testAppendToString() { assertEquals(baseStr + "[]", new ToStringBuilder(base).appendToString("Integer@8888[]").toString()); assertEquals(baseStr + "[]", new ToStringBuilder(base).appendToString("Integer@8888[]").toString()); - + assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendToString("Integer@8888[]").append("a", "hello").toString()); assertEquals(baseStr + "[,a=hello]", new ToStringBuilder(base).appendToString("Integer@8888[]").append("a", "hello").toString()); assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendToString(null).append("a", "hello").toString()); } - + public void testObject() { Integer i3 = new Integer(3); Integer i4 = new Integer(4); @@ -709,7 +706,7 @@ assertEquals(baseStr + "[]", new ToStringBuilder(base).append(array).toString()); assertEquals(baseStr + "[]", new ToStringBuilder(base).append((Object) array).toString()); } - + public void testByteArray() { byte[] array = new byte[] {1, 2, -3, 4}; assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString()); @@ -745,7 +742,7 @@ assertEquals(baseStr + "[]", new ToStringBuilder(base).append(array).toString()); assertEquals(baseStr + "[]", new ToStringBuilder(base).append((Object) array).toString()); } - + public void testBooleanArray() { boolean[] array = new boolean[] {true, false, false}; assertEquals(baseStr + "[{true,false,false}]", new ToStringBuilder(base).append(array).toString()); @@ -832,21 +829,21 @@ ObjectCycle b = new ObjectCycle(); a.obj = b; b.obj = a; - + String expected = toBaseString(a) + "[" + toBaseString(b) + "[" + toBaseString(a) + "]]"; assertEquals(expected, a.toString()); - validateEmptyToStringStyleRegistry(); + validateNullToStringStyleRegistry(); } - + static class ObjectCycle { Object obj; - + @Override public String toString() { return new ToStringBuilder(this).append(obj).toString(); } } - + public void testSimpleReflectionStatics() { SimpleReflectionStaticFieldsFixture instance1 = new SimpleReflectionStaticFieldsFixture(); assertEquals( @@ -912,12 +909,12 @@ * *

Transient fields are not output.

* - *

Superclass fields will be appended up to and including the specified superclass. + *

Superclass fields will be appended up to and including the specified superclass. * A null superclass is treated as java.lang.Object.

* *

If the style is null, the default * ToStringStyle is used.

- * + * * @param object the Object to be output * @param style the style of the toString to create, * may be null @@ -938,7 +935,7 @@ ReflectionToStringBuilder test = new ReflectionToStringBuilder(val); test.setUpToClass(Number.class); } - + /** * Tests ReflectionToStringBuilder setUpToClass(). */ @@ -952,7 +949,7 @@ // expected } } - + /** * Tests ReflectionToStringBuilder.toString() for statics. */