You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rm...@apache.org on 2014/07/20 13:31:18 UTC

svn commit: r1612075 - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/JavaVersion.java test/java/org/apache/commons/lang3/JavaVersionTest.java

Author: rmannibucau
Date: Sun Jul 20 11:31:17 2014
New Revision: 1612075

URL: http://svn.apache.org/r1612075
Log:
LANG-1027 don't fail if java version is unknown, lang is too much used to make apps and libs failling cause of an unknown java version.

Modified:
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java
    commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java?rev=1612075&r1=1612074&r2=1612075&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java Sun Jul 20 11:31:17 2014
@@ -69,7 +69,17 @@ public enum JavaVersion {
     /**
      * Java 1.8.
      */
-    JAVA_1_8(1.8f, "1.8");
+    JAVA_1_8(1.8f, "1.8"),
+
+    /**
+     * Java 1.9.
+     */
+    JAVA_1_9(1.9f, "1.9"),
+
+    /**
+     * Java 1.x, x > 9. Mainly introduced to avoid to break when a new version of Java is used.
+     */
+    JAVA_RECENT(maxVersion(), Float.toString(maxVersion()));
 
     /**
      * The float value.
@@ -147,9 +157,21 @@ public enum JavaVersion {
             return JAVA_1_7;
         } else if ("1.8".equals(nom)) {
             return JAVA_1_8;
-        } else {
+        } else if ("1.9".equals(nom)) {
+            return JAVA_1_9;
+        }
+        if (nom == null) {
             return null;
         }
+        final float v = toFloatVersion(nom);
+        if ((v - 1.) < 1.) { // then we need to check decimals > .9
+            final int firstComma = Math.max(nom.indexOf('.'), nom.indexOf(','));
+            final int end = Math.max(nom.length(), nom.indexOf(',', firstComma));
+            if (Float.parseFloat(nom.substring(firstComma + 1, end)) > .9f) {
+                return JAVA_RECENT;
+            }
+        }
+        return null;
     }
 
     //-----------------------------------------------------------------------
@@ -165,4 +187,24 @@ public enum JavaVersion {
         return name;
     }
 
+    // upper bound of java version considering 2. or current is the higher
+    private static float maxVersion() {
+        final float v = toFloatVersion(System.getProperty("java.version", "2.0"));
+        if (v > 0) {
+            return v;
+        }
+        return 2f;
+    }
+
+    private static float toFloatVersion(final String name) {
+        final String[] toParse = name.split("\\.");
+        if (toParse.length >= 2) {
+            try {
+                return Float.parseFloat(toParse[0] + '.' + toParse[1]);
+            } catch (final NumberFormatException nfe) {
+                // no-op, let use default
+            }
+        }
+        return -1;
+    }
 }

Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java?rev=1612075&r1=1612074&r2=1612075&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java (original)
+++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java Sun Jul 20 11:31:17 2014
@@ -19,6 +19,8 @@
 package org.apache.commons.lang3;
 
 import org.junit.Test;
+
+import static org.apache.commons.lang3.JavaVersion.JAVA_RECENT;
 import static org.junit.Assert.*;
 import static org.apache.commons.lang3.JavaVersion.JAVA_0_9;
 import static org.apache.commons.lang3.JavaVersion.JAVA_1_1;
@@ -29,6 +31,7 @@ import static org.apache.commons.lang3.J
 import static org.apache.commons.lang3.JavaVersion.JAVA_1_6;
 import static org.apache.commons.lang3.JavaVersion.JAVA_1_7;
 import static org.apache.commons.lang3.JavaVersion.JAVA_1_8;
+import static org.apache.commons.lang3.JavaVersion.JAVA_1_9;
 import static org.apache.commons.lang3.JavaVersion.get;
 import static org.apache.commons.lang3.JavaVersion.getJavaVersion;
 
@@ -50,7 +53,9 @@ public class JavaVersionTest {
         assertEquals("1.6 failed", JAVA_1_6, get("1.6"));
         assertEquals("1.7 failed", JAVA_1_7, get("1.7"));
         assertEquals("1.8 failed", JAVA_1_8, get("1.8"));
-        assertNull("1.9 unexpectedly worked", get("1.9"));
+        assertEquals("1.9 failed", JAVA_1_9, get("1.9"));
+        assertEquals("1.10 failed", JAVA_RECENT, get("1.10"));
+        // assertNull("2.10 unexpectedly worked", get("2.10"));
         assertEquals("Wrapper method failed", get("1.5"), getJavaVersion("1.5"));
     }
 



Re: svn commit: r1612075 - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/JavaVersion.java test/java/org/apache/commons/lang3/JavaVersionTest.java

Posted by Benedikt Ritter <br...@apache.org>.
Hello Romain,

please remember to document fixed tickets in changes.xml. I've done the
necessary changes in revision 1612391.

I'm not sure about JAVA_RECENT but I don't have a better name :-)

br,
Benedikt


2014-07-20 13:31 GMT+02:00 <rm...@apache.org>:

> Author: rmannibucau
> Date: Sun Jul 20 11:31:17 2014
> New Revision: 1612075
>
> URL: http://svn.apache.org/r1612075
> Log:
> LANG-1027 don't fail if java version is unknown, lang is too much used to
> make apps and libs failling cause of an unknown java version.
>
> Modified:
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java
>
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java
>
> Modified:
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java?rev=1612075&r1=1612074&r2=1612075&view=diff
>
> ==============================================================================
> ---
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java
> (original)
> +++
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/JavaVersion.java
> Sun Jul 20 11:31:17 2014
> @@ -69,7 +69,17 @@ public enum JavaVersion {
>      /**
>       * Java 1.8.
>       */
> -    JAVA_1_8(1.8f, "1.8");
> +    JAVA_1_8(1.8f, "1.8"),
> +
> +    /**
> +     * Java 1.9.
> +     */
> +    JAVA_1_9(1.9f, "1.9"),
> +
> +    /**
> +     * Java 1.x, x > 9. Mainly introduced to avoid to break when a new
> version of Java is used.
> +     */
> +    JAVA_RECENT(maxVersion(), Float.toString(maxVersion()));
>
>      /**
>       * The float value.
> @@ -147,9 +157,21 @@ public enum JavaVersion {
>              return JAVA_1_7;
>          } else if ("1.8".equals(nom)) {
>              return JAVA_1_8;
> -        } else {
> +        } else if ("1.9".equals(nom)) {
> +            return JAVA_1_9;
> +        }
> +        if (nom == null) {
>              return null;
>          }
> +        final float v = toFloatVersion(nom);
> +        if ((v - 1.) < 1.) { // then we need to check decimals > .9
> +            final int firstComma = Math.max(nom.indexOf('.'),
> nom.indexOf(','));
> +            final int end = Math.max(nom.length(), nom.indexOf(',',
> firstComma));
> +            if (Float.parseFloat(nom.substring(firstComma + 1, end)) >
> .9f) {
> +                return JAVA_RECENT;
> +            }
> +        }
> +        return null;
>      }
>
>
>  //-----------------------------------------------------------------------
> @@ -165,4 +187,24 @@ public enum JavaVersion {
>          return name;
>      }
>
> +    // upper bound of java version considering 2. or current is the higher
> +    private static float maxVersion() {
> +        final float v = toFloatVersion(System.getProperty("java.version",
> "2.0"));
> +        if (v > 0) {
> +            return v;
> +        }
> +        return 2f;
> +    }
> +
> +    private static float toFloatVersion(final String name) {
> +        final String[] toParse = name.split("\\.");
> +        if (toParse.length >= 2) {
> +            try {
> +                return Float.parseFloat(toParse[0] + '.' + toParse[1]);
> +            } catch (final NumberFormatException nfe) {
> +                // no-op, let use default
> +            }
> +        }
> +        return -1;
> +    }
>  }
>
> Modified:
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java?rev=1612075&r1=1612074&r2=1612075&view=diff
>
> ==============================================================================
> ---
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java
> (original)
> +++
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/JavaVersionTest.java
> Sun Jul 20 11:31:17 2014
> @@ -19,6 +19,8 @@
>  package org.apache.commons.lang3;
>
>  import org.junit.Test;
> +
> +import static org.apache.commons.lang3.JavaVersion.JAVA_RECENT;
>  import static org.junit.Assert.*;
>  import static org.apache.commons.lang3.JavaVersion.JAVA_0_9;
>  import static org.apache.commons.lang3.JavaVersion.JAVA_1_1;
> @@ -29,6 +31,7 @@ import static org.apache.commons.lang3.J
>  import static org.apache.commons.lang3.JavaVersion.JAVA_1_6;
>  import static org.apache.commons.lang3.JavaVersion.JAVA_1_7;
>  import static org.apache.commons.lang3.JavaVersion.JAVA_1_8;
> +import static org.apache.commons.lang3.JavaVersion.JAVA_1_9;
>  import static org.apache.commons.lang3.JavaVersion.get;
>  import static org.apache.commons.lang3.JavaVersion.getJavaVersion;
>
> @@ -50,7 +53,9 @@ public class JavaVersionTest {
>          assertEquals("1.6 failed", JAVA_1_6, get("1.6"));
>          assertEquals("1.7 failed", JAVA_1_7, get("1.7"));
>          assertEquals("1.8 failed", JAVA_1_8, get("1.8"));
> -        assertNull("1.9 unexpectedly worked", get("1.9"));
> +        assertEquals("1.9 failed", JAVA_1_9, get("1.9"));
> +        assertEquals("1.10 failed", JAVA_RECENT, get("1.10"));
> +        // assertNull("2.10 unexpectedly worked", get("2.10"));
>          assertEquals("Wrapper method failed", get("1.5"),
> getJavaVersion("1.5"));
>      }
>
>
>
>


-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter