diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java b/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java index 9a4d855ef..41dcfa998 100644 --- a/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java +++ b/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java @@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs.condition; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.optional.extension.DeweyDecimal; /** * An antversion condition @@ -31,16 +32,16 @@ public class AntVersion implements Condition { public boolean eval() throws BuildException { validate(); - float actual = getVersion(); + DeweyDecimal actual = getVersion(); if (null != atLeast) { - if (actual >= Versions.getVersion(atLeast)) { + if (actual.isGreaterThanOrEqual(new DeweyDecimal(atLeast))) { return true; } else { return false; } } if (null != exactly) { - if (actual == Versions.getVersion(exactly)) { + if (actual.isEqual(new DeweyDecimal(exactly))) { return true; } else { return false; @@ -59,46 +60,22 @@ public class AntVersion implements Condition { } } - private float getVersion() { + private DeweyDecimal getVersion() { Project p = new Project(); p.init(); String versionString = p.getProperty("ant.version"); String v = versionString.substring(versionString.indexOf("Ant version")+12, versionString.indexOf("compiled on")-1); - return Versions.getVersion(v); - } - - private static class Versions { - static float getVersion(String vs) { - if (vs.equals("1.1")) return 11f; - if (vs.equals("1.2")) return 12f; - if (vs.equals("1.3")) return 13f; - if (vs.equals("1.4")) return 14f; - if (vs.equals("1.4.1")) return 14.1f; - if (vs.equals("1.5")) return 15f; - if (vs.equals("1.5.1")) return 15.1f; - if (vs.equals("1.5.2")) return 15.2f; - if (vs.equals("1.5.3")) return 15.3f; - if (vs.equals("1.5.4")) return 15.4f; - if (vs.equals("1.5alpha")) return 15.880f; - if (vs.equals("1.6beta1")) return 15.991f; - if (vs.equals("1.6beta2")) return 15.992f; - if (vs.equals("1.6beta3")) return 15.993f; - if (vs.equals("1.6")) return 16f; - if (vs.equals("1.6.0")) return 16f; - if (vs.equals("1.6.1")) return 16.1f; - if (vs.equals("1.6.2")) return 16.2f; - if (vs.equals("1.6.3")) return 16.3f; - if (vs.equals("1.6.4")) return 16.4f; - if (vs.equals("1.6.5")) return 16.5f; - if (vs.equals("1.7alpha")) return 16.880f; - if (vs.equals("1.7beta")) return 16.990f; - if (vs.equals("1.7")) return 17f; - if (vs.equals("1.7.0")) return 17f; - if (vs.equals("1.7.1")) return 17.1f; - if (vs.equals("1.7.2")) return 17.2f; - return 0f; + char[] cs = v.toCharArray(); + int end = cs.length; + for (int i = cs.length; i > 0; i--) { + if (!Character.isLetter(cs[i-1])) { + end = i; + break; + } } + v = v.substring(0, end); + return new DeweyDecimal(v); } public String getAtLeast() {