Author: bodewig Date: Wed Sep 10 04:04:50 2008 New Revision: 693785 URL: http://svn.apache.org/viewvc?rev=693785&view=rev Log: some style changes, doc fixes (non-wildcard patterns are store upper-case), some minor optimizations and some additional memoization of File.list() that may actually improve performance
Modified: ant/core/trunk/src/main/org/apache/tools/ant/DirectoryScanner.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/DirectoryScanner.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/DirectoryScanner.java?rev=693785&r1=693784&r2=693785&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/DirectoryScanner.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/DirectoryScanner.java Wed Sep 10 04:04:50 2008 @@ -289,7 +289,7 @@ * contain any wildcards. * * <p>If this instance is not case sensitive, the file names get - * turned to lower case.</p> + * turned to upper case.</p> * * <p>Gets lazily initialized on the first invocation of * isIncluded or isExcluded and cleared at the end of the scan @@ -304,7 +304,7 @@ * contain any wildcards. * * <p>If this instance is not case sensitive, the file names get - * turned to lower case.</p> + * turned to upper case.</p> * * <p>Gets lazily initialized on the first invocation of * isIncluded or isExcluded and cleared at the end of the scan @@ -813,8 +813,10 @@ } } if (!basedir.isDirectory()) { - illegal = new IllegalStateException("basedir " + basedir - + " is not a directory"); + illegal = new IllegalStateException("basedir " + + basedir + + " is not a" + + " directory"); } if (illegal != null) { throw illegal; @@ -889,7 +891,8 @@ while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String currentelement = (String) entry.getKey(); - if (basedir == null && !FileUtils.isAbsolutePath(currentelement)) { + if (basedir == null + && !FileUtils.isAbsolutePath(currentelement)) { continue; } String originalpattern = (String) entry.getValue(); @@ -1063,7 +1066,7 @@ if (dir == null) { throw new BuildException("dir must not be null."); } - String[] newfiles = dir.list(); + String[] newfiles = list(dir); if (newfiles == null) { if (!dir.exists()) { throw new BuildException(dir + " doesn't exist."); @@ -1076,7 +1079,9 @@ } scandir(dir, vpath, fast, newfiles); } - private void scandir(File dir, String vpath, boolean fast, String[] newfiles) { + + private void scandir(File dir, String vpath, boolean fast, + String[] newfiles) { // avoid double scanning of directories, can only happen in fast mode if (fast && hasBeenScanned(vpath)) { return; @@ -1106,7 +1111,7 @@ for (int i = 0; i < newfiles.length; i++) { String name = vpath + newfiles[i]; File file = new File(dir, newfiles[i]); - String[] children = file.list(); + String[] children = list(file); if (children == null) { // probably file if (isIncluded(name)) { accountForIncludedFile(name, file); @@ -1137,7 +1142,8 @@ * @param file included File. */ private void accountForIncludedFile(String name, File file) { - processIncluded(name, file, filesIncluded, filesExcluded, filesDeselected); + processIncluded(name, file, filesIncluded, filesExcluded, + filesDeselected); } /** @@ -1153,16 +1159,21 @@ scandir(file, name + File.separator, fast); } } - private void accountForIncludedDir(String name, File file, boolean fast, String[] children) { + + private void accountForIncludedDir(String name, File file, boolean fast, + String[] children) { processIncluded(name, file, dirsIncluded, dirsExcluded, dirsDeselected); if (fast && couldHoldIncluded(name) && !contentsExcluded(name)) { scandir(file, name + File.separator, fast, children); } } - private void processIncluded(String name, File file, Vector inc, Vector exc, Vector des) { + private void processIncluded(String name, File file, Vector inc, + Vector exc, Vector des) { - if (inc.contains(name) || exc.contains(name) || des.contains(name)) { return; } + if (inc.contains(name) || exc.contains(name) || des.contains(name)) { + return; + } boolean included = false; if (isExcluded(name)) { @@ -1229,8 +1240,11 @@ */ private boolean isDeeper(String pattern, String name) { Vector p = SelectorUtils.tokenizePath(pattern); - Vector n = SelectorUtils.tokenizePath(name); - return p.contains("**") || p.size() > n.size(); + if (!p.contains("**")) { + Vector n = SelectorUtils.tokenizePath(name); + return p.size() > n.size(); + } + return true; } /** @@ -1246,10 +1260,12 @@ * * @param name the relative path to test. * @param includepattern one include pattern. - * @return true if there is no exclude pattern more powerful than this include pattern. + * @return true if there is no exclude pattern more powerful than + * this include pattern. * @since Ant 1.6 */ - private boolean isMorePowerfulThanExcludes(String name, String includepattern) { + private boolean isMorePowerfulThanExcludes(String name, + String includepattern) { String soughtexclude = name + File.separator + "**"; for (int counter = 0; counter < excludes.length; counter++) { if (excludes[counter].equals(soughtexclude)) { @@ -1327,12 +1343,15 @@ * @return the names of the files which matched at least one of the * include patterns and none of the exclude patterns. */ - public synchronized String[] getIncludedFiles() { - if (filesIncluded == null) { - throw new IllegalStateException("Must call scan() first"); + public String[] getIncludedFiles() { + String[] files; + synchronized (this) { + if (filesIncluded == null) { + throw new IllegalStateException("Must call scan() first"); + } + files = new String[filesIncluded.size()]; + filesIncluded.copyInto(files); } - String[] files = new String[filesIncluded.size()]; - filesIncluded.copyInto(files); Arrays.sort(files); return files; } @@ -1410,12 +1429,15 @@ * @return the names of the directories which matched at least one of the * include patterns and none of the exclude patterns. */ - public synchronized String[] getIncludedDirectories() { - if (dirsIncluded == null) { - throw new IllegalStateException("Must call scan() first"); + public String[] getIncludedDirectories() { + String[] directories; + synchronized (this) { + if (dirsIncluded == null) { + throw new IllegalStateException("Must call scan() first"); + } + directories = new String[dirsIncluded.size()]; + dirsIncluded.copyInto(directories); } - String[] directories = new String[dirsIncluded.size()]; - dirsIncluded.copyInto(directories); Arrays.sort(directories); return directories; } @@ -1515,6 +1537,8 @@ return new FileResource(basedir, name); } + private static final String[] NULL_FILE_LIST = new String[0]; + /** * Return a cached result of list performed on file, if * available. Invokes the method and caches the result otherwise. @@ -1528,7 +1552,11 @@ files = file.list(); if (files != null) { fileListMap.put(file, files); + } else { + fileListMap.put(file, NULL_FILE_LIST); } + } else if (files == NULL_FILE_LIST) { + files = null; } return files; } @@ -1554,7 +1582,8 @@ File f = FILE_UTILS.normalize(path); String s = FILE_UTILS.removeLeadingPath(base, f); if (s.equals(f.getAbsolutePath())) { - //removing base from path yields no change; path not child of base + //removing base from path yields no change; path + //not child of base return null; } path = s;