1/* 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.codemodel.internal; 27 28import java.util.ArrayList; 29import java.util.List; 30 31 32/** 33 * For statement 34 */ 35 36public class JForLoop implements JStatement { 37 38 private List<Object> inits = new ArrayList<Object>(); 39 private JExpression test = null; 40 private List<JExpression> updates = new ArrayList<JExpression>(); 41 private JBlock body = null; 42 43 public JVar init(int mods, JType type, String var, JExpression e) { 44 JVar v = new JVar(JMods.forVar(mods), type, var, e); 45 inits.add(v); 46 return v; 47 } 48 49 public JVar init(JType type, String var, JExpression e) { 50 return init(JMod.NONE, type, var, e); 51 } 52 53 public void init(JVar v, JExpression e) { 54 inits.add(JExpr.assign(v, e)); 55 } 56 57 public void test(JExpression e) { 58 this.test = e; 59 } 60 61 public void update(JExpression e) { 62 updates.add(e); 63 } 64 65 public JBlock body() { 66 if (body == null) body = new JBlock(); 67 return body; 68 } 69 70 public void state(JFormatter f) { 71 f.p("for ("); 72 boolean first = true; 73 for (Object o : inits) { 74 if (!first) f.p(','); 75 if (o instanceof JVar) 76 f.b((JVar) o); 77 else 78 f.g((JExpression) o); 79 first = false; 80 } 81 f.p(';').g(test).p(';').g(updates).p(')'); 82 if (body != null) 83 f.g(body).nl(); 84 else 85 f.p(';').nl(); 86 } 87 88} 89