changeset 2562:7746392aec3c

[PATCH] small fixes for Windows This is a tiny patch that makes the following changes for Windows compatibility. - the profiler uses File.pathSeparator instead of hardcoded ':' when parsing a classpath. - the version parser regular expression has been updated to handle the format of the JDK on windows, which has an extra '-redhat' appended to the end. Reviewed by: sgehwolf Review thread: http://icedtea.classpath.org/pipermail/thermostat/2017-January/021912.html
author Simon Tooke <stooke@redhat.com>
date Thu, 19 Jan 2017 16:02:46 -0500
parents 879eb9424133
children 512785b11eda
files vm-gc/common/src/main/java/com/redhat/thermostat/vm/gc/common/params/JavaVersionRange.java vm-gc/common/src/test/java/com/redhat/thermostat/vm/gc/common/params/JavaVersionRangeTest.java vm-profiler/jvm-agent/src/main/java/com/redhat/thermostat/vm/profiler/agent/jvm/ProfilerAgent.java
diffstat 3 files changed, 21 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/vm-gc/common/src/main/java/com/redhat/thermostat/vm/gc/common/params/JavaVersionRange.java	Wed Jan 18 11:19:51 2017 -0500
+++ b/vm-gc/common/src/main/java/com/redhat/thermostat/vm/gc/common/params/JavaVersionRange.java	Thu Jan 19 16:02:46 2017 -0500
@@ -62,7 +62,8 @@
     private static final String OPTIONAL_UPDATE_PATTERN = "(?:" + UPDATE_PATTERN + ")?"; // non-capturing group
     private static final String PRE_RELEASE_PATTERN = "-([0-9a-zA-Z]+)";
     private static final String OPTIONAL_PRE_RELEASE_PATTERN = "(?:" + PRE_RELEASE_PATTERN + ")?"; // non-capturing group
-    private static final String OPTIONAL_SUFFIX = "(" + OPTIONAL_UPDATE_PATTERN + OPTIONAL_PRE_RELEASE_PATTERN + ")";
+    private static final String OPTIONAL_VENDOR_PATTERN = OPTIONAL_PRE_RELEASE_PATTERN; // non-capturing group
+    private static final String OPTIONAL_SUFFIX = "(" + OPTIONAL_UPDATE_PATTERN + OPTIONAL_PRE_RELEASE_PATTERN + OPTIONAL_VENDOR_PATTERN + ")";
     private static final String SINGLE_VERSION_PATTERN_STRING = NUM + DOT + NUM + DOT + NUM + OPTIONAL_SUFFIX;
     private static final String VERSION_PATTERN_STRING = LBRACK + "?" + "(" + SINGLE_VERSION_PATTERN_STRING + ")" + RBRACK + "?";
     private static final String RANGE_PATTERN_STRING = LBRACK + "(" + SINGLE_VERSION_PATTERN_STRING + ")?" + COMMA
@@ -100,7 +101,7 @@
         if (singleVersionMatcher.matches()) {
             VersionPoints points = VersionPoints.fromString(singleVersionMatcher.group(2));
             String leftBracket = singleVersionMatcher.group(1);
-            String rightBracket = singleVersionMatcher.group(9);
+            String rightBracket = singleVersionMatcher.group(10);
             if (leftBracket == null && rightBracket == null) {
                 return new JavaVersionRange(points);
             } else if (leftBracket != null && rightBracket != null) {
@@ -112,7 +113,7 @@
             Matcher rangeVersionMatcher = RANGE_PATTERN.matcher(javaVersionString);
             if (rangeVersionMatcher.matches()) {
                 String lower = rangeVersionMatcher.group(2);
-                String upper = rangeVersionMatcher.group(9);
+                String upper = rangeVersionMatcher.group(10);
                 VersionPoints lowerBound, upperBound;
                 if (lower == null && upper == null) {
                     throw new InvalidJavaVersionFormatException("Cannot specify a range without any bounds");
@@ -127,7 +128,7 @@
                     upperBound = VersionPoints.fromString(upper);
                 }
                 String leftBracket = rangeVersionMatcher.group(1);
-                String rightBracket = rangeVersionMatcher.group(16);
+                String rightBracket = rangeVersionMatcher.group(18);
                 return new JavaVersionRange(lowerBound, isInclusive(leftBracket.charAt(0)), upperBound, isInclusive(rightBracket.charAt(0)));
             } else {
                 throw new InvalidJavaVersionFormatException(javaVersionString);
--- a/vm-gc/common/src/test/java/com/redhat/thermostat/vm/gc/common/params/JavaVersionRangeTest.java	Wed Jan 18 11:19:51 2017 -0500
+++ b/vm-gc/common/src/test/java/com/redhat/thermostat/vm/gc/common/params/JavaVersionRangeTest.java	Thu Jan 19 16:02:46 2017 -0500
@@ -36,10 +36,13 @@
 
 package com.redhat.thermostat.vm.gc.common.params;
 
+import org.junit.Assert;
 import org.junit.Test;
 
 import com.redhat.thermostat.vm.gc.common.params.JavaVersionRange.VersionPoints;
 
+import java.util.regex.Pattern;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -60,6 +63,17 @@
     static final JavaVersionRange LARGE_RANGE = new JavaVersionRange(ONE_ZERO_ZERO_U0, true, TWO_ZERO_TEN_U40, true);
 
     @Test
+    public void testVendorStringInVersion() {
+        final String winRawStr = "1.8.0_101-1-comment";
+        final String oldRawStr = "1.8.0_101-1";
+        final JavaVersionRange winRange = JavaVersionRange.fromString(winRawStr);
+        final JavaVersionRange oldRange = JavaVersionRange.fromString(oldRawStr);
+        final String winRangeStr = winRange.toString();
+        final String oldRangeStr = oldRange.toString();
+        Assert.assertEquals("must strip off '-comment'", oldRangeStr, winRangeStr);
+    }
+
+    @Test
     public void testValidSingleVersionComparisons() {
         assertFalse(ONE_ZERO_ZERO_U0 + " = " + ONE_ZERO_ZERO_U0, lessThan(VERSION_ONE_ZERO_ZERO_U0, VERSION_ONE_ZERO_ZERO_U0));
         assertTrue(ONE_ZERO_ZERO_U0 + " < " + ONE_ZERO_ONE_U0, lessThan(VERSION_ONE_ZERO_ZERO_U0, VERSION_ONE_ZERO_ONE_U0));
--- a/vm-profiler/jvm-agent/src/main/java/com/redhat/thermostat/vm/profiler/agent/jvm/ProfilerAgent.java	Wed Jan 18 11:19:51 2017 -0500
+++ b/vm-profiler/jvm-agent/src/main/java/com/redhat/thermostat/vm/profiler/agent/jvm/ProfilerAgent.java	Thu Jan 19 16:02:46 2017 -0500
@@ -36,6 +36,7 @@
 
 package com.redhat.thermostat.vm.profiler.agent.jvm;
 
+import java.io.File;
 import java.io.IOException;
 import java.lang.instrument.Instrumentation;
 import java.lang.reflect.Constructor;
@@ -80,7 +81,7 @@
         Debug.println("Boot-Classpath: " + System.getProperty("sun.boot.class.path"));
         Debug.println("Classpath: " + System.getProperty("java.class.path"));
         boolean addToBoot = true;
-        String[] jarPaths = jars.split(":");
+        String[] jarPaths = jars.split(File.pathSeparator);
         for (String jarPath : jarPaths) {
             JarFile jarFile = null;
             try {