mbenson 2005/03/04 14:29:32
Modified: src/main/org/apache/tools/ant/filters FixCrLfFilter.java
Log:
1. Remove unused private inner class.
2. Fix loop introduced by a seemingly innocent logic change :(
3. Fix bug that caused extra EOFs when input already contained EOF.
4. Make instances constructed with a Reader usable.
Revision Changes Path
1.3 +27 -37
ant/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java
Index: FixCrLfFilter.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FixCrLfFilter.java 4 Mar 2005 16:45:37 -0000 1.2
+++ FixCrLfFilter.java 4 Mar 2005 22:29:32 -0000 1.3
@@ -79,6 +79,7 @@
private AddAsisRemove tabs;
private boolean javafiles = false;
private boolean fixlast = true;
+ private boolean initialized = false;
/**
* Constructor for "dummy" instances.
@@ -263,6 +264,7 @@
}
// Add missing EOF character
in = (ctrlz == AddAsisRemove.ADD) ? new AddEofFilter(in) : in;
+ initialized = true;
}
/**
@@ -274,7 +276,10 @@
* @exception IOException if the underlying stream throws an IOException
* during reading.
*/
- public final int read() throws IOException {
+ public synchronized final int read() throws IOException {
+ if (!initialized) {
+ initInternalFilters();
+ }
return in.read();
}
@@ -552,16 +557,24 @@
if (normalizedEOL == 0) {
int numEOL = 0;
-
+ boolean atEnd = false;
switch (thisChar) {
case CTRLZ:
+ int c = super.read();
+ if (c == -1) {
+ atEnd = true;
+ if (fixLast && !previousWasEOL) {
+ numEOL = 1;
+ push(thisChar);
+ }
+ } else {
+ push(c);
+ }
+ break;
case -1:
+ atEnd = true;
if (fixLast && !previousWasEOL) {
numEOL = 1;
-
- if (thisChar == CTRLZ) {
- push(thisChar);
- }
}
break;
case '\n':
@@ -595,7 +608,7 @@
}
previousWasEOL = true;
thisChar = read();
- } else if (thisChar != -1) {
+ } else if (!atEnd) {
previousWasEOL = false;
}
} else {
@@ -605,33 +618,6 @@
}
}
- private static class FixLastFilter extends SimpleFilterReader {
- int lastChar = -1;
- char[] eol = null;
-
- public FixLastFilter(Reader in, String eolString) {
- super(in);
- eol = eolString.toCharArray();
- }
-
- public int read() throws IOException {
- int thisChar = super.read();
- // if source is EOF but last character was NOT eol, return eol
- if (thisChar == -1) {
- switch (lastChar) {
- case '\r':
- case '\n':
- // Return first character of EOL
- thisChar = eol[0];
- // Push remaining characters onto input stream
- push(eol, 1, eol.length - 1);
- }
- }
- lastChar = thisChar;
- return thisChar;
- }
- }
-
private static class AddEofFilter extends SimpleFilterReader {
int lastChar = -1;
@@ -643,10 +629,14 @@
int thisChar = super.read();
// if source is EOF but last character was NOT ctrl-z, return
ctrl-z
- if (thisChar == -1 && lastChar != CTRLZ) {
- thisChar = CTRLZ;
+ if (thisChar == -1) {
+ if (lastChar != CTRLZ) {
+ lastChar = CTRLZ;
+ return lastChar;
+ }
+ } else {
+ lastChar = thisChar;
}
- lastChar = thisChar;
return thisChar;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]