Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
3.x, 2.5.2
-
None
-
None
-
Oracle Java SE 10, Linux
Description
I cloned the issue to cater for testing. I didn't get time to look at refactoring just yet.
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 a clone of
-
GROOVY-8800 Wrong detection of Java 10 version in groovy-json
- Closed