/* * FindBugs - Find bugs in Java programs * Copyright (C) 2004-2005 University of Maryland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.umd.cs.findbugs; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Support for finding out what version of Java we're running on. */ public class JavaVersion { private static final Pattern PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)(\\..*)?$"); private final int major; private final int minor; private final String rest; /** * Constant for the Java version we're currently running on. */ private static JavaVersion runtimeVersion; static { try { runtimeVersion = new JavaVersion(SystemProperties.getProperty("java.version")); } catch (JavaVersionException e) { System.err.println("Warning: Unknown version of Java"); // Assume Java 1.0. runtimeVersion = new JavaVersion(1, 0); e.printStackTrace(); } } /** * Constant for Java 1.5 (Tiger). */ public static final JavaVersion JAVA_1_5 = new JavaVersion(1, 5); /** * Constructor. * * @param versionString a version string, as returned from the * <code>java.version</code> system property: * e.g., "1.4.2_04" */ public JavaVersion(String versionString) throws JavaVersionException { Matcher matcher = PATTERN.matcher(versionString); if (!matcher.matches()) throw new JavaVersionException("Could not parse Java version string: " + versionString); try { major = Integer.parseInt(matcher.group(1)); minor = Integer.parseInt(matcher.group(2)); if (matcher.group(3) != null) rest = matcher.group(3); else rest = ""; } catch (NumberFormatException e) { throw new JavaVersionException("Could not parse Java Version string: " + versionString, e); } } /** * Constructor. * * @param major major version * @param minor minor version */ public JavaVersion(int major, int minor) { this.major = major; this.minor = minor; this.rest = ""; } /** * Get the major version number. */ public int getMajor() { return major; } /** * Get the minor version number. */ public int getMinor() { return minor; } /** * Get the rest of the version string after the major and minor numbers. */ public String getRest() { return rest; } @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append(major); buf.append('.'); buf.append(minor); if (rest != null) { buf.append(rest); } return buf.toString(); } /** * Get the version of Java that we are currently * running under. */ public static JavaVersion getRuntimeVersion() { return runtimeVersion; } /** * Return whether the Java version represented by this * object is at least as recent as the one given. * * @param other another JavaVersion * @return true if this Java version is at least as recent as * the one given */ public boolean isSameOrNewerThan(JavaVersion other) { return this.major > other.major || (this.major == other.major && this.minor >= other.minor); } } // vim:ts=3