You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/01/24 12:03:00 UTC
[groovy] 02/08: minor edits
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 672521dc6917388b82b5fa442649c78c5ac351fa
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Jan 22 16:37:21 2020 -0600
minor edits
(cherry picked from commit b521a35285c1e8a317ab18fbb55552894f907695)
---
.../classgen/asm/OptimizingStatementWriter.java | 2 -
.../groovy/classgen/asm/StatementWriter.java | 232 ++++++++++-----------
.../asm/sc/StaticTypesStatementWriter.java | 7 +-
3 files changed, 108 insertions(+), 133 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
index f394ebb..f6d3d95 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
@@ -102,12 +102,10 @@ public class OptimizingStatementWriter extends StatementWriter {
};
private static final MethodCaller disabledStandardMetaClass = MethodCaller.newStatic(BytecodeInterface8.class, "disabledStandardMetaClass");
- private final WriterController controller;
private boolean fastPathBlocked;
public OptimizingStatementWriter(final WriterController controller) {
super(controller);
- this.controller = controller;
}
private FastPathData writeGuards(final StatementMeta meta, final Statement statement) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
index ebe0428..c40fdf8 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -53,6 +53,7 @@ import org.objectweb.asm.MethodVisitor;
import java.util.Iterator;
import java.util.List;
+import java.util.function.Consumer;
import static org.objectweb.asm.Opcodes.ALOAD;
import static org.objectweb.asm.Opcodes.ATHROW;
@@ -65,17 +66,17 @@ import static org.objectweb.asm.Opcodes.NOP;
import static org.objectweb.asm.Opcodes.RETURN;
public class StatementWriter {
- // iterator
- private static final MethodCaller iteratorNextMethod = MethodCaller.newInterface(Iterator.class, "next");
+
private static final MethodCaller iteratorHasNextMethod = MethodCaller.newInterface(Iterator.class, "hasNext");
+ private static final MethodCaller iteratorNextMethod = MethodCaller.newInterface(Iterator.class, "next");
- private final WriterController controller;
+ protected final WriterController controller;
- public StatementWriter(WriterController controller) {
+ public StatementWriter(final WriterController controller) {
this.controller = controller;
}
- protected void writeStatementLabel(Statement statement) {
+ protected void writeStatementLabel(final Statement statement) {
String name = statement.getStatementLabel();
if (name != null) {
Label label = controller.getCompileStack().createLocalLabel(name);
@@ -83,22 +84,19 @@ public class StatementWriter {
}
}
- public void writeBlockStatement(BlockStatement block) {
+ public void writeBlockStatement(final BlockStatement block) {
writeStatementLabel(block);
int mark = controller.getOperandStack().getStackLength();
CompileStack compileStack = controller.getCompileStack();
compileStack.pushVariableScope(block.getVariableScope());
- List<Statement> statementList = block.getStatements();
- for (Statement statement : statementList) {
+ for (Statement statement : block.getStatements()) {
statement.visit(controller.getAcg());
}
compileStack.pop();
- // GROOVY-7647
- if (block.getLastLineNumber() > 0
- && !isMethodOrConstructorNonEmptyBlock(block) // GROOVY-9126
- ) {
+ // GROOVY-7647, GROOVY-9126
+ if (block.getLastLineNumber() > 0 && !isMethodOrConstructorNonEmptyBlock(block)) {
MethodVisitor mv = controller.getMethodVisitor();
Label blockEnd = new Label();
mv.visitLabel(blockEnd);
@@ -108,96 +106,81 @@ public class StatementWriter {
controller.getOperandStack().popDownTo(mark);
}
- private boolean isMethodOrConstructorNonEmptyBlock(BlockStatement block) {
+ private boolean isMethodOrConstructorNonEmptyBlock(final BlockStatement block) {
MethodNode methodNode = controller.getMethodNode();
- if (null == methodNode) {
+ if (methodNode == null) {
methodNode = controller.getConstructorNode();
}
-
- if (null == methodNode || block != methodNode.getCode()) { // check if the block is method/constructor's code
- return false;
- }
-
- return !block.getStatements().isEmpty();
+ return (methodNode != null && methodNode.getCode() == block && !block.isEmpty());
}
- public void writeForStatement(ForStatement loop) {
- Parameter loopVar = loop.getVariable();
- if (loopVar == ForStatement.FOR_LOOP_DUMMY) {
- writeForLoopWithClosureList(loop);
+ public void writeForStatement(final ForStatement statement) {
+ if (statement.getVariable() == ForStatement.FOR_LOOP_DUMMY) {
+ writeForLoopWithClosureList(statement);
} else {
- writeForInLoop(loop);
+ writeForInLoop(statement);
}
}
- protected void writeIteratorHasNext(MethodVisitor mv) {
- iteratorHasNextMethod.call(mv);
- }
-
- protected void writeIteratorNext(MethodVisitor mv) {
- iteratorNextMethod.call(mv);
- }
-
- protected void writeForInLoop(ForStatement loop) {
- controller.getAcg().onLineNumber(loop, "visitForLoop");
- writeStatementLabel(loop);
+ protected void writeForInLoop(final ForStatement statement) {
+ controller.getAcg().onLineNumber(statement, "visitForLoop");
+ writeStatementLabel(statement);
CompileStack compileStack = controller.getCompileStack();
MethodVisitor mv = controller.getMethodVisitor();
OperandStack operandStack = controller.getOperandStack();
- compileStack.pushLoop(loop.getVariableScope(), loop.getStatementLabels());
+ compileStack.pushLoop(statement.getVariableScope(), statement.getStatementLabels());
- // Declare the loop counter.
- BytecodeVariable variable = compileStack.defineVariable(loop.getVariable(), false);
+ // declare the loop counter
+ BytecodeVariable variable = compileStack.defineVariable(statement.getVariable(), false);
- // Then get the iterator and generate the loop control
- MethodCallExpression iterator = new MethodCallExpression(loop.getCollectionExpression(), "iterator", new ArgumentListExpression());
+ // then get the iterator and generate the loop control
+ MethodCallExpression iterator = new MethodCallExpression(statement.getCollectionExpression(), "iterator", new ArgumentListExpression());
iterator.visit(controller.getAcg());
operandStack.doGroovyCast(ClassHelper.Iterator_TYPE);
- final int iteratorIdx = compileStack.defineTemporaryVariable("iterator", ClassHelper.Iterator_TYPE, true);
-
+ int iteratorIndex = compileStack.defineTemporaryVariable("iterator", ClassHelper.Iterator_TYPE, true);
Label continueLabel = compileStack.getContinueLabel();
Label breakLabel = compileStack.getBreakLabel();
mv.visitLabel(continueLabel);
- mv.visitVarInsn(ALOAD, iteratorIdx);
+ mv.visitVarInsn(ALOAD, iteratorIndex);
writeIteratorHasNext(mv);
// note: ifeq tests for ==0, a boolean is 0 if it is false
mv.visitJumpInsn(IFEQ, breakLabel);
- mv.visitVarInsn(ALOAD, iteratorIdx);
+ mv.visitVarInsn(ALOAD, iteratorIndex);
writeIteratorNext(mv);
operandStack.push(ClassHelper.OBJECT_TYPE);
operandStack.storeVar(variable);
- // Generate the loop body
- loop.getLoopBlock().visit(controller.getAcg());
+ // generate the loop body
+ statement.getLoopBlock().visit(controller.getAcg());
mv.visitJumpInsn(GOTO, continueLabel);
mv.visitLabel(breakLabel);
- compileStack.removeVar(iteratorIdx);
+ compileStack.removeVar(iteratorIndex);
compileStack.pop();
}
- private void visitExpressionOfLoopStatement(Expression expression) {
- if (expression instanceof ClosureListExpression) {
- ((ClosureListExpression) expression).getExpressions().forEach(this::visitExpressionOrStatement);
- } else {
- visitExpressionOrStatement(expression);
- }
+ protected void writeIteratorHasNext(final MethodVisitor mv) {
+ iteratorHasNextMethod.call(mv);
}
- protected void writeForLoopWithClosureList(ForStatement loop) {
- controller.getAcg().onLineNumber(loop, "visitForLoop");
- writeStatementLabel(loop);
+ protected void writeIteratorNext(final MethodVisitor mv) {
+ iteratorNextMethod.call(mv);
+ }
+
+ protected void writeForLoopWithClosureList(final ForStatement statement) {
+ controller.getAcg().onLineNumber(statement, "visitForLoop");
+ writeStatementLabel(statement);
MethodVisitor mv = controller.getMethodVisitor();
- controller.getCompileStack().pushLoop(loop.getVariableScope(), loop.getStatementLabels());
+ controller.getCompileStack().pushLoop(statement.getVariableScope(), statement.getStatementLabels());
- ClosureListExpression clExpr = (ClosureListExpression) loop.getCollectionExpression();
+ ClosureListExpression clExpr = (ClosureListExpression) statement.getCollectionExpression();
controller.getCompileStack().pushVariableScope(clExpr.getVariableScope());
List<Expression> expressions = clExpr.getExpressions();
@@ -207,7 +190,7 @@ public class StatementWriter {
int condIndex = (size - 1) / 2;
// visit init
- for (int i = 0; i < condIndex; i++) {
+ for (int i = 0; i < condIndex; i += 1) {
visitExpressionOfLoopStatement(expressions.get(i));
}
@@ -218,8 +201,8 @@ public class StatementWriter {
mv.visitLabel(cond);
// visit condition leave boolean on stack
{
- Expression condExpr = expressions.get(condIndex);
int mark = controller.getOperandStack().getStackLength();
+ Expression condExpr = expressions.get(condIndex);
condExpr.visit(controller.getAcg());
controller.getOperandStack().castToBool(mark, true);
}
@@ -228,12 +211,12 @@ public class StatementWriter {
controller.getOperandStack().jump(IFEQ, breakLabel);
// Generate the loop body
- loop.getLoopBlock().visit(controller.getAcg());
+ statement.getLoopBlock().visit(controller.getAcg());
// visit increment
mv.visitLabel(continueLabel);
// fix for being on the wrong line when debugging for loop
- controller.getAcg().onLineNumber(loop, "increment condition");
+ controller.getAcg().onLineNumber(statement, "increment condition");
for (int i = condIndex + 1; i < size; i += 1) {
visitExpressionOfLoopStatement(expressions.get(i));
}
@@ -248,22 +231,25 @@ public class StatementWriter {
controller.getCompileStack().pop();
}
- private void visitExpressionOrStatement(Object o) {
- if (o instanceof EmptyExpression) return;
- if (o instanceof Expression) {
- Expression expr = (Expression) o;
+ private void visitExpressionOfLoopStatement(final Expression expression) {
+ Consumer<Expression> visit = expr -> {
+ if (expr instanceof EmptyExpression) return;
int mark = controller.getOperandStack().getStackLength();
expr.visit(controller.getAcg());
controller.getOperandStack().popDownTo(mark);
+ };
+
+ if (expression instanceof ClosureListExpression) {
+ ((ClosureListExpression) expression).getExpressions().forEach(visit);
} else {
- ((Statement) o).visit(controller.getAcg());
+ visit.accept(expression);
}
}
- private void visitConditionOfLoopingStatement(BooleanExpression bool, Label breakLabel, MethodVisitor mv) {
+ private void visitConditionOfLoopingStatement(final BooleanExpression expression, final Label breakLabel, final MethodVisitor mv) {
boolean boolHandled = false;
- if (bool.getExpression() instanceof ConstantExpression) {
- ConstantExpression constant = (ConstantExpression) bool.getExpression();
+ if (expression.getExpression() instanceof ConstantExpression) {
+ ConstantExpression constant = (ConstantExpression) expression.getExpression();
if (constant.getValue() == Boolean.TRUE) {
boolHandled = true;
// do nothing
@@ -272,27 +258,26 @@ public class StatementWriter {
mv.visitJumpInsn(GOTO, breakLabel);
}
}
-
if (!boolHandled) {
- bool.visit(controller.getAcg());
+ expression.visit(controller.getAcg());
controller.getOperandStack().jump(IFEQ, breakLabel);
}
}
- public void writeWhileLoop(WhileStatement loop) {
- controller.getAcg().onLineNumber(loop, "visitWhileLoop");
- writeStatementLabel(loop);
+ public void writeWhileLoop(final WhileStatement statement) {
+ controller.getAcg().onLineNumber(statement, "visitWhileLoop");
+ writeStatementLabel(statement);
MethodVisitor mv = controller.getMethodVisitor();
- controller.getCompileStack().pushLoop(loop.getStatementLabels());
+ controller.getCompileStack().pushLoop(statement.getStatementLabels());
Label continueLabel = controller.getCompileStack().getContinueLabel();
Label breakLabel = controller.getCompileStack().getBreakLabel();
mv.visitLabel(continueLabel);
- this.visitConditionOfLoopingStatement(loop.getBooleanExpression(), breakLabel, mv);
- loop.getLoopBlock().visit(controller.getAcg());
+ visitConditionOfLoopingStatement(statement.getBooleanExpression(), breakLabel, mv);
+ statement.getLoopBlock().visit(controller.getAcg());
mv.visitJumpInsn(GOTO, continueLabel);
mv.visitLabel(breakLabel);
@@ -300,20 +285,20 @@ public class StatementWriter {
controller.getCompileStack().pop();
}
- public void writeDoWhileLoop(DoWhileStatement loop) {
- controller.getAcg().onLineNumber(loop, "visitDoWhileLoop");
- writeStatementLabel(loop);
+ public void writeDoWhileLoop(final DoWhileStatement statement) {
+ controller.getAcg().onLineNumber(statement, "visitDoWhileLoop");
+ writeStatementLabel(statement);
MethodVisitor mv = controller.getMethodVisitor();
- controller.getCompileStack().pushLoop(loop.getStatementLabels());
+ controller.getCompileStack().pushLoop(statement.getStatementLabels());
Label continueLabel = controller.getCompileStack().getContinueLabel();
Label breakLabel = controller.getCompileStack().getBreakLabel();
mv.visitLabel(continueLabel);
- loop.getLoopBlock().visit(controller.getAcg());
- this.visitConditionOfLoopingStatement(loop.getBooleanExpression(), breakLabel, mv);
+ statement.getLoopBlock().visit(controller.getAcg());
+ visitConditionOfLoopingStatement(statement.getBooleanExpression(), breakLabel, mv);
mv.visitJumpInsn(GOTO, continueLabel);
mv.visitLabel(breakLabel);
@@ -321,22 +306,22 @@ public class StatementWriter {
controller.getCompileStack().pop();
}
- public void writeIfElse(IfStatement ifElse) {
- controller.getAcg().onLineNumber(ifElse, "visitIfElse");
- writeStatementLabel(ifElse);
+ public void writeIfElse(final IfStatement statement) {
+ controller.getAcg().onLineNumber(statement, "visitIfElse");
+ writeStatementLabel(statement);
MethodVisitor mv = controller.getMethodVisitor();
- ifElse.getBooleanExpression().visit(controller.getAcg());
+ statement.getBooleanExpression().visit(controller.getAcg());
Label l0 = controller.getOperandStack().jump(IFEQ);
// if-else is here handled as a special version
// of a boolean expression
controller.getCompileStack().pushBooleanExpression();
- ifElse.getIfBlock().visit(controller.getAcg());
+ statement.getIfBlock().visit(controller.getAcg());
controller.getCompileStack().pop();
- if (ifElse.getElseBlock() instanceof EmptyStatement) {
+ if (statement.getElseBlock() instanceof EmptyStatement) {
mv.visitLabel(l0);
} else {
Label l1 = new Label();
@@ -344,14 +329,14 @@ public class StatementWriter {
mv.visitLabel(l0);
controller.getCompileStack().pushBooleanExpression();
- ifElse.getElseBlock().visit(controller.getAcg());
+ statement.getElseBlock().visit(controller.getAcg());
controller.getCompileStack().pop();
mv.visitLabel(l1);
}
}
- public void writeTryCatchFinally(TryCatchStatement statement) {
+ public void writeTryCatchFinally(final TryCatchStatement statement) {
controller.getAcg().onLineNumber(statement, "visitTryCatchFinally");
writeStatementLabel(statement);
@@ -454,18 +439,18 @@ public class StatementWriter {
compileStack.removeVar(anyExceptionIndex);
}
- private BlockRecorder makeBlockRecorder(Statement finallyStatement) {
- final BlockRecorder block = new BlockRecorder();
- block.excludedStatement = () -> {
- controller.getCompileStack().pushBlockRecorderVisit(block);
+ private BlockRecorder makeBlockRecorder(final Statement finallyStatement) {
+ BlockRecorder recorder = new BlockRecorder();
+ recorder.excludedStatement = () -> {
+ controller.getCompileStack().pushBlockRecorderVisit(recorder);
finallyStatement.visit(controller.getAcg());
- controller.getCompileStack().popBlockRecorderVisit(block);
+ controller.getCompileStack().popBlockRecorderVisit(recorder);
};
- controller.getCompileStack().pushBlockRecorder(block);
- return block;
+ controller.getCompileStack().pushBlockRecorder(recorder);
+ return recorder;
}
- public void writeSwitch(SwitchStatement statement) {
+ public void writeSwitch(final SwitchStatement statement) {
controller.getAcg().onLineNumber(statement, "visitSwitch");
writeStatementLabel(statement);
@@ -474,19 +459,18 @@ public class StatementWriter {
// switch does not have a continue label. use its parent's for continue
Label breakLabel = controller.getCompileStack().pushSwitch();
- final int switchVariableIndex = controller.getCompileStack().defineTemporaryVariable("switch", true);
+ int switchVariableIndex = controller.getCompileStack().defineTemporaryVariable("switch", true);
- List caseStatements = statement.getCaseStatements();
+ List<CaseStatement> caseStatements = statement.getCaseStatements();
int caseCount = caseStatements.size();
Label[] labels = new Label[caseCount + 1];
- for (int i = 0; i < caseCount; i++) {
+ for (int i = 0; i < caseCount; i += 1) {
labels[i] = new Label();
}
int i = 0;
- for (Iterator iter = caseStatements.iterator(); iter.hasNext(); i++) {
- CaseStatement caseStatement = (CaseStatement) iter.next();
- writeCaseStatement(caseStatement, switchVariableIndex, labels[i], labels[i + 1]);
+ for (Iterator<CaseStatement> iter = caseStatements.iterator(); iter.hasNext(); i += 1) {
+ writeCaseStatement(iter.next(), switchVariableIndex, labels[i], labels[i + 1]);
}
statement.getDefaultStatement().visit(controller.getAcg());
@@ -497,9 +481,7 @@ public class StatementWriter {
controller.getCompileStack().pop();
}
- protected void writeCaseStatement(
- CaseStatement statement, int switchVariableIndex,
- Label thisLabel, Label nextLabel) {
+ private void writeCaseStatement(final CaseStatement statement, final int switchVariableIndex, final Label thisLabel, final Label nextLabel) {
controller.getAcg().onLineNumber(statement, "visitCaseStatement");
MethodVisitor mv = controller.getMethodVisitor();
OperandStack operandStack = controller.getOperandStack();
@@ -517,8 +499,7 @@ public class StatementWriter {
statement.getCode().visit(controller.getAcg());
- // now if we don't finish with a break we need to jump past
- // the next comparison
+ // now if we don't finish with a break we need to jump past the next comparison
if (nextLabel != null) {
mv.visitJumpInsn(GOTO, nextLabel);
}
@@ -526,7 +507,7 @@ public class StatementWriter {
mv.visitLabel(l0);
}
- public void writeBreak(BreakStatement statement) {
+ public void writeBreak(final BreakStatement statement) {
controller.getAcg().onLineNumber(statement, "visitBreakStatement");
writeStatementLabel(statement);
@@ -537,7 +518,7 @@ public class StatementWriter {
controller.getMethodVisitor().visitJumpInsn(GOTO, breakLabel);
}
- public void writeContinue(ContinueStatement statement) {
+ public void writeContinue(final ContinueStatement statement) {
controller.getAcg().onLineNumber(statement, "visitContinueStatement");
writeStatementLabel(statement);
@@ -548,19 +529,19 @@ public class StatementWriter {
controller.getMethodVisitor().visitJumpInsn(GOTO, continueLabel);
}
- public void writeSynchronized(SynchronizedStatement statement) {
+ public void writeSynchronized(final SynchronizedStatement statement) {
controller.getAcg().onLineNumber(statement, "visitSynchronizedStatement");
writeStatementLabel(statement);
- final MethodVisitor mv = controller.getMethodVisitor();
+ MethodVisitor mv = controller.getMethodVisitor();
CompileStack compileStack = controller.getCompileStack();
statement.getExpression().visit(controller.getAcg());
controller.getOperandStack().box();
- final int index = compileStack.defineTemporaryVariable("synchronized", ClassHelper.OBJECT_TYPE, true);
+ int index = compileStack.defineTemporaryVariable("synchronized", ClassHelper.OBJECT_TYPE, true);
- final Label synchronizedStart = new Label();
- final Label synchronizedEnd = new Label();
- final Label catchAll = new Label();
+ Label synchronizedStart = new Label();
+ Label synchronizedEnd = new Label();
+ Label catchAll = new Label();
mv.visitVarInsn(ALOAD, index);
mv.visitInsn(MONITORENTER);
@@ -592,13 +573,13 @@ public class StatementWriter {
compileStack.removeVar(index);
}
- public void writeAssert(AssertStatement statement) {
+ public void writeAssert(final AssertStatement statement) {
controller.getAcg().onLineNumber(statement, "visitAssertStatement");
writeStatementLabel(statement);
controller.getAssertionWriter().writeAssertStatement(statement);
}
- public void writeThrow(ThrowStatement statement) {
+ public void writeThrow(final ThrowStatement statement) {
controller.getAcg().onLineNumber(statement, "visitThrowStatement");
writeStatementLabel(statement);
MethodVisitor mv = controller.getMethodVisitor();
@@ -612,7 +593,7 @@ public class StatementWriter {
controller.getOperandStack().remove(1);
}
- public void writeReturn(ReturnStatement statement) {
+ public void writeReturn(final ReturnStatement statement) {
controller.getAcg().onLineNumber(statement, "visitReturnStatement");
writeStatementLabel(statement);
MethodVisitor mv = controller.getMethodVisitor();
@@ -646,13 +627,12 @@ public class StatementWriter {
operandStack.remove(1);
}
- public void writeExpressionStatement(ExpressionStatement statement) {
+ public void writeExpressionStatement(final ExpressionStatement statement) {
controller.getAcg().onLineNumber(statement, "visitExpressionStatement: " + statement.getExpression().getClass().getName());
writeStatementLabel(statement);
- Expression expression = statement.getExpression();
-
int mark = controller.getOperandStack().getStackLength();
+ Expression expression = statement.getExpression();
expression.visit(controller.getAcg());
controller.getOperandStack().popDownTo(mark);
}
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java
index f049eb8..8165224 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java
@@ -59,7 +59,7 @@ import static org.objectweb.asm.Opcodes.LALOAD;
import static org.objectweb.asm.Opcodes.SALOAD;
/**
- * A class to write out the optimized statements
+ * A class to write out the optimized statements.
*/
public class StaticTypesStatementWriter extends StatementWriter {
@@ -68,13 +68,10 @@ public class StaticTypesStatementWriter extends StatementWriter {
private static final MethodCaller ENUMERATION_NEXT_METHOD = MethodCaller.newInterface(Enumeration.class, "nextElement");
private static final MethodCaller ENUMERATION_HASMORE_METHOD = MethodCaller.newInterface(Enumeration.class, "hasMoreElements");
- private final StaticTypesWriterController controller;
-
public StaticTypesStatementWriter(StaticTypesWriterController controller) {
super(controller);
- this.controller = controller;
}
-
+
@Override
public void writeBlockStatement(BlockStatement statement) {
controller.switchToFastPath();