Author: kevj
Date: Fri Aug 25 02:01:20 2006
New Revision: 436724

URL: http://svn.apache.org/viewvc?rev=436724&view=rev
Log:
refactoring DirectoryScanner to reduce duplicated code, tests all pass

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=436724&r1=436723&r2=436724&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 Fri Aug 
25 02:01:20 2006
@@ -832,11 +832,11 @@
         Hashtable newroots = new Hashtable();
         // put in the newroots vector the include patterns without
         // wildcard tokens
-        for (int icounter = 0; icounter < includes.length; icounter++) {
-            if (FileUtils.isAbsolutePath(includes[icounter])) {
+        for (int i = 0; i < includes.length; i++) {
+            if (FileUtils.isAbsolutePath(includes[i])) {
                 //skip abs. paths not under basedir, if set:
                 if (basedir != null
-                    && !SelectorUtils.matchPatternStart(includes[icounter],
+                    && !SelectorUtils.matchPatternStart(includes[i],
                     basedir.getAbsolutePath(), isCaseSensitive())) {
                     continue;
                 }
@@ -845,7 +845,7 @@
                 continue;
             }
             newroots.put(SelectorUtils.rtrimWildcardTokens(
-                includes[icounter]), includes[icounter]);
+                includes[i]), includes[i]);
         }
         if (newroots.containsKey("") && basedir != null) {
             // we are going to scan everything anyway
@@ -990,18 +990,8 @@
                 String[] notIncl = new String[dirsNotIncluded.size()];
                 dirsNotIncluded.copyInto(notIncl);
 
-                for (int i = 0; i < excl.length; i++) {
-                    if (!couldHoldIncluded(excl[i])) {
-                        scandir(new File(basedir, excl[i]),
-                                excl[i] + File.separator, false);
-                    }
-                }
-                for (int i = 0; i < notIncl.length; i++) {
-                    if (!couldHoldIncluded(notIncl[i])) {
-                        scandir(new File(basedir, notIncl[i]),
-                                notIncl[i] + File.separator, false);
-                    }
-                }
+                processSlowScan(excl);
+                processSlowScan(notIncl);
                 clearCaches();
                 includes = nullIncludes ? null : includes;
                 excludes = nullExcludes ? null : excludes;
@@ -1015,6 +1005,15 @@
         }
     }
 
+    private void processSlowScan(String[] arr) {
+        for (int i = 0; i < arr.length; i++) {
+            if (!couldHoldIncluded(arr[i])) {
+                scandir(new File(basedir, arr[i]),
+                        arr[i] + File.separator, false);
+            }
+        }
+    }
+    
     /**
      * Scan the given directory for files and directories. Found files and
      * directories are placed in their respective collections, based on the
@@ -1115,21 +1114,7 @@
      * @param file  included File.
      */
     private void accountForIncludedFile(String name, File file) {
-        if (filesIncluded.contains(name)
-            || filesExcluded.contains(name)
-            || filesDeselected.contains(name)) {
-            return;
-        }
-        boolean included = false;
-        if (isExcluded(name)) {
-            filesExcluded.addElement(name);
-        } else if (isSelected(name, file)) {
-            included = true;
-            filesIncluded.addElement(name);
-        } else {
-            filesDeselected.addElement(name);
-        }
-        everythingIncluded &= included;
+       processIncluded(name, file, filesIncluded, filesExcluded, 
filesDeselected);
     }
 
     /**
@@ -1140,24 +1125,26 @@
      * @param fast whether to perform fast scans.
      */
     private void accountForIncludedDir(String name, File file, boolean fast) {
-        if (dirsIncluded.contains(name)
-            || dirsExcluded.contains(name)
-            || dirsDeselected.contains(name)) {
-            return;
+       processIncluded(name, file, dirsIncluded, dirsExcluded, dirsDeselected);
+        if (fast && couldHoldIncluded(name) && !contentsExcluded(name)) {
+            scandir(file, name + File.separator, fast);
         }
+    }
+    
+    private void processIncluded(String name, File file, Vector inc, Vector 
exc, Vector des) {
+        
+        if (inc.contains(name) || exc.contains(name) || des.contains(name)) { 
return; }
+        
         boolean included = false;
         if (isExcluded(name)) {
-            dirsExcluded.addElement(name);
-        } else if (isSelected(name, file)) {
+            exc.add(name);
+        } else if(isSelected(name, file)) {
             included = true;
-            dirsIncluded.addElement(name);
+            inc.add(name);
         } else {
-            dirsDeselected.addElement(name);
+            des.add(name);
         }
         everythingIncluded &= included;
-        if (fast && couldHoldIncluded(name) && !contentsExcluded(name)) {
-            scandir(file, name + File.separator, fast);
-        }
     }
 
     /**



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

Reply via email to