]> source.dussan.org Git - aspectj.git/commitdiff
accept "." as base dir in resolving files
authorwisberg <wisberg>
Fri, 2 May 2003 21:03:04 +0000 (21:03 +0000)
committerwisberg <wisberg>
Fri, 2 May 2003 21:03:04 +0000 (21:03 +0000)
util/src/org/aspectj/util/FileUtil.java

index 0a24666c65102bdd8944b5d41ed53b2853d18fb9..77752af4417b057b29b507ab5d143b8b9e2479cf 100644 (file)
@@ -598,11 +598,32 @@ public class FileUtil {
         } else {
             result = new File[paths.length];
             for (int i = 0; i < result.length; i++) {
-                result[i] = new File(basedir, paths[i]);
+                result[i] = newFile(basedir, paths[i]);
             }
         }
         return result;
     }
+    
+    /**
+     * Create a new File, resolving paths ".." and "." specially.
+     * @param dir the File for the parent directory of the file
+     * @param path the path in the parent directory (filename only?)
+     * @return File for the new file.
+     */
+    private static File newFile(File dir, String path) {
+        if (".".equals(path)) {
+            return dir;
+        } else if ("..".equals(path)) {
+            File parentDir = dir.getParentFile();
+            if (null != parentDir) {
+                return parentDir;
+            } else {
+                return new File(dir, "..");
+            }
+        } else {
+            return new File(dir, path);
+        }
+    }
 
     /**
      * Copy files from source dir into destination directory,
@@ -624,8 +645,8 @@ public class FileUtil {
         for (int i = 0; i < paths.length; i++) {
             String path = paths[i];
             LangUtil.throwIaxIfNull(path, "relativePaths-entry");
-            File src = new File(srcDir, relativePaths[i]);
-            File dest = new File(destDir, path);
+            File src = newFile(srcDir, paths[i]);
+            File dest = newFile(destDir, path);
             File destParent = dest.getParentFile();
             if (!destParent.exists()) {
                 destParent.mkdirs();