diff options
Diffstat (limited to 'src/java/com/jogamp/gluegen/FunctionEmitter.java')
-rw-r--r-- | src/java/com/jogamp/gluegen/FunctionEmitter.java | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/src/java/com/jogamp/gluegen/FunctionEmitter.java b/src/java/com/jogamp/gluegen/FunctionEmitter.java index a089a41..5037fc4 100644 --- a/src/java/com/jogamp/gluegen/FunctionEmitter.java +++ b/src/java/com/jogamp/gluegen/FunctionEmitter.java @@ -114,6 +114,7 @@ public abstract class FunctionEmitter { * Emit the function to the {@link #getUnit()} */ public final void emit() { + emitAdditionalCode(); emitDocComment(); //output.println(" // Emitter: " + getClass().getName()); emitSignature(); @@ -139,6 +140,7 @@ public abstract class FunctionEmitter { */ public CommentEmitter getCommentEmitter() { return commentEmitter; } + protected void emitAdditionalCode() { } protected void emitDocComment() { if (commentEmitter != null) { @@ -154,32 +156,42 @@ public abstract class FunctionEmitter { } } - protected void emitSignature() { + protected final void emitSignature() { + unit.emit(appendSignature(new StringBuilder()).toString()); + } - unit.emit(getBaseIndentString()); // indent method + protected StringBuilder appendSignature(final StringBuilder buf) { + buf.append(getBaseIndentString()); // indent method - final int numEmitted = emitModifiers(); + final int numEmitted = appendModifiers(buf); if (numEmitted > 0) { - unit.emit(" "); + buf.append(" "); } - emitReturnType(); - unit.emit(" "); + appendReturnType(buf); + buf.append(" "); - emitName(); - unit.emit("("); + appendName(buf); + buf.append("("); - emitArguments(); - unit.emit(")"); + appendArguments(buf); + buf.append(")"); + return buf; } - protected int emitModifiers() { + protected final int emitModifiers() { + final StringBuilder buf = new StringBuilder(); + final int n = appendModifiers(buf); + unit.emit(buf.toString()); + return n; + } + protected int appendModifiers(final StringBuilder buf) { int numEmitted = 0; for (final Iterator<EmissionModifier> it = getModifiers(); it.hasNext(); ) { - unit.emit(it.next().toString()); + buf.append(it.next().toString()); ++numEmitted; if (it.hasNext()) { - unit.emit(" "); + buf.append(" "); } } return numEmitted; @@ -190,10 +202,23 @@ public abstract class FunctionEmitter { protected String getCommentStartString() { return "/* "; } protected String getCommentEndString() { return " */"; } - protected abstract void emitReturnType(); - protected abstract void emitName(); + protected final void emitReturnType() { + unit.emit(appendReturnType(new StringBuilder()).toString()); + } + protected abstract StringBuilder appendReturnType(StringBuilder buf); + protected final void emitName() { + unit.emit(appendName(new StringBuilder()).toString()); + } + protected abstract StringBuilder appendName(StringBuilder buf); + /** Returns the number of arguments emitted. */ + protected final int emitArguments() { + final StringBuilder buf = new StringBuilder(); + final int n = appendArguments(buf); + unit.emit(buf.toString()); + return n; + } /** Returns the number of arguments emitted. */ - protected abstract int emitArguments(); + protected abstract int appendArguments(StringBuilder buf); protected abstract void emitBody(); public static class EmissionModifier { |