Thu, 12 Oct 2017 19:44:07 +0800
merge
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 */
26 package com.sun.codemodel.internal;
28 /**
29 * If statement, with optional else clause
30 */
32 public class JConditional implements JStatement {
34 /**
35 * JExpression to test to determine branching
36 */
37 private JExpression test = null;
39 /**
40 * JBlock of statements for "then" clause
41 */
42 private JBlock _then = new JBlock();
44 /**
45 * JBlock of statements for optional "else" clause
46 */
47 private JBlock _else = null;
49 /**
50 * Constructor
51 *
52 * @param test
53 * JExpression which will determine branching
54 */
55 JConditional(JExpression test) {
56 this.test = test;
57 }
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 }
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) _else = new JBlock();
75 return _else;
76 }
78 /**
79 * Creates <tt>... else if(...) ...</tt> code.
80 */
81 public JConditional _elseif(JExpression boolExp) {
82 return _else()._if(boolExp);
83 }
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 }
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 }