mbenson     2005/02/11 14:37:04

  Modified:    src/main/org/apache/tools/ant DirectoryScanner.java
  Log:
  Merged duplicate code from private methods.
  
  Revision  Changes    Path
  1.87      +19 -69    ant/src/main/org/apache/tools/ant/DirectoryScanner.java
  
  Index: DirectoryScanner.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/DirectoryScanner.java,v
  retrieving revision 1.86
  retrieving revision 1.87
  diff -u -r1.86 -r1.87
  --- DirectoryScanner.java     11 Feb 2005 20:53:47 -0000      1.86
  +++ DirectoryScanner.java     11 Feb 2005 22:37:04 -0000      1.87
  @@ -849,7 +849,7 @@
                           String path = FILE_UTILS.removeLeadingPath(canonBase,
                                                                     canonFile);
                           if (!path.equals(currentelement) || ON_VMS) {
  -                            myfile = findFile(basedir, currentelement);
  +                            myfile = findFile(basedir, currentelement, true);
                               if (myfile != null) {
                                   currentelement =
                                       FILE_UTILS.removeLeadingPath(basedir,
  @@ -861,7 +861,7 @@
                       }
                   }
                   if ((myfile == null || !myfile.exists()) && 
!isCaseSensitive()) {
  -                    File f = findFileCaseInsensitive(basedir, 
currentelement);
  +                    File f = findFile(basedir, currentelement, false);
                       if (f.exists()) {
                           // adapt currentelement to the case we've
                           // actually found
  @@ -1448,75 +1448,18 @@
       }
   
       /**
  -     * From <code>base</code> traverse the filesystem in a case
  -     * insensitive manner in order to find a file that matches the
  -     * given name.
  -     *
  -     * @param base base File (dir).
  -     * @param path file path.
  -     * @return File object that points to the file in question.  if it
  -     * hasn't been found it will simply be <code>new File(base,
  -     * path)</code>.
  -     *
  -     * @since Ant 1.6
  -     */
  -    private File findFileCaseInsensitive(File base, String path) {
  -        File f = findFileCaseInsensitive(base,
  -                                         SelectorUtils.tokenizePath(path));
  -        return  f == null ? new File(base, path) : f;
  -    }
  -
  -    /**
  -     * From <code>base</code> traverse the filesystem in a case
  -     * insensitive manner in order to find a file that matches the
  -     * given stack of names.
  -     *
  -     * @param base base File (dir).
  -     * @param pathElements Vector of path elements (dirs...file).
  -     * @return File object that points to the file in question or null.
  -     *
  -     * @since Ant 1.6
  -     */
  -    private File findFileCaseInsensitive(File base, Vector pathElements) {
  -        if (pathElements.size() == 0) {
  -            return base;
  -        }
  -        if (!base.isDirectory()) {
  -            return null;
  -        }
  -        String[] files = list(base);
  -        if (files == null) {
  -            throw new BuildException("IO error scanning directory "
  -                                     + base.getAbsolutePath());
  -        }
  -        String current = (String) pathElements.remove(0);
  -        for (int i = 0; i < files.length; i++) {
  -            if (files[i].equals(current)) {
  -                return findFileCaseInsensitive(
  -                    new File(base, files[i]), pathElements);
  -            }
  -        }
  -        for (int i = 0; i < files.length; i++) {
  -            if (files[i].equalsIgnoreCase(current)) {
  -                return findFileCaseInsensitive(
  -                    new File(base, files[i]), pathElements);
  -            }
  -        }
  -        return null;
  -    }
  -
  -    /**
        * From <code>base</code> traverse the filesystem in order to find
        * a file that matches the given name.
        *
        * @param base base File (dir).
        * @param path file path.
  +     * @param cs whether to scan case-sensitively.
        * @return File object that points to the file in question or null.
        *
  -     * @since Ant 1.6
  +     * @since Ant 1.7
        */
  -    private File findFile(File base, String path) {
  -        return findFile(base, SelectorUtils.tokenizePath(path));
  +    private File findFile(File base, String path, boolean cs) {
  +        return findFile(base, SelectorUtils.tokenizePath(path), cs);
       }
   
       /**
  @@ -1525,11 +1468,12 @@
        *
        * @param base base File (dir).
        * @param pathElements Vector of path elements (dirs...file).
  +     * @param cs whether to scan case-sensitively.
        * @return File object that points to the file in question or null.
        *
  -     * @since Ant 1.6
  +     * @since Ant 1.7
        */
  -    private File findFile(File base, Vector pathElements) {
  +    private File findFile(File base, Vector pathElements, boolean cs) {
           if (pathElements.size() == 0) {
               return base;
           }
  @@ -1542,10 +1486,16 @@
                                        + base.getAbsolutePath());
           }
           String current = (String) pathElements.remove(0);
  -        for (int i = 0; i < files.length; i++) {
  -            if (files[i].equals(current)) {
  -                base = new File(base, files[i]);
  -                return findFile(base, pathElements);
  +
  +        //always scan first NOT ignoring case; if cs, do a 2nd scan ignoring 
case:
  +        boolean[] ignoreCase = cs ? new boolean[] {false}
  +                                  : new boolean[] {false, true};
  +        for (int i = 0; i < ignoreCase.length; i++) {
  +            for (int j = 0; j < files.length; j++) {
  +                if (ignoreCase[i] ? files[j].equalsIgnoreCase(current)
  +                                  : files[j].equals(current)) {
  +                    return findFile(new File(base, files[j]), pathElements, 
cs);
  +                }
               }
           }
           return null;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to