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();
}
}