You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2010/02/21 03:52:56 UTC
svn commit: r912292 - in /commons/proper/lang/branches/LANG_2_X: ./
src/main/java/org/apache/commons/lang/enum/
src/main/java/org/apache/commons/lang/enums/
src/test/java/org/apache/commons/lang/enums/
Author: niallp
Date: Sun Feb 21 02:52:56 2010
New Revision: 912292
URL: http://svn.apache.org/viewvc?rev=912292&view=rev
Log:
LANG-76 EnumUtils.getEnum() doesn't work in 1.5+ - force initialization of the Enum class using Class.forName() thanks to Marcus Schulte for the solution
(Note: for JDK 1.5+ the Ant build compiles EnumUtilsLang76Test with source/target 1.5 which causes this problem to occur)
Added:
commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java (with props)
Modified:
commons/proper/lang/branches/LANG_2_X/build.xml
commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java
commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java
commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java
Modified: commons/proper/lang/branches/LANG_2_X/build.xml
URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/build.xml?rev=912292&r1=912291&r2=912292&view=diff
==============================================================================
--- commons/proper/lang/branches/LANG_2_X/build.xml (original)
+++ commons/proper/lang/branches/LANG_2_X/build.xml Sun Feb 21 02:52:56 2010
@@ -53,6 +53,7 @@
<filter token="compile.source" value="${compile.source}"/>
<filter token="compile.target" value="${compile.target}"/>
<mkdir dir="${build.home}"/>
+ <available property="jdk.1.5.present" classname="java.lang.StringBuilder"/>
</target>
<!-- ========== Compile Targets ========================================= -->
@@ -66,9 +67,21 @@
</copy>
</target>
- <target name="compile.tests" depends="compile" description="Compile unit test cases">
+ <!-- Compile EnumUtilsLang76Test using source/target 1.5 if JDK 1.5 present (see LANG-76) -->
+ <target name="test.compile.jdk15" depends="compile" description="Run test for LANG-76" if="jdk.1.5.present">
+ <echo message="Compiling EnumUtilsLang76Test using source/target 1.5"/>
+ <mkdir dir="${build.home}/tests"/>
+ <javac srcdir="${test.home}" destdir="${build.home}/tests"
+ target="1.5" source="1.5"
+ includes="org/apache/commons/lang/enums/EnumUtilsLang76Test.java">
+ <classpath refid="test.classpath"/>
+ </javac>
+ </target>
+
+ <target name="compile.tests" depends="compile,test.compile.jdk15" description="Compile unit test cases">
<mkdir dir="${build.home}/tests"/>
<javac srcdir="${test.home}" destdir="${build.home}/tests" debug="${compile.debug}" deprecation="off" target="${compile.target}" source="${compile.source}" optimize="${compile.optimize}">
+ <exclude name="org/apache/commons/lang/enums/EnumUtilsLang76Test.java" if="jdk.1.5.present"/>
<classpath refid="test.classpath"/>
</javac>
<copy todir="${build.home}/tests" filtering="on">
Modified: commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java?rev=912292&r1=912291&r2=912292&view=diff
==============================================================================
--- commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java (original)
+++ commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java Sun Feb 21 02:52:56 2010
@@ -484,6 +484,17 @@
throw new IllegalArgumentException("The Class must be a subclass of Enum");
}
Entry entry = (Entry) cEnumClasses.get(enumClass);
+
+ if (entry == null) {
+ try {
+ // LANG-76 - try to force class initialization for JDK 1.5+
+ Class.forName(enumClass.getName(), true, enumClass.getClassLoader());
+ entry = (Entry) cEnumClasses.get(enumClass);
+ } catch (Throwable t) {
+ // Ignore
+ }
+ }
+
return entry;
}
Modified: commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java?rev=912292&r1=912291&r2=912292&view=diff
==============================================================================
--- commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java (original)
+++ commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java Sun Feb 21 02:52:56 2010
@@ -530,6 +530,17 @@
throw new IllegalArgumentException("The Class must be a subclass of Enum");
}
Entry entry = (Entry) cEnumClasses.get(enumClass);
+
+ if (entry == null) {
+ try {
+ // LANG-76 - try to force class initialization for JDK 1.5+
+ Class.forName(enumClass.getName(), true, enumClass.getClassLoader());
+ entry = (Entry) cEnumClasses.get(enumClass);
+ } catch (Throwable t) {
+ // Ignore
+ }
+ }
+
return entry;
}
Added: commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java?rev=912292&view=auto
==============================================================================
--- commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java (added)
+++ commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java Sun Feb 21 02:52:56 2010
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.lang.enums;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases for the LANG-76 issue with {@link EnumUtils}.
+ *
+ * NOTE: this needs to be compiled with source/target versions set to 1.5
+ * in order to replicate/test the issue properly
+ */
+public class EnumUtilsLang76Test extends TestCase {
+
+ public EnumUtilsLang76Test(String name) {
+ super(name);
+ }
+
+ /**
+ * Test LANG-76
+ */
+ public void test_EnumUtils_getEnum_LANG76() {
+ Object obj = EnumUtils.getEnum(TestEnum.class, "1");
+ assertNotNull("Enum is not intialized", obj);
+ assertEquals("EnumUtilsLang76Test.TestEnum[1]", obj.toString());
+ }
+
+ /** Test Enum for LANG-76 **/
+ public static final class TestEnum extends Enum {
+ private static final long serialVersionUID = 1L;
+ public static final TestEnum ONE = new TestEnum("1");
+ public static final TestEnum TWO = new TestEnum("2");
+ public static final TestEnum THREE = new TestEnum("3");
+
+ private TestEnum(String value) {
+ super(value);
+ }
+ }
+}
Propchange: commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java?rev=912292&r1=912291&r2=912292&view=diff
==============================================================================
--- commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java (original)
+++ commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java Sun Feb 21 02:52:56 2010
@@ -156,22 +156,4 @@
fail();
} catch (IllegalArgumentException ex) {}
}
-
- /** Test for LANG-76 **/
- public void testGetEnum_LANG76() {
- Object obj = EnumUtils.getEnum(Lang76Enum.class, "1");
- assertNotNull(obj);
- assertEquals("EnumUtilsTest.Lang76Enum[1]", obj.toString());
- }
-
- /** Test Enum for LANG-76 **/
- public static final class Lang76Enum extends Enum {
- public static final Lang76Enum ONE = new Lang76Enum("1");
- public static final Lang76Enum TWO = new Lang76Enum("2");
- public static final Lang76Enum THREE = new Lang76Enum("3");
-
- private Lang76Enum(String suit) {
- super(suit);
- }
- }
}
Re: svn commit: r912292 - in /commons/proper/lang/branches/LANG_2_X:
./ src/main/java/org/apache/commons/lang/enum/ src/main/java/org/apache/commons/lang/enums/
src/test/java/org/apache/commons/lang/enums/
Posted by Niall Pemberton <ni...@gmail.com>.
On Sun, Feb 21, 2010 at 8:03 PM, sebb <se...@gmail.com> wrote:
> On 21/02/2010, niallp@apache.org <ni...@apache.org> wrote:
>> Author: niallp
>> Date: Sun Feb 21 02:52:56 2010
>> New Revision: 912292
>>
>> URL: http://svn.apache.org/viewvc?rev=912292&view=rev
>> Log:
>> LANG-76 EnumUtils.getEnum() doesn't work in 1.5+ - force initialization of the Enum class using Class.forName() thanks to Marcus Schulte for the solution
>> (Note: for JDK 1.5+ the Ant build compiles EnumUtilsLang76Test with source/target 1.5 which causes this problem to occur)
>>
>> Added:
>> commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java (with props)
>> Modified:
>> commons/proper/lang/branches/LANG_2_X/build.xml
>> commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java
>> commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java
>> commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java
>>
> ...
>> Modified: commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java
>> URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java?rev=912292&r1=912291&r2=912292&view=diff
>> ==============================================================================
>> --- commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java (original)
>> +++ commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java Sun Feb 21 02:52:56 2010
>> @@ -484,6 +484,17 @@
>> throw new IllegalArgumentException("The Class must be a subclass of Enum");
>> }
>> Entry entry = (Entry) cEnumClasses.get(enumClass);
>> +
>> + if (entry == null) {
>> + try {
>> + // LANG-76 - try to force class initialization for JDK 1.5+
>> + Class.forName(enumClass.getName(), true, enumClass.getClassLoader());
>> + entry = (Entry) cEnumClasses.get(enumClass);
>> + } catch (Throwable t) {
>> + // Ignore
>
> Not a good idea to ignore Throwable.
OK I've changed it to Exception:
http://svn.apache.org/viewvc?view=revision&revision=912394
Niall
>> + }
>> + }
>> +
>> return entry;
>> }
>>
>>
>> Modified: commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java
>> URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java?rev=912292&r1=912291&r2=912292&view=diff
>> ==============================================================================
>> --- commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java (original)
>> +++ commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java Sun Feb 21 02:52:56 2010
>> @@ -530,6 +530,17 @@
>> throw new IllegalArgumentException("The Class must be a subclass of Enum");
>> }
>> Entry entry = (Entry) cEnumClasses.get(enumClass);
>> +
>> + if (entry == null) {
>> + try {
>> + // LANG-76 - try to force class initialization for JDK 1.5+
>> + Class.forName(enumClass.getName(), true, enumClass.getClassLoader());
>> + entry = (Entry) cEnumClasses.get(enumClass);
>> + } catch (Throwable t) {
>> + // Ignore
>
> Ditto.
>
>> + }
>> + }
>> +
>> return entry;
>> }
>>
>>
>
> ...
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org
Re: svn commit: r912292 - in /commons/proper/lang/branches/LANG_2_X:
./ src/main/java/org/apache/commons/lang/enum/ src/main/java/org/apache/commons/lang/enums/
src/test/java/org/apache/commons/lang/enums/
Posted by sebb <se...@gmail.com>.
On 21/02/2010, niallp@apache.org <ni...@apache.org> wrote:
> Author: niallp
> Date: Sun Feb 21 02:52:56 2010
> New Revision: 912292
>
> URL: http://svn.apache.org/viewvc?rev=912292&view=rev
> Log:
> LANG-76 EnumUtils.getEnum() doesn't work in 1.5+ - force initialization of the Enum class using Class.forName() thanks to Marcus Schulte for the solution
> (Note: for JDK 1.5+ the Ant build compiles EnumUtilsLang76Test with source/target 1.5 which causes this problem to occur)
>
> Added:
> commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsLang76Test.java (with props)
> Modified:
> commons/proper/lang/branches/LANG_2_X/build.xml
> commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java
> commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java
> commons/proper/lang/branches/LANG_2_X/src/test/java/org/apache/commons/lang/enums/EnumUtilsTest.java
>
...
> Modified: commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java?rev=912292&r1=912291&r2=912292&view=diff
> ==============================================================================
> --- commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java (original)
> +++ commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enum/Enum.java Sun Feb 21 02:52:56 2010
> @@ -484,6 +484,17 @@
> throw new IllegalArgumentException("The Class must be a subclass of Enum");
> }
> Entry entry = (Entry) cEnumClasses.get(enumClass);
> +
> + if (entry == null) {
> + try {
> + // LANG-76 - try to force class initialization for JDK 1.5+
> + Class.forName(enumClass.getName(), true, enumClass.getClassLoader());
> + entry = (Entry) cEnumClasses.get(enumClass);
> + } catch (Throwable t) {
> + // Ignore
Not a good idea to ignore Throwable.
> + }
> + }
> +
> return entry;
> }
>
>
> Modified: commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java?rev=912292&r1=912291&r2=912292&view=diff
> ==============================================================================
> --- commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java (original)
> +++ commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/enums/Enum.java Sun Feb 21 02:52:56 2010
> @@ -530,6 +530,17 @@
> throw new IllegalArgumentException("The Class must be a subclass of Enum");
> }
> Entry entry = (Entry) cEnumClasses.get(enumClass);
> +
> + if (entry == null) {
> + try {
> + // LANG-76 - try to force class initialization for JDK 1.5+
> + Class.forName(enumClass.getName(), true, enumClass.getClassLoader());
> + entry = (Entry) cEnumClasses.get(enumClass);
> + } catch (Throwable t) {
> + // Ignore
Ditto.
> + }
> + }
> +
> return entry;
> }
>
>
...
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org