Przemek Wesolek created GROOVY-8800:
---------------------------------------

             Summary: 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: 2.5.2, 3.x
         Environment: Oracle Java SE 10, Linux
            Reporter: Przemek Wesolek


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 {{"^([1-9]+\\.[0-9]+)"}} seems to do the job.



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

Reply via email to