You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by jk...@apache.org on 2006/02/03 00:49:14 UTC

svn commit: r374544 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/types/FilterSet.java src/testcases/org/apache/tools/ant/types/FilterSetTest.java

Author: jkf
Date: Thu Feb  2 15:48:59 2006
New Revision: 374544

URL: http://svn.apache.org/viewcvs?rev=374544&view=rev
Log:
pr38465 improved recursion detection to allow the same token on one line multiple times.

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/types/FilterSet.java
    ant/core/trunk/src/testcases/org/apache/tools/ant/types/FilterSetTest.java

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewcvs/ant/core/trunk/WHATSNEW?rev=374544&r1=374543&r2=374544&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Thu Feb  2 15:48:59 2006
@@ -4,6 +4,9 @@
 Changes that could break older environments:
 --------------------------------------------
 
+* Improved recursion detection for lines with multiple matches of same token on one single line.
+  Bugzilla report 38456.
+
 * Task will now log correctly even if no project is set. 
   Bugzilla report 38458.
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/FilterSet.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/types/FilterSet.java?rev=374544&r1=374543&r2=374544&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/FilterSet.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/FilterSet.java Thu Feb  2 15:48:59 2006
@@ -179,6 +179,8 @@
     private OnMissing onMissingFiltersFile = OnMissing.FAIL;
     private boolean readingFiles = false;
 
+    private int recurseDepth = 0;
+
     /**
      * List of ordered filters and filter files.
      */
@@ -383,7 +385,6 @@
      * @return      The input string after token replacement.
      */
     public synchronized String replaceTokens(String line) {
-        passedTokens = null; // reset for new line
         return iReplaceTokens(line);
     }
 
@@ -506,7 +507,7 @@
                 String token = null;
                 String value = null;
 
-                do {
+                while (index > -1) {
                     //can't have zero-length token
                     int endIndex = line.indexOf(endToken,
                         index + beginToken.length() + 1);
@@ -532,7 +533,8 @@
                         b.append(beginToken);
                         i = index + beginToken.length();
                     }
-                } while ((index = line.indexOf(beginToken, i)) > -1);
+                    index = line.indexOf(beginToken, i);
+                }
 
                 b.append(line.substring(i));
                 return b.toString();
@@ -555,9 +557,10 @@
         throws BuildException {
         String beginToken = getBeginToken();
         String endToken = getEndToken();
-        if (passedTokens == null) {
+        if (recurseDepth == 0) {
             passedTokens = new Vector();
         }
+        recurseDepth++;
         if (passedTokens.contains(parent) && !duplicateToken) {
             duplicateToken = true;
             System.out.println(
@@ -565,6 +568,7 @@
                 + passedTokens.toString() + "\nProblem token : " + beginToken
                 + parent + endToken + " called from " + beginToken
                 + passedTokens.lastElement().toString() + endToken);
+            recurseDepth--;
             return parent;
         }
         passedTokens.addElement(parent);
@@ -582,6 +586,7 @@
                 }
             }
         }
+        recurseDepth--;
         return value;
     }
 

Modified: ant/core/trunk/src/testcases/org/apache/tools/ant/types/FilterSetTest.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/testcases/org/apache/tools/ant/types/FilterSetTest.java?rev=374544&r1=374543&r2=374544&view=diff
==============================================================================
--- ant/core/trunk/src/testcases/org/apache/tools/ant/types/FilterSetTest.java (original)
+++ ant/core/trunk/src/testcases/org/apache/tools/ant/types/FilterSetTest.java Thu Feb  2 15:48:59 2006
@@ -113,6 +113,23 @@
         assertEquals(result, fs.replaceTokens(line));
     }
 
+    public void testNonInfiniteRecursiveMultipleOnSingleLine() {
+        FilterSet filters = new FilterSet();
+
+        filters.setBeginToken("<");
+        filters.setEndToken(">");
+
+        filters.addFilter("ul", "<itemizedlist>");
+        filters.addFilter("/ul", "</itemizedList>");
+        filters.addFilter("li", "<listitem>");
+        filters.addFilter("/li", "</listitem>");
+
+        String result = "<itemizedlist><listitem>Item 1</listitem> <listitem>Item 2</listitem></itemizedList>";
+        String line = "<ul><li>Item 1</li> <li>Item 2</li></ul>";
+
+        assertEquals(result, filters.replaceTokens(line));
+    }
+    
     public void testNestedFilterSets() {
         executeTarget("test-nested-filtersets");
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org