aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/gluegen/FunctionEmitter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/jogamp/gluegen/FunctionEmitter.java')
-rw-r--r--src/java/com/jogamp/gluegen/FunctionEmitter.java57
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 {