From f5f6982c88e608482d611018d32219f2f528c045 Mon Sep 17 00:00:00 2001 From: Jacobus Martinus Kruithof Date: Sat, 25 Mar 2006 20:20:49 +0000 Subject: [PATCH] Refactored translatePath from Project to FileUtils. Project now also fails with explicit message on java 1.1. Added javadoc comment for the ant.java.version property git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@388814 13f79535-47bb-0310-9956-ffa450edef68 --- src/main/org/apache/tools/ant/Project.java | 28 ++++++--------- .../org/apache/tools/ant/taskdefs/Javac.java | 4 +-- .../ant/taskdefs/optional/ccm/Continuus.java | 3 +- .../optional/clearcase/ClearCase.java | 3 +- .../ant/taskdefs/optional/ejb/DDCreator.java | 5 +-- .../tools/ant/taskdefs/optional/ejb/Ejbc.java | 5 +-- .../tools/ant/taskdefs/optional/sos/SOS.java | 3 +- .../ant/taskdefs/optional/vss/MSVSS.java | 3 +- .../org/apache/tools/ant/util/FileUtils.java | 35 +++++++++++++++++++ 9 files changed, 61 insertions(+), 28 deletions(-) diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java index 258441512..b3eaf6ea3 100644 --- a/src/main/org/apache/tools/ant/Project.java +++ b/src/main/org/apache/tools/ant/Project.java @@ -187,6 +187,10 @@ public class Project implements ResourceFactory { * Flag which catches Listeners which try to use System.out or System.err . */ private boolean loggingMessage = false; + + /** + * Property used to store the java version ant is running in. + */ public static final String ANT_JAVA_VERSION = "ant.java.version"; /** @@ -284,6 +288,7 @@ public class Project implements ResourceFactory { setSystemProperties(); } + /** * Factory method to create a class loader for loading classes from * a given path. @@ -805,8 +810,9 @@ public class Project implements ResourceFactory { setPropertyInternal(ANT_JAVA_VERSION, javaVersion); // sanity check - if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0)) { - throw new BuildException("Ant cannot work on Java 1.0"); + if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0) + || JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { + throw new BuildException("Ant cannot work on Java 1.0 / 1.1"); } log("Detected Java version: " + javaVersion + " in: " + System.getProperty("java.home"), MSG_VERBOSE); @@ -1332,25 +1338,13 @@ public class Project implements ResourceFactory { * * @return the native version of the specified path or * an empty string if the path is null or empty. + * + * @deprecated use FileUtils.translatePath instead. * * @see PathTokenizer */ public static String translatePath(String toProcess) { - if (toProcess == null || toProcess.length() == 0) { - return ""; - } - StringBuffer path = new StringBuffer(toProcess.length() + 50); - PathTokenizer tokenizer = new PathTokenizer(toProcess); - while (tokenizer.hasMoreTokens()) { - String pathComponent = tokenizer.nextToken(); - pathComponent = pathComponent.replace('/', File.separatorChar); - pathComponent = pathComponent.replace('\\', File.separatorChar); - if (path.length() != 0) { - path.append(File.pathSeparatorChar); - } - path.append(pathComponent); - } - return path.toString(); + return FileUtils.translatePath(toProcess); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java index 02233738f..6aac19256 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -117,9 +117,7 @@ public class Javac extends MatchingTask { } private String assumedJavaVersion() { - if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { - return JAVAC11; - } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) { + if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) { return JAVAC12; } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)) { return JAVAC13; diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java index c5943bffb..b028e1d37 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java @@ -24,6 +24,7 @@ import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.ExecuteStreamHandler; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.util.FileUtils; /** @@ -65,7 +66,7 @@ public abstract class Continuus extends Task { * @param dir the directory containing the ccm executable */ public final void setCcmDir(String dir) { - ccmDir = Project.translatePath(dir); + ccmDir = FileUtils.translatePath(dir); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java index 68d97fcdf..4b02c8303 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java @@ -25,6 +25,7 @@ import org.apache.tools.ant.taskdefs.ExecTask; import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.util.FileUtils; @@ -54,7 +55,7 @@ public abstract class ClearCase extends Task { * @param dir the directory containing the cleartool executable */ public final void setClearToolDir(String dir) { - mClearToolDir = Project.translatePath(dir); + mClearToolDir = FileUtils.translatePath(dir); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java index 1c2f28388..75df6a96b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java @@ -24,6 +24,7 @@ import org.apache.tools.ant.taskdefs.Java; import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.FileUtils; /** * Builds a serialized deployment descriptor given a text file description of the @@ -87,7 +88,7 @@ public class DDCreator extends MatchingTask { } String systemClassPath = System.getProperty("java.class.path"); - String execClassPath = Project.translatePath(systemClassPath + ":" + classpath); + String execClassPath = FileUtils.translatePath(systemClassPath + ":" + classpath); Java ddCreatorTask = new Java(this); ddCreatorTask.setFork(true); ddCreatorTask.setClassname("org.apache.tools.ant.taskdefs.optional.ejb.DDCreatorHelper"); @@ -126,6 +127,6 @@ public class DDCreator extends MatchingTask { * @param s the classpath to use for the ddcreator tool. */ public void setClasspath(String s) { - this.classpath = getProject().translatePath(s); + this.classpath = FileUtils.translatePath(s); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java index 62b8e8628..74063edb7 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java @@ -24,6 +24,7 @@ import org.apache.tools.ant.taskdefs.Java; import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.FileUtils; /** * Builds EJB support classes using WebLogic's ejbc tool from a directory containing @@ -94,7 +95,7 @@ public class Ejbc extends MatchingTask { String systemClassPath = System.getProperty("java.class.path"); String execClassPath - = Project.translatePath(systemClassPath + ":" + classpath + = FileUtils.translatePath(systemClassPath + ":" + classpath + ":" + generatedFilesDirectory); // get all the files in the descriptor directory DirectoryScanner ds = super.getDirectoryScanner(descriptorDirectory); @@ -172,7 +173,7 @@ public class Ejbc extends MatchingTask { * Set the classpath to be used for this compilation. */ public void setClasspath(String s) { - this.classpath = getProject().translatePath(s); + this.classpath = FileUtils.translatePath(s); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java index 61f951e7f..a9c250ac9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java @@ -24,6 +24,7 @@ import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.FileUtils; /** * A base class for creating tasks for executing commands on SourceOffSite. @@ -82,7 +83,7 @@ public abstract class SOS extends Task implements SOSCmd { * @param dir The new sosCmd value. */ public final void setSosCmd(String dir) { - sosCmdDir = Project.translatePath(dir); + sosCmdDir = FileUtils.translatePath(dir); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java index 4191bdf9d..1d4b373a2 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java @@ -32,6 +32,7 @@ import org.apache.tools.ant.Task; import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.util.FileUtils; /** * A base class for creating tasks for executing commands on Visual SourceSafe. @@ -112,7 +113,7 @@ public abstract class MSVSS extends Task implements MSVSSConstants { * @param dir The directory containing ss.exe. */ public final void setSsdir(String dir) { - this.ssDir = Project.translatePath(dir); + this.ssDir = FileUtils.translatePath(dir); } /** diff --git a/src/main/org/apache/tools/ant/util/FileUtils.java b/src/main/org/apache/tools/ant/util/FileUtils.java index a20d47ed0..518164c09 100644 --- a/src/main/org/apache/tools/ant/util/FileUtils.java +++ b/src/main/org/apache/tools/ant/util/FileUtils.java @@ -32,6 +32,7 @@ import java.util.Stack; import java.util.StringTokenizer; import java.util.Vector; import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.PathTokenizer; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.condition.Os; import org.apache.tools.ant.types.FilterSetCollection; @@ -601,6 +602,40 @@ public class FileUtils { || (onNetWare && colon > 0); } + /** + * Translate a path into its native (platform specific) format. + *

+ * This method uses PathTokenizer to separate the input path + * into its components. This handles DOS style paths in a relatively + * sensible way. The file separators are then converted to their platform + * specific versions. + * + * @param toProcess The path to be translated. + * May be null. + * + * @return the native version of the specified path or + * an empty string if the path is null or empty. + * + * @since ant 1.7 + * @see PathTokenizer + */ + public static String translatePath(String toProcess) { + if (toProcess == null || toProcess.length() == 0) { + return ""; + } + StringBuffer path = new StringBuffer(toProcess.length() + 50); + PathTokenizer tokenizer = new PathTokenizer(toProcess); + while (tokenizer.hasMoreTokens()) { + String pathComponent = tokenizer.nextToken(); + pathComponent = pathComponent.replace('/', File.separatorChar); + pathComponent = pathComponent.replace('\\', File.separatorChar); + if (path.length() != 0) { + path.append(File.pathSeparatorChar); + } + path.append(pathComponent); + } + return path.toString(); + } /** * "Normalize" the given absolute path. *