Added 'buffered writing' ability to Doc Emitters Because of two-stage handling in FlexJS MXML emitter the 'doc' emitters need the ability to write their output to a buffer instead of directly to the output stream, similar to how the various JS emitters handle this.
Signed-off-by: Erik de Bruin <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/43e9b3c6 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/43e9b3c6 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/43e9b3c6 Branch: refs/heads/develop Commit: 43e9b3c67afcc08f9e33ef1b4324f8f2a3b2ead1 Parents: e432023 Author: Erik de Bruin <[email protected]> Authored: Wed Mar 27 16:20:41 2013 +0100 Committer: Erik de Bruin <[email protected]> Committed: Wed Mar 27 16:29:59 2013 +0100 ---------------------------------------------------------------------- .../apache/flex/compiler/codegen/IDocEmitter.java | 4 + .../compiler/internal/codegen/js/JSDocEmitter.java | 76 +++++++++++---- 2 files changed, 61 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/43e9b3c6/compiler.jx/src/org/apache/flex/compiler/codegen/IDocEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/IDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/IDocEmitter.java index f6edcc6..f71ae5e 100644 --- a/compiler.jx/src/org/apache/flex/compiler/codegen/IDocEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/codegen/IDocEmitter.java @@ -28,5 +28,9 @@ public interface IDocEmitter { void begin(); + String flushBuffer(); + + void setBufferWrite(boolean value); + void end(); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/43e9b3c6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSDocEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSDocEmitter.java index 5dca90a..6984f46 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSDocEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSDocEmitter.java @@ -32,6 +32,42 @@ public class JSDocEmitter implements IDocEmitter, IEmitter private int currentIndent = 0; + private IEmitter emitter; + + private StringBuilder builder; + + protected StringBuilder getBuilder() + { + return builder; + } + + private boolean bufferWrite; + + public boolean isBufferWrite() + { + return bufferWrite; + } + + public void setBufferWrite(boolean value) + { + bufferWrite = value; + } + + public String flushBuffer() + { + setBufferWrite(false); + String result = builder.toString(); + builder.setLength(0); + return result; + } + + public JSDocEmitter(IJSEmitter emitter) + { + this.emitter = (IEmitter) emitter; + + builder = new StringBuilder(); + } + @Override public void indentPush() { @@ -53,66 +89,69 @@ public class JSDocEmitter implements IDocEmitter, IEmitter @Override public void write(String value) { - emitter.write(value); + if (!bufferWrite) + emitter.write(value); + else + builder.append(value); } @Override public void writeNewline() { - emitter.writeNewline(); + write(ASEmitterTokens.NEW_LINE); } @Override public void writeNewline(String value) { - emitter.writeNewline(value); + write(value); + writeNewline(); } @Override public void writeNewline(IEmitterTokens value) { - emitter.writeNewline(value); + writeNewline(value.getToken()); } @Override public void writeNewline(String value, boolean pushIndent) { - emitter.writeNewline(value, pushIndent); + if (pushIndent) + indentPush(); + else + indentPop(); + write(value); + writeNewline(); } @Override public void writeNewline(IEmitterTokens value, boolean pushIndent) { - emitter.writeNewline(value, pushIndent); + writeNewline(value.getToken(), pushIndent); } @Override public void writeToken(IEmitterTokens value) { - emitter.writeToken(value); + writeToken(value.getToken()); } @Override public void writeToken(String value) { - emitter.writeToken(value); + write(value); + write(ASEmitterTokens.SPACE); } public void writeBlockClose() { - emitter.write(ASEmitterTokens.BLOCK_CLOSE); + write(ASEmitterTokens.BLOCK_CLOSE); } public void writeBlockOpen() { - emitter.write(ASEmitterTokens.BLOCK_OPEN); - } - - private IEmitter emitter; - - public JSDocEmitter(IJSEmitter emitter) - { - this.emitter = (IEmitter) emitter; + write(ASEmitterTokens.BLOCK_OPEN); } @Override @@ -131,7 +170,6 @@ public class JSDocEmitter implements IDocEmitter, IEmitter @Override public String stringifyNode(IASNode node) { - return ""; + return null; } - }
