/*
 * Copyright (C) 2017 The Gson authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.gson.internal;

Utility to check the major Java version of the current JVM.
/** * Utility to check the major Java version of the current JVM. */
public final class JavaVersion { // Oracle defines naming conventions at http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html // However, many alternate implementations differ. For example, Debian used 9-debian as the version string private static final int majorJavaVersion = determineMajorJavaVersion(); private static int determineMajorJavaVersion() { String javaVersion = System.getProperty("java.version"); return getMajorJavaVersion(javaVersion); } // Visible for testing only static int getMajorJavaVersion(String javaVersion) { int version = parseDotted(javaVersion); if (version == -1) { version = extractBeginningInt(javaVersion); } if (version == -1) { return 6; // Choose minimum supported JDK version as default } return version; } // Parses both legacy 1.8 style and newer 9.0.4 style private static int parseDotted(String javaVersion) { try { String[] parts = javaVersion.split("[._]"); int firstVer = Integer.parseInt(parts[0]); if (firstVer == 1 && parts.length > 1) { return Integer.parseInt(parts[1]); } else { return firstVer; } } catch (NumberFormatException e) { return -1; } } private static int extractBeginningInt(String javaVersion) { try { StringBuilder num = new StringBuilder(); for (int i = 0; i < javaVersion.length(); ++i) { char c = javaVersion.charAt(i); if (Character.isDigit(c)) { num.append(c); } else { break; } } return Integer.parseInt(num.toString()); } catch (NumberFormatException e) { return -1; } }
Returns:the major Java version, i.e. '8' for Java 1.8, '9' for Java 9 etc.
/** * @return the major Java version, i.e. '8' for Java 1.8, '9' for Java 9 etc. */
public static int getMajorJavaVersion() { return majorJavaVersion; }
Returns:true if the application is running on Java 9 or later; and false otherwise.
/** * @return {@code true} if the application is running on Java 9 or later; and {@code false} otherwise. */
public static boolean isJava9OrLater() { return majorJavaVersion >= 9; } private JavaVersion() { } }