[ 
https://issues.apache.org/jira/browse/GROOVY-8800?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16620547#comment-16620547
 ] 

Paul King commented on GROOVY-8800:
-----------------------------------

I cherry-picked the regex change already into master and GROOVY_2_5_X though I 
might go back and try to simplify the earlier logic later.
For the test, checking versions is probably a good thing but I originally was 
thinking more along the lines of some kind of integration test, e.g. using 
JsonSlurper and then collecting some info from the list of entries from the map 
and comparing to some expected order. We would be expecting that to always pass 
from 8 and above I believe. Or do you see a problem with creating such a test 
with reliable behavior?

> Wrong detection of Java 10 version in groovy-json
> -------------------------------------------------
>
>                 Key: GROOVY-8800
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8800
>             Project: Groovy
>          Issue Type: Bug
>          Components: JSON
>    Affects Versions: 3.x, 2.5.2
>         Environment: Oracle Java SE 10, Linux
>            Reporter: Przemek Wesolek
>            Priority: Major
>
> The following code from {{groovy.json.internal.Sys}} incorrectly parses 
> {{java.version}} property on newer Java-s:
> {code:java}
>     static {
>         BigDecimal v = new BigDecimal("-1");
>         String sversion = System.getProperty("java.version");
>         if (sversion.indexOf("_") != -1) {
>             final String[] split = sversion.split("_");
>             try {
>                 String ver = split[0];
>                 if (ver.startsWith("1.7")) {
>                     v = new BigDecimal("1.7");
>                 }
>                 if (ver.startsWith("1.8")) {
>                     v = new BigDecimal("1.8");
>                 }
>                 if (ver.startsWith("1.9")) {
>                     v = new BigDecimal("1.9");
>                 }
>             } catch (Exception ex) {
>                 ex.printStackTrace();
>                 System.err.println("Unable to determine build number or 
> version");
>             }
>         } else if ("1.8.0".equals(sversion)) {
>             v = new BigDecimal("1.8");
>         } else {
>             Pattern p = Pattern.compile("^([1-9]\\.[0-9]+)");
>             Matcher matcher = p.matcher(sversion);
>             if (matcher.find()) {
>                 v = new BigDecimal(matcher.group(0));
>             }
>         }
>         is1_8OrLater = v.compareTo(new BigDecimal("1.8")) >= 0;
>         is1_7 = v.compareTo(new BigDecimal("1.7")) == 0;
>         is1_8 = v.compareTo(new BigDecimal("1.8")) == 0;
>     }
> {code}
> Under Java 10+ ({{java.version=10.0.2}}) all {{is*}} fields are set to 
> {{false}}.
> The outcome of it is e.g. {{LazyMap}} to use {{j.u.TreeMap}} instead of 
> {{j.u.LinkedHashMap}} that would give insertion order for maps returned from 
> {{JsonSlurper}}.
> Just extending the pattern to 
> {code:java}
> "^([1-9]+\\.[0-9]+)"
> {code}
> seems to do the job.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to