Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-8800

Wrong detection of Java 10 version in groovy-json

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.x, 2.5.2
    • 3.0.0-alpha-4, 2.5.3
    • JSON
    • 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

          Activity

            People

              paulk Paul King
              pwesolek Przemek Wesolek
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: