view generated/sun/misc/Version.java @ 3284:aa9488b471f9

PR3275: Update generated files after OpenJDK 6 b41 update 2017-01-03 Andrew John Hughes <gnu.andrew@redhat.com> PR3275: Update generated files after OpenJDK 6 b41 update * NEWS: Updated. * generated/com/sun/accessibility/internal/resources/accessibility.java, * generated/com/sun/accessibility/internal/resources/accessibility_de.java, * generated/com/sun/accessibility/internal/resources/accessibility_es.java, * generated/com/sun/accessibility/internal/resources/accessibility_fr.java, * generated/com/sun/accessibility/internal/resources/accessibility_it.java, * generated/com/sun/accessibility/internal/resources/accessibility_ja.java, * generated/com/sun/accessibility/internal/resources/accessibility_ko.java, * generated/com/sun/accessibility/internal/resources/accessibility_pt_BR.java, * generated/com/sun/accessibility/internal/resources/accessibility_sv.java, * generated/com/sun/accessibility/internal/resources/accessibility_zh_CN.java, * generated/com/sun/accessibility/internal/resources/accessibility_zh_HK.java, * generated/com/sun/accessibility/internal/resources/accessibility_zh_TW.java, * generated/com/sun/corba/se/impl/logging/ActivationSystemException.java, * generated/com/sun/corba/se/impl/logging/IORSystemException.java, * generated/com/sun/corba/se/impl/logging/InterceptorsSystemException.java, * generated/com/sun/corba/se/impl/logging/NamingSystemException.java, * generated/com/sun/corba/se/impl/logging/OMGSystemException.java, * generated/com/sun/corba/se/impl/logging/ORBUtilSystemException.java, * generated/com/sun/corba/se/impl/logging/POASystemException.java, * generated/com/sun/corba/se/impl/logging/UtilSystemException.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_de.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_es.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_fr.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_it.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_ja.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_ko.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_sv.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_zh_HK.java, * generated/com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.java, * generated/com/sun/java/swing/plaf/motif/resources/motif.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_de.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_es.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_fr.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_it.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_ja.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_ko.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_sv.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_zh_HK.java, * generated/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.java, * generated/com/sun/java/swing/plaf/windows/resources/windows.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_de.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_es.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_fr.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_it.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_ja.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_ko.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_sv.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_zh_HK.java, * generated/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_de.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_es.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_fr.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_it.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_ja.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_ko.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_sv.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_zh_HK.java, * generated/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_de.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_es.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_fr.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_it.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_ja.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_ko.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_sv.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_zh_CN.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_zh_HK.java, * generated/com/sun/swing/internal/plaf/metal/resources/metal_zh_TW.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_de.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_es.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_fr.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_it.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_ja.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_ko.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_sv.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_zh_CN.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_zh_HK.java, * generated/com/sun/swing/internal/plaf/synth/resources/synth_zh_TW.java, * generated/com/sun/tools/jdi/resources/jdi_ja.java, * generated/com/sun/tools/jdi/resources/jdi_zh_CN.java, * generated/java/lang/CharacterDataPrivateUse.java, * generated/java/lang/CharacterDataUndefined.java, * generated/java/lang/UNIXProcess.java, * generated/java/nio/charset/CharsetEncoder.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_bw16_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_bw24_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_bw32_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_bw48_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_interim16_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_interim24_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_interim32_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_interim48_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_yellow16_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_yellow24_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_yellow32_png.java, * generated/sun/awt/X11/XAWTIcon32_security_icon_yellow48_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_bw16_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_bw24_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_bw32_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_bw48_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_interim16_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_interim24_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_interim32_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_interim48_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_yellow16_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_yellow24_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_yellow32_png.java, * generated/sun/awt/X11/XAWTIcon64_security_icon_yellow48_png.java, * generated/sun/awt/X11/XkbAccessXNotifyEvent.java, * generated/sun/awt/X11/XkbActionMessageEvent.java, * generated/sun/awt/X11/XkbAnyEvent.java, * generated/sun/awt/X11/XkbBellNotifyEvent.java, * generated/sun/awt/X11/XkbCompatMapNotifyEvent.java, * generated/sun/awt/X11/XkbControlsNotifyEvent.java, * generated/sun/awt/X11/XkbEvent.java, * generated/sun/awt/X11/XkbExtensionDeviceNotifyEvent.java, * generated/sun/awt/X11/XkbIndicatorNotifyEvent.java, * generated/sun/awt/X11/XkbMapNotifyEvent.java, * generated/sun/awt/X11/XkbNamesNotifyEvent.java, * generated/sun/awt/X11/XkbNewKeyboardNotifyEvent.java, * generated/sun/awt/X11/XkbStateNotifyEvent.java, * generated/sun/awt/X11/generator/sizer.64, * generated/sun/awt/X11/generator/sizes.64, * generated/sun/awt/resources/awt_de.java, * generated/sun/awt/resources/awt_es.java, * generated/sun/awt/resources/awt_fr.java, * generated/sun/awt/resources/awt_it.java, * generated/sun/awt/resources/awt_ja.java, * generated/sun/awt/resources/awt_ko.java, * generated/sun/awt/resources/awt_pt_BR.java, * generated/sun/awt/resources/awt_sv.java, * generated/sun/awt/resources/awt_zh_CN.java, * generated/sun/awt/resources/awt_zh_HK.java, * generated/sun/awt/resources/awt_zh_TW.java, * generated/sun/management/resources/agent_de.java, * generated/sun/management/resources/agent_es.java, * generated/sun/management/resources/agent_fr.java, * generated/sun/management/resources/agent_it.java, * generated/sun/management/resources/agent_ja.java, * generated/sun/management/resources/agent_ko.java, * generated/sun/management/resources/agent_pt_BR.java, * generated/sun/management/resources/agent_sv.java, * generated/sun/management/resources/agent_zh_CN.java, * generated/sun/management/resources/agent_zh_HK.java, * generated/sun/management/resources/agent_zh_TW.java, * generated/sun/misc/Version.java, * generated/sun/nio/ch/AlreadyBoundException.java, * generated/sun/print/resources/serviceui.java, * generated/sun/print/resources/serviceui_de.java, * generated/sun/print/resources/serviceui_es.java, * generated/sun/print/resources/serviceui_fr.java, * generated/sun/print/resources/serviceui_it.java, * generated/sun/print/resources/serviceui_ja.java, * generated/sun/print/resources/serviceui_ko.java, * generated/sun/print/resources/serviceui_pt_BR.java, * generated/sun/print/resources/serviceui_sv.java, * generated/sun/print/resources/serviceui_zh_CN.java, * generated/sun/print/resources/serviceui_zh_HK.java, * generated/sun/print/resources/serviceui_zh_TW.java, * generated/sun/tools/jar/resources/jar.java, * generated/sun/tools/jar/resources/jar_de.java, * generated/sun/tools/jar/resources/jar_es.java, * generated/sun/tools/jar/resources/jar_fr.java, * generated/sun/tools/jar/resources/jar_it.java, * generated/sun/tools/jar/resources/jar_ja.java, * generated/sun/tools/jar/resources/jar_ko.java, * generated/sun/tools/jar/resources/jar_pt_BR.java, * generated/sun/tools/jar/resources/jar_sv.java, * generated/sun/tools/jar/resources/jar_zh_CN.java, * generated/sun/tools/jar/resources/jar_zh_HK.java, * generated/sun/tools/jar/resources/jar_zh_TW.java, * generated/sun/tools/jconsole/Version.java, * generated/sun/util/CoreResourceBundleControl.java, * generated/sun/util/LocaleDataMetaInfo.java, * generated/sun/util/logging/resources/logging_de.java, * generated/sun/util/logging/resources/logging_es.java, * generated/sun/util/logging/resources/logging_fr.java, * generated/sun/util/logging/resources/logging_it.java, * generated/sun/util/logging/resources/logging_ja.java, * generated/sun/util/logging/resources/logging_ko.java, * generated/sun/util/logging/resources/logging_pt_BR.java, * generated/sun/util/logging/resources/logging_sv.java, * generated/sun/util/logging/resources/logging_zh_CN.java, * generated/sun/util/logging/resources/logging_zh_HK.java, * generated/sun/util/logging/resources/logging_zh_TW.java, * generated/sun/util/resources/CalendarData_hu.java, * generated/sun/util/resources/CalendarData_pt_BR.java, * generated/sun/util/resources/CalendarData_sl.java, * generated/sun/util/resources/CurrencyNames.java, * generated/sun/util/resources/CurrencyNames_de.java, * generated/sun/util/resources/CurrencyNames_es.java, * generated/sun/util/resources/CurrencyNames_es_CU.java, * generated/sun/util/resources/CurrencyNames_es_PE.java, * generated/sun/util/resources/CurrencyNames_es_VE.java, * generated/sun/util/resources/CurrencyNames_et_EE.java, * generated/sun/util/resources/CurrencyNames_fr.java, * generated/sun/util/resources/CurrencyNames_it.java, * generated/sun/util/resources/CurrencyNames_ja.java, * generated/sun/util/resources/CurrencyNames_ko.java, * generated/sun/util/resources/CurrencyNames_lt_LT.java, * generated/sun/util/resources/CurrencyNames_lv_LV.java, * generated/sun/util/resources/CurrencyNames_pt.java, * generated/sun/util/resources/CurrencyNames_sk_SK.java, * generated/sun/util/resources/CurrencyNames_sr_RS.java, * generated/sun/util/resources/CurrencyNames_sv.java, * generated/sun/util/resources/CurrencyNames_tr_TR.java, * generated/sun/util/resources/CurrencyNames_uk_UA.java, * generated/sun/util/resources/CurrencyNames_zh_CN.java, * generated/sun/util/resources/CurrencyNames_zh_TW.java, * generated/sun/util/resources/LocaleNames.java, * generated/sun/util/resources/LocaleNames_de.java, * generated/sun/util/resources/LocaleNames_es.java, * generated/sun/util/resources/LocaleNames_fr.java, * generated/sun/util/resources/LocaleNames_it.java, * generated/sun/util/resources/LocaleNames_ja.java, * generated/sun/util/resources/LocaleNames_ko.java, * generated/sun/util/resources/LocaleNames_nl.java, * generated/sun/util/resources/LocaleNames_sv.java, * generated/sun/util/resources/LocaleNames_zh.java, * generated/sun/util/resources/LocaleNames_zh_TW.java: Update existing files and add new ones (notably the pt_BR localisation). * scripts/update_generated.sh: Script to automate updating the generated files.
author Andrew John Hughes <gnu.andrew@redhat.com>
date Tue, 03 Jan 2017 21:46:23 +0000
parents bfbacc38e2ca
children
line wrap: on
line source

/*
 * Copyright (c) 1999, 2007, 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
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package sun.misc;
import java.io.PrintStream;

public class Version {


    private static final String launcher_name =
        "java";

    private static final String java_version =
        "1.6.0_41";

    private static final String java_runtime_name =
        "OpenJDK Runtime Environment";

    private static final String java_runtime_version =
        "1.6.0_41-b41";

    private static final String jdk_derivative_name =
        "IcedTea6 1.14.0pre+r82b0055e8b18";

    private static final String distro_name =
        "Gentoo";

    private static final String distro_package_version =
        "";

    private static final String jdk_revid =
        "";

    private static final String hotspot_revid =
        "";

    static {
        init();
    }

    public static void init() {
        System.setProperty("java.version", java_version);
        System.setProperty("java.runtime.version", java_runtime_version);
        System.setProperty("java.runtime.name", java_runtime_name);
    }

    private static boolean versionsInitialized = false;
    private static int jvm_major_version = 0;
    private static int jvm_minor_version = 0;
    private static int jvm_micro_version = 0;
    private static int jvm_update_version = 0;
    private static int jvm_build_number = 0;
    private static String jvm_special_version = null;
    private static int jdk_major_version = 0;
    private static int jdk_minor_version = 0;
    private static int jdk_micro_version = 0;
    private static int jdk_update_version = 0;
    private static int jdk_build_number = 0;
    private static String jdk_special_version = null;

    /**
     * In case you were wondering this method is called by java -version.
     * Sad that it prints to stderr; would be nicer if default printed on
     * stdout.
     */
    public static void print() {
        print(System.err);
    }

    /**
     * Give a stream, it will print version info on it.
     */
    public static void print(PrintStream ps) {
        /* First line: platform version. */
        ps.println(launcher_name + " version \"" + java_version + "\"");

        String java_vm_name    = System.getProperty("java.vm.name");

        /* Second line: runtime version (ie, libraries). */
        StringBuilder sb = new StringBuilder();
        if (java_vm_name.toLowerCase().startsWith("cacao")) {
            sb.append("IcedTea Runtime Environment");
        } else {
            sb.append(java_runtime_name);
        }
        if (jdk_derivative_name.length() > 0) {
            sb.append(" (").append(jdk_derivative_name).append(")");
        }
        if (distro_package_version.length() > 0) {
            sb.append(" (").append(distro_package_version).append(")");
        } else {
            sb.append(" (");
            if (distro_name.length() > 0)
                sb.append(distro_name).append(" ");
            sb.append("build ").append(java_runtime_version);
            if (jdk_revid.length() > 0)
                sb.append("+").append(jdk_revid);
            sb.append(")");
        }
        ps.println(sb.toString());

        /* Third line: JVM information. */
        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 + ", " +
                   java_vm_info + ")");
    }

    /**
     * Returns the major version of the running JVM if it's 1.6 or newer
     * or any RE VM build. It will return 0 if it's an internal 1.5 or
     * 1.4.x build.
     *
     * @since 1.6
     */
    public static synchronized int jvmMajorVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jvm_major_version;
    }

    /**
     * Returns the minor version of the running JVM if it's 1.6 or newer
     * or any RE VM build. It will return 0 if it's an internal 1.5 or
     * 1.4.x build.
     * @since 1.6
     */
    public static synchronized int jvmMinorVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jvm_minor_version;
    }


    /**
     * Returns the micro version of the running JVM if it's 1.6 or newer
     * or any RE VM build. It will return 0 if it's an internal 1.5 or
     * 1.4.x build.
     * @since 1.6
     */
    public static synchronized int jvmMicroVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jvm_micro_version;
    }

    /**
     * Returns the update release version of the running JVM if it's
     * a RE build. It will return 0 if it's an internal build.
     * @since 1.6
     */
    public static synchronized int jvmUpdateVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jvm_update_version;
    }

    public static synchronized String jvmSpecialVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        if (jvm_special_version == null) {
            jvm_special_version = getJvmSpecialVersion();
        }
        return jvm_special_version;
    }
    public static native String getJvmSpecialVersion();

    /**
     * Returns the build number of the running JVM if it's a RE build
     * It will return 0 if it's an internal build.
     * @since 1.6
     */
    public static synchronized int jvmBuildNumber() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jvm_build_number;
    }

    /**
     * Returns the major version of the running JDK.
     *
     * @since 1.6
     */
    public static synchronized int jdkMajorVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jdk_major_version;
    }

    /**
     * Returns the minor version of the running JDK.
     * @since 1.6
     */
    public static synchronized int jdkMinorVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jdk_minor_version;
    }

    /**
     * Returns the micro version of the running JDK.
     * @since 1.6
     */
    public static synchronized int jdkMicroVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jdk_micro_version;
    }

    /**
     * Returns the update release version of the running JDK if it's
     * a RE build. It will return 0 if it's an internal build.
     * @since 1.6
     */
    public static synchronized int jdkUpdateVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jdk_update_version;
    }

    public static synchronized String jdkSpecialVersion() {
        if (!versionsInitialized) {
            initVersions();
        }
        if (jdk_special_version == null) {
            jdk_special_version = getJdkSpecialVersion();
        }
        return jdk_special_version;
    }
    public static native String getJdkSpecialVersion();

    /**
     * Returns the build number of the running JDK if it's a RE build
     * It will return 0 if it's an internal build.
     * @since 1.6
     */
    public static synchronized int jdkBuildNumber() {
        if (!versionsInitialized) {
            initVersions();
        }
        return jdk_build_number;
    }

    // true if JVM exports the version info including the capabilities
    private static boolean jvmVersionInfoAvailable;
    private static synchronized void initVersions() {
        if (versionsInitialized) {
            return;
        }
        jvmVersionInfoAvailable = getJvmVersionInfo();
        if (!jvmVersionInfoAvailable) {
            // parse java.vm.version for older JVM before the
            // new JVM_GetVersionInfo is added.
            // valid format of the version string is:
            // n.n.n[_uu[c]][-<identifer>]-bxx
            CharSequence cs = System.getProperty("java.vm.version");
            if (cs.length() >= 5 &&
                Character.isDigit(cs.charAt(0)) && cs.charAt(1) == '.' &&
                Character.isDigit(cs.charAt(2)) && cs.charAt(3) == '.' &&
                Character.isDigit(cs.charAt(4))) {
                jvm_major_version = Character.digit(cs.charAt(0), 10);
                jvm_minor_version = Character.digit(cs.charAt(2), 10);
                jvm_micro_version = Character.digit(cs.charAt(4), 10);
                cs = cs.subSequence(5, cs.length());
                if (cs.charAt(0) == '_' && cs.length() >= 3) {
                    int nextChar = 0;
                    if (Character.isDigit(cs.charAt(1)) &&
                        Character.isDigit(cs.charAt(2)) &&
                        Character.isDigit(cs.charAt(3)))
                    {
                        nextChar = 4;
                    } else if (Character.isDigit(cs.charAt(1)) &&
                        Character.isDigit(cs.charAt(2)))
                    {
                        nextChar = 3;
                    }

                    try {
                        String uu = cs.subSequence(1, nextChar).toString();
                        jvm_update_version = Integer.valueOf(uu).intValue();
                        if (cs.length() >= nextChar + 1) {
                            char c = cs.charAt(nextChar);
                            if (c >= 'a' && c <= 'z') {
                                jvm_special_version = Character.toString(c);
                                nextChar++;
                            }
                        }
                    } catch (NumberFormatException e) {
                        // not conforming to the naming convention
                        return;
                    }
                    cs = cs.subSequence(nextChar, cs.length());
                }
                if (cs.charAt(0) == '-') {
                    // skip the first character
                    // valid format: <identifier>-bxx or bxx
                    // non-product VM will have -debug|-release appended
                    cs = cs.subSequence(1, cs.length());
                    String[] res = cs.toString().split("-");
                    for (String s : res) {
                        if (s.charAt(0) == 'b' && s.length() == 3 &&
                            Character.isDigit(s.charAt(1)) &&
                            Character.isDigit(s.charAt(2))) {
                            jvm_build_number =
                                Integer.valueOf(s.substring(1, 3)).intValue();
                            break;
                        }
                    }
                }
            }
        }
        getJdkVersionInfo();
        versionsInitialized = true;
    }

    // Gets the JVM version info if available and sets the jvm_*_version fields
    // and its capabilities.
    //
    // Return false if not available which implies an old VM (Tiger or before).
    private static native boolean getJvmVersionInfo();
    private static native void getJdkVersionInfo();

}

// Help Emacs a little because this file doesn't end in .java.
//
// Local Variables: ***
// mode: java ***
// End: ***