protected void _toJavaStatement(XDoWhileExpression expr, ITreeAppendable b, boolean isReferenced) {
boolean needsStatement = !canCompileToJavaExpression(expr.getPredicate(), b);
String variable = null;
if (needsStatement) {
variable = b.declareSyntheticVariable(expr, "_dowhile");
b.newLine().append("boolean ").append(variable).append(" = false;");
}
b.newLine().append("do {").increaseIndentation();
internalToJavaStatement(expr.getBody(), b, false);
if (needsStatement && !isEarlyExit(expr.getBody())) {
internalToJavaStatement(expr.getPredicate(), b, true);
b.newLine();
b.append(variable).append(" = ");
internalToJavaExpression(expr.getPredicate(), b);
b.append(";");
}
b.decreaseIndentation().newLine().append("} while(");
if (needsStatement) {
b.append(variable);
} else {
internalToJavaExpression(expr.getPredicate(), b);
}
b.append(");");
}