1 /*
2  * Copyright (c) 1997, 2010, 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 
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      */
JConditional(JExpression test)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      */
_then()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      */
_else()73     public JBlock _else() {
74         if (_else == null) _else = new JBlock();
75         return _else;
76     }
77 
78     /**
79      * Creates <tt>... else if(...) ...</tt> code.
80      */
_elseif(JExpression boolExp)81     public JConditional _elseif(JExpression boolExp) {
82         return _else()._if(boolExp);
83     }
84 
state(JFormatter f)85     public void state(JFormatter f) {
86         if(test==JExpr.TRUE) {
87             _then.generateBody(f);
88             return;
89         }
90         if(test==JExpr.FALSE) {
91             _else.generateBody(f);
92             return;
93         }
94 
95         if (JOp.hasTopOp(test)) {
96             f.p("if ").g(test);
97         } else {
98             f.p("if (").g(test).p(')');
99         }
100         f.g(_then);
101         if (_else != null)
102             f.p("else").g(_else);
103         f.nl();
104     }
105 }
106