protected void _toJavaExpression(XInstanceOfExpression expr, ITreeAppendable b) { b.append("("); internalToJavaExpression(expr.getExpression(), b); b.append(" instanceof "); serialize(expr.getType(), expr, b); b.append(")"); }
protected void _toJavaExpression(final XAnnotation annotation, final ITreeAppendable b) { b.append("@"); b.append(annotation.getAnnotationType()); XExpression value = annotation.getValue(); if (value != null) { b.append("("); internalToJavaExpression(value, b); b.append(")"); } else { EList<XAnnotationElementValuePair> valuePairs = annotation.getElementValuePairs(); if (valuePairs.isEmpty()) return; b.append("("); for (int i = 0; i < valuePairs.size(); i++) { XAnnotationElementValuePair pair = valuePairs.get(i); b.append(pair.getElement().getSimpleName()); b.append(" = "); internalToJavaExpression(pair.getValue(), b); if (i < valuePairs.size()-1) { b.append(", "); } } b.append(")"); } }
protected void _toJavaExpression(XSetLiteral literal, ITreeAppendable b) { LightweightTypeReference literalType = batchTypeResolver.resolveTypes(literal).getActualType(literal); if (literalType == null) { b.append("error - couldn't compute type for literal : "+literal); return; } if (literalType.isType(Map.class)) { LightweightTypeReference keyType = literalType.getTypeArguments().get(0); LightweightTypeReference valueType = literalType.getTypeArguments().get(1); b.append(Collections.class) .append(".<").append(keyType).append(", ").append(valueType) .append(">unmodifiableMap("); b.append(CollectionLiterals.class).append(".<").append(keyType).append(", ").append(valueType).append(">newHashMap("); Iterator<XExpression> elements = literal.getElements().iterator(); while(elements.hasNext()) { XExpression element = elements.next(); internalToJavaExpression(element, b); if (elements.hasNext()) { b.append(", "); } } b.append("))"); } else { appendImmutableCollectionExpression(literal, b, "unmodifiableSet", CollectionLiterals.class, "newHashSet"); } }
protected String declareLocalVariable(XSwitchExpression expr, ITreeAppendable b) { // declare local var for the switch expression String variableName = getSwitchLocalVariableName(expr, b); if (variableName != null) { return variableName; } String name = createSwitchLocalVariableName(expr); JvmTypeReference variableType = getSwitchLocalVariableType(expr); b.newLine().append("final "); serialize(variableType, expr, b); b.append(" "); variableName = declareAndAppendSwitchSyntheticLocalVariable(expr, name, b); b.append(" = "); internalToJavaExpression(expr.getSwitch(), b); b.append(";"); return variableName; }
if (expression != null) { loopAppendable.append(" "); internalToJavaExpression(expression, loopAppendable); internalToJavaExpression(updateExpression, loopAppendable);
varName = b.declareSyntheticVariable(expr, "_while"); b.newLine().append("boolean ").append(varName).append(" = "); internalToJavaExpression(expr.getPredicate(), b); b.append(";"); b.append(varName); } else { internalToJavaExpression(expr.getPredicate(), b); b.newLine(); b.append(varName).append(" = "); internalToJavaExpression(expr.getPredicate(), b); b.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(");"); }
/** * @param isReferenced unused in this context but necessary for dispatch signature */ protected void _toJavaStatement(XForLoopExpression expr, ITreeAppendable b, boolean isReferenced) { internalToJavaStatement(expr.getForExpression(), b, true); b.newLine(); ITreeAppendable loopAppendable = b.trace(expr); loopAppendable.append("for ("); ITreeAppendable parameterAppendable = loopAppendable.trace(expr.getDeclaredParam()); appendForLoopParameter(expr, parameterAppendable); loopAppendable.append(" : "); internalToJavaExpression(expr.getForExpression(), loopAppendable); loopAppendable.append(") {").increaseIndentation(); internalToJavaStatement(expr.getEachExpression(), loopAppendable, false); loopAppendable.decreaseIndentation().newLine().append("}"); }
b.append(", "); isFirst = false; internalToJavaExpression(element, b);
protected void appendImmutableCollectionExpression(XCollectionLiteral literal, ITreeAppendable b, String collectionsMethod, Class<?> guavaHelper, String guavaHelperMethod) { LightweightTypeReference collectionElementType = getCollectionElementType(literal); b.append(Collections.class); b.append(".<").append(collectionElementType).append(">").append(collectionsMethod).append("("); b.append(guavaHelper).append(".<").append(collectionElementType).append(">").append(guavaHelperMethod).append("("); boolean isFirst = true; for(XExpression element: literal.getElements()) { if(!isFirst) b.append(", "); isFirst = false; if(element instanceof XNullLiteral) { b.append("(").append(collectionElementType).append(")"); } internalToJavaExpression(element, b); } b.append("))"); return; }
LightweightTypeReference convertedType = getLightweightType(casePart.getCase()); if (convertedType.isType(Boolean.TYPE) || convertedType.isType(Boolean.class)) { internalToJavaExpression(casePart.getCase(), conditionAppendable); } else { JvmType objectsType = findKnownType(Objects.class, casePart); conditionAppendable.append(objectsType); conditionAppendable.append(".equal(").append(variableName).append(", "); internalToJavaExpression(casePart.getCase(), conditionAppendable); conditionAppendable.append(")"); } else { internalToJavaExpression(casePart.getCase(), conditionAppendable); conditionAppendable.append(")");
internalToJavaStatement(expression, loopAppendable, true); loopAppendable.newLine().append("boolean ").append(varName).append(" = "); internalToJavaExpression(expression, loopAppendable); loopAppendable.append(";"); } else { internalToJavaStatement(expression, loopAppendable, true); loopAppendable.newLine().append(varName).append(" = "); internalToJavaExpression(expression, loopAppendable); loopAppendable.append(";"); } else {
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("}"); }
internalToJavaStatement(expr.getIf(), b, true); b.newLine().append("if ("); internalToJavaExpression(expr.getIf(), b); b.append(") {").increaseIndentation(); final boolean canBeReferenced = isReferenced && !isPrimitiveVoid(expr.getThen());
internalToJavaExpression(casePart.getCase(), conditionAppendable); } else { XAbstractFeatureCall featureCall = (XAbstractFeatureCall) casePart.getCase();