bodewig     2003/02/18 06:06:23

  Modified:    src/main/org/apache/tools/ant/filters LineContains.java
                        LineContainsRegExp.java StripLineComments.java
  Log:
  Replace algorithm with a less recursive one - avoid StackOverflow on
  large files.
  
  PR: 15528
  
  Revision  Changes    Path
  1.12      +3 -3      
ant/src/main/org/apache/tools/ant/filters/LineContains.java
  
  Index: LineContains.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/filters/LineContains.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- LineContains.java 17 Feb 2003 15:47:45 -0000      1.11
  +++ LineContains.java 18 Feb 2003 14:06:22 -0000      1.12
  @@ -71,9 +71,9 @@
    *
    * Or:
    *
  - * <pre>&lt;filterreader 
classname="org.apache.tools.ant.filters.LineContains"&gt;
  - *    &lt;param type="contains" value="foo"/&gt;
  - *    &lt;param type="contains" value="bar"/&gt;
  + * <pre>&lt;filterreader 
classname=&quot;org.apache.tools.ant.filters.LineContains&quot;&gt;
  + *    &lt;param type=&quot;contains&quot; value=&quot;foo&quot;/&gt;
  + *    &lt;param type=&quot;contains&quot; value=&quot;bar&quot;/&gt;
    * &lt;/filterreader&gt;</pre>
    *
    * This will include only those lines that contain <code>foo</code> and
  
  
  
  1.8       +17 -9     
ant/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
  
  Index: LineContainsRegExp.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- LineContainsRegExp.java   10 Feb 2003 14:13:32 -0000      1.7
  +++ LineContainsRegExp.java   18 Feb 2003 14:06:22 -0000      1.8
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -88,7 +88,7 @@
       /** Vector that holds the expressions that input lines must contain. */
       private Vector regexps = new Vector();
   
  -    /** 
  +    /**
        * Remaining line to be read from this filter, or <code>null</code> if
        * the next call to <code>read()</code> should read the original stream
        * to find the next matching line.
  @@ -97,7 +97,7 @@
   
       /**
        * Constructor for "dummy" instances.
  -     * 
  +     *
        * @see BaseFilterReader#BaseFilterReader()
        */
       public LineContainsRegExp() {
  @@ -121,9 +121,9 @@
        * 
        * @return the next character in the resulting stream, or -1
        * if the end of the resulting stream has been reached
  -     * 
  +     *
        * @exception IOException if the underlying stream throws an IOException
  -     * during reading     
  +     * during reading
        */
       public final int read() throws IOException {
           if (!getInitialized()) {
  @@ -142,10 +142,9 @@
               }
           } else {
               line = readLine();
  -            if (line == null) {
  -                ch = -1;
  -            } else {
  -                final int regexpsSize = regexps.size();
  +            final int regexpsSize = regexps.size();
  +
  +            while (line != null) {
                   for (int i = 0; i < regexpsSize; i++) {
                       RegularExpression regexp = (RegularExpression)
                                                           regexps.elementAt(i);
  @@ -157,6 +156,15 @@
                       }
                   }
   
  +                if (line == null) {
  +                    // line didn't match
  +                    line = readLine();
  +                } else {
  +                    break;
  +                }
  +            }
  +
  +            if (line != null) {
                   return read();
               }
           }
  
  
  
  1.8       +14 -5     
ant/src/main/org/apache/tools/ant/filters/StripLineComments.java
  
  Index: StripLineComments.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/filters/StripLineComments.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StripLineComments.java    10 Feb 2003 14:13:32 -0000      1.7
  +++ StripLineComments.java    18 Feb 2003 14:06:22 -0000      1.8
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -142,10 +142,9 @@
               }
           } else {
               line = readLine();
  -            if (line == null) {
  -                ch = -1;
  -            } else {
  -                int commentsSize = comments.size();
  +            final int commentsSize = comments.size();
  +
  +            while (line != null) {
                   for (int i = 0; i < commentsSize; i++) {
                       String comment = (String) comments.elementAt(i);
                       if (line.startsWith(comment)) {
  @@ -153,6 +152,16 @@
                           break;
                       }
                   }
  +
  +                if (line == null) {
  +                    // line started with comment
  +                    line = readLine();
  +                } else {
  +                    break;
  +                }
  +            }
  +
  +            if (line != null) {
                   return read();
               }
           }
  
  
  

Reply via email to