diff -r 79dc4b992c0a -r 66245d9d84db src/share/classes/com/sun/tools/javap/BasicWriter.java --- a/src/share/classes/com/sun/tools/javap/BasicWriter.java Thu Feb 06 21:11:27 2014 +0000 +++ b/src/share/classes/com/sun/tools/javap/BasicWriter.java Tue Feb 11 19:05:50 2014 +0400 @@ -151,12 +151,22 @@ for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); switch (c) { + case ' ': + pendingSpaces++; + break; + case '\n': println(); break; + default: if (buffer.length() == 0) indent(); + if (pendingSpaces > 0) { + for (int sp = 0; sp < pendingSpaces; sp++) + buffer.append(' '); + pendingSpaces = 0; + } buffer.append(c); } } @@ -164,6 +174,8 @@ } protected void println() { + // ignore/discard pending spaces + pendingSpaces = 0; out.println(buffer); buffer.setLength(0); } @@ -173,26 +185,21 @@ } protected void tab() { - if (buffer.length() == 0) - indent(); - space(indentCount * indentWidth + tabColumn - buffer.length()); + int col = indentCount * indentWidth + tabColumn; + pendingSpaces += (col <= buffer.length() ? 1 : col - buffer.length()); } private void indent() { - space(indentCount * indentWidth); + pendingSpaces += (indentCount * indentWidth); } - private void space(int n) { - for (int i = 0; i < n; i++) - buffer.append(' '); - } - - private PrintWriter out; - private StringBuilder buffer; + private final PrintWriter out; + private final StringBuilder buffer; private int indentCount; - private int indentWidth; - private int tabColumn; + private final int indentWidth; + private final int tabColumn; private boolean pendingNewline; + private int pendingSpaces; } }