/*
* 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