01: /*
02: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
03: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
04: *
05: * This code is free software; you can redistribute it and/or modify it
06: * under the terms of the GNU General Public License version 2 only, as
07: * published by the Free Software Foundation. Sun designates this
08: * particular file as subject to the "Classpath" exception as provided
09: * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22: * CA 95054 USA or visit www.sun.com if you need additional information or
23: * have any questions.
24: */
25:
26: package com.sun.codemodel.internal;
27:
28: /**
29: * If statement, with optional else clause
30: */
31:
32: public class JConditional implements JStatement {
33:
34: /**
35: * JExpression to test to determine branching
36: */
37: private JExpression test = null;
38:
39: /**
40: * JBlock of statements for "then" clause
41: */
42: private JBlock _then = new JBlock();
43:
44: /**
45: * JBlock of statements for optional "else" clause
46: */
47: private JBlock _else = null;
48:
49: /**
50: * Constructor
51: *
52: * @param test
53: * JExpression which will determine branching
54: */
55: JConditional(JExpression test) {
56: this .test = test;
57: }
58:
59: /**
60: * Return the block to be excuted by the "then" branch
61: *
62: * @return Then block
63: */
64: public JBlock _then() {
65: return _then;
66: }
67:
68: /**
69: * Create a block to be executed by "else" branch
70: *
71: * @return Newly generated else block
72: */
73: public JBlock _else() {
74: if (_else == null)
75: _else = new JBlock();
76: return _else;
77: }
78:
79: public void state(JFormatter f) {
80: if (test == JExpr.TRUE) {
81: _then.generateBody(f);
82: return;
83: }
84: if (test == JExpr.FALSE) {
85: _else.generateBody(f);
86: return;
87: }
88:
89: if (JOp.hasTopOp(test)) {
90: f.p("if ").g(test);
91: } else {
92: f.p("if (").g(test).p(')');
93: }
94: f.g(_then);
95: if (_else != null)
96: f.p("else").g(_else);
97: f.nl();
98: }
99: }
|