Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.x, 2.5.2
-
None
-
Oracle Java SE 10, Linux
Description
I cloned another issue (GROOVY-8824) to cater for refactoring/testing. The pattern change has been merged under this issue.
ORIGINAL BELOW:
The following code from groovy.json.internal.Sys incorrectly parses java.version property on newer Java-s:
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; }
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.
Attachments
Issue Links
- is cloned by
-
GROOVY-8824 CLONE - Wrong detection of Java 10 version in groovy-json Part 2
- Open