/* * Copyright (C) 2011 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.errai.codegen.control; import static org.jboss.errai.codegen.builder.callstack.LoadClassReference.getClassReference; import org.jboss.errai.codegen.AbstractStatement; import org.jboss.errai.codegen.Context; import org.jboss.errai.codegen.Statement; import org.jboss.errai.codegen.Variable; /** * Foreach statement (enhanced for loop). * * @author Christian Sadilek <csadilek@redhat.com> */ public class ForeachLoop extends AbstractStatement { private final Variable loopVar; private final String collectionExpr; private final Statement body; private final boolean nullSafe; public ForeachLoop(Variable loopVar, String collectionExpr, Statement body, boolean nullSafe) { this.loopVar = loopVar; this.collectionExpr = collectionExpr; this.body = body; this.nullSafe = nullSafe; } String generatedCache; @Override public String generate(Context context) { if (generatedCache != null) return generatedCache; return generatedCache = ((nullSafe) ? "if (" + collectionExpr + " != null) {\n" : "") + "for (" + getClassReference(loopVar.getType(), context) + " " + loopVar.getName() + " : " + collectionExpr + ") {" + "\n\t" + body.generate(context).replaceAll("\n", "\n\t") + "\n}" + ((nullSafe) ? "\n}" : ""); } }