protected boolean canCompileToJavaBasicForStatement(XBasicForLoopExpression expr, ITreeAppendable b) { EList<XExpression> initExpressions = expr.getInitExpressions(); XExpression firstInitExpression = IterableExtensions.head(initExpressions); if (initExpressions.size() == 1 && firstInitExpression instanceof XVariableDeclaration) { XVariableDeclaration variableDeclaration = (XVariableDeclaration) firstInitExpression; XExpression right = variableDeclaration.getRight(); if (right != null && !canCompileToJavaExpression(right, b)) { return false; } } else { for (XExpression expression : initExpressions) { if (!canCompileToJavaExpression(expression, b)) { return false; } } } XExpression predicate = expr.getExpression(); if (predicate != null && !canCompileToJavaExpression(predicate, b)) { return false; } for (XExpression expression : expr.getUpdateExpressions()) { if (!canCompileToJavaExpression(expression, b)) { return false; } } return true; }
protected void _toJavaStatement(final XSynchronizedExpression synchronizedExpression, final ITreeAppendable b, boolean isReferenced) { if (isReferenced) { declareSyntheticVariable(synchronizedExpression, b); } ITreeAppendable synchronizedAppendable = b.trace(synchronizedExpression, true); XExpression param = synchronizedExpression.getParam(); if (!canCompileToJavaExpression(param, b)) internalToJavaStatement(param, synchronizedAppendable, isReferenced); synchronizedAppendable.newLine().append("synchronized ("); internalToJavaExpression(param, synchronizedAppendable); synchronizedAppendable.append(") {").increaseIndentation(); synchronizedAppendable.openPseudoScope(); XExpression expression = synchronizedExpression.getExpression(); internalToJavaStatement(expression, b, isReferenced); if (isReferenced) { b.newLine().append(getVarName(synchronizedExpression, synchronizedAppendable)).append(" = "); internalToConvertedExpression(expression, b, getLightweightType(synchronizedExpression)); b.append(";"); } synchronizedAppendable.closeScope(); synchronizedAppendable.decreaseIndentation().newLine().append("}"); }
/** * @param isReferenced unused in this context but necessary for dispatch signature */ 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(");"); }
boolean needsStatement = !canCompileToJavaExpression(expr.getPredicate(), b); String varName = null; if (needsStatement) {