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><filterreader classname="org.apache.tools.ant.filters.LineContains"> - * <param type="contains" value="foo"/> - * <param type="contains" value="bar"/> + * <pre><filterreader classname="org.apache.tools.ant.filters.LineContains"> + * <param type="contains" value="foo"/> + * <param type="contains" value="bar"/> * </filterreader></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(); } }