8139986: Store debug level in java.vm.debug and conditionally print in "java -version"
authoramurillo
Wed, 04 Nov 2015 16:02:53 -0800
changeset 34011 b1ce08dd7f17
parent 34010 3aa306b5485e
child 34012 b8b34f35e2ee
8139986: Store debug level in java.vm.debug and conditionally print in "java -version" Reviewed-by: ihse, dcubed, ksrini, dholmes Contributed-by: alejandro.murillo@oracle.com, kumar.x.srinivasan@oracle.com
jdk/src/java.base/share/classes/sun/misc/Version.java.template
jdk/test/lib/testlibrary/jdk/testlibrary/Platform.java
jdk/test/tools/launcher/VersionCheck.java
--- a/jdk/src/java.base/share/classes/sun/misc/Version.java.template	Sun Nov 01 09:49:05 2015 -0800
+++ b/jdk/src/java.base/share/classes/sun/misc/Version.java.template	Wed Nov 04 16:02:53 2015 -0800
@@ -98,7 +98,15 @@
 
         /* Second line: runtime version (ie, libraries). */
 
-        ps.print(java_runtime_name + " (build " + java_runtime_version);
+        String jdk_debug_level = System.getProperty("jdk.debug", "release");
+        /* Debug level is not printed for "release" builds */
+        if ("release".equals(jdk_debug_level)) {
+            jdk_debug_level = "";
+        } else {
+            jdk_debug_level = jdk_debug_level + " ";
+        }
+
+        ps.print(java_runtime_name + " (" + jdk_debug_level + "build " + java_runtime_version);
 
         if (java_runtime_name.indexOf("Embedded") != -1 && isHeadless) {
             // embedded builds report headless state
@@ -110,7 +118,7 @@
         String java_vm_name    = System.getProperty("java.vm.name");
         String java_vm_version = System.getProperty("java.vm.version");
         String java_vm_info    = System.getProperty("java.vm.info");
-        ps.println(java_vm_name + " (build " + java_vm_version + ", " +
+        ps.println(java_vm_name + " (" + jdk_debug_level + "build " + java_vm_version + ", " +
                    java_vm_info + ")");
     }
 
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/Platform.java	Sun Nov 01 09:49:05 2015 -0800
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/Platform.java	Wed Nov 04 16:02:53 2015 -0800
@@ -31,7 +31,7 @@
     private static final String osName      = System.getProperty("os.name");
     private static final String dataModel   = System.getProperty("sun.arch.data.model");
     private static final String vmVersion   = System.getProperty("java.vm.version");
-    private static final String javaVersion = System.getProperty("java.version");
+    private static final String jdkDebug    = System.getProperty("jdk.debug");
     private static final String osArch      = System.getProperty("os.arch");
     private static final String vmName      = System.getProperty("java.vm.name");
     private static final String userName    = System.getProperty("user.name");
@@ -99,8 +99,7 @@
     }
 
     public static boolean isDebugBuild() {
-        return (vmVersion.toLowerCase().contains("debug") ||
-                javaVersion.toLowerCase().contains("debug"));
+        return (jdkDebug.toLowerCase().contains("debug"));
     }
 
     public static String getVMVersion() {
--- a/jdk/test/tools/launcher/VersionCheck.java	Sun Nov 01 09:49:05 2015 -0800
+++ b/jdk/test/tools/launcher/VersionCheck.java	Wed Nov 04 16:02:53 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /**
  * @test
- * @bug 6545058 6611182 8016209
+ * @bug 6545058 6611182 8016209 8139986
  * @summary validate and test -version, -fullversion, and internal, as well as
  *          sanity checks if a tool can be launched.
  * @compile VersionCheck.java
@@ -115,12 +115,20 @@
     static String refVersion;
     static String refFullVersion;
 
+    static String getAllVersionLines(String... argv) {
+        return getVersion0(true, argv);
+    }
+
     static String getVersion(String... argv) {
+        return getVersion0(false, argv);
+    }
+
+    static String getVersion0(boolean allLines, String... argv) {
         TestHelper.TestResult tr = doExec(argv);
         StringBuilder out = new StringBuilder();
         // remove the HotSpot line
         for (String x : tr.testOutput) {
-            if (!x.matches(".*Client.*VM.*|.*Server.*VM.*")) {
+            if (allLines || !x.matches(".*Client.*VM.*|.*Server.*VM.*")) {
                 out = out.append(x + "\n");
             }
         }
@@ -202,6 +210,28 @@
         return failcount == 0;
     }
 
+    static boolean testDebugVersion() {
+        String jdkType = System.getProperty("jdk.debug", "release");
+        String versionLines = getAllVersionLines(javaCmd, "-version");
+        if ("release".equals(jdkType)) {
+            jdkType = "";
+        } else {
+            jdkType = jdkType + " ";
+        }
+        String tofind = "(" + jdkType + "build";
+        int idx = versionLines.indexOf(tofind);
+        if (idx < 0) {
+            System.out.println("Did not find first instance of " + tofind);
+            return false;
+        }
+        idx =  versionLines.indexOf(tofind, idx + 1);
+        if (idx < 0) {
+            System.out.println("Did not find first instance of " + tofind);
+            return false;
+        }
+        return true;
+    }
+
     // Initialize
     static void init() {
         refVersion = getVersion(javaCmd, "-version");
@@ -212,7 +242,8 @@
         init();
         if (compareJVersionStrings() &&
                 compareInternalStrings() &&
-                testToolVersion()) {
+                testToolVersion() &&
+                testDebugVersion()) {
             System.out.println("All Version string comparisons: PASS");
         } else {
             throw new AssertionError("Some tests failed");
@@ -220,7 +251,7 @@
     }
 
     static class ToolFilter implements FileFilter {
-        final Iterable<String> exclude ;
+        final Iterable<String> exclude;
         protected ToolFilter(String... exclude) {
             List<String> tlist = new ArrayList<>();
             this.exclude = tlist;