initializers.add(createDeclaration(info, maxVar, new JFieldRef(info,
createVariableRef(info, arrayVar),
program.getIndexedField("Array.length"), currentClass)));
// i$index < i$max
JExpression condition = new JBinaryOperation(info,
program.getTypePrimitiveBoolean(), JBinaryOperator.LT,
createVariableRef(info, indexVar), createVariableRef(info, maxVar));
// ++i$index
List<JExpressionStatement> increments = new ArrayList<JExpressionStatement>(
1);
increments.add(new JPrefixOperation(info, JUnaryOperator.INC,
createVariableRef(info, indexVar)).makeStatement());
// T elementVar = i$array[i$index];
elementDecl.initializer = new JArrayRef(info, createVariableRef(info,
arrayVar), createVariableRef(info, indexVar));
body.addStmt(0, elementDecl);
result = new JForStatement(info, initializers, condition, increments,
body);
} else {
/**
* <pre>
* for (Iterator<T> i$iterator = collection.iterator(); i$iterator.hasNext(); ) {
* T elementVar = i$iterator.next();
* // user action
* }
* </pre>
*/
JLocal iteratorVar = createSyntheticLocal(info, elementVarName
+ "$iterator", program.getIndexedType("Iterator"));
List<JStatement> initializers = new ArrayList<JStatement>(1);
// Iterator<T> i$iterator = collection.iterator()
initializers.add(createDeclaration(info, iteratorVar, new JMethodCall(
info, dispProcessExpression(x.collection),
program.getIndexedMethod("Iterable.iterator"))));
// i$iterator.hasNext()
JExpression condition = new JMethodCall(info, createVariableRef(info,
iteratorVar), program.getIndexedMethod("Iterator.hasNext"));
// T elementVar = (T) i$iterator.next();
elementDecl.initializer = new JMethodCall(info, createVariableRef(info,
iteratorVar), program.getIndexedMethod("Iterator.next"));