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 
  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) _else = new JBlock();
  75         return _else;
  76     }
  77 
  78     /**
  79      * Creates <tt>... else if(...) ...</tt> code.
  80      */
  81     public JConditional _elseif(JExpression boolExp) {
  82         return _else()._if(boolExp);
  83     }
  84 
  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 }