View Javadoc
1   /**
2    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3    *
4    * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
5    * Portions Copyright 2013-2017 Philip Helger + contributors
6    *
7    * The contents of this file are subject to the terms of either the GNU
8    * General Public License Version 2 only ("GPL") or the Common Development
9    * and Distribution License("CDDL") (collectively, the "License").  You
10   * may not use this file except in compliance with the License.  You can
11   * obtain a copy of the License at
12   * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
13   * or packager/legal/LICENSE.txt.  See the License for the specific
14   * language governing permissions and limitations under the License.
15   *
16   * When distributing the software, include this License Header Notice in each
17   * file and include the License file at packager/legal/LICENSE.txt.
18   *
19   * GPL Classpath Exception:
20   * Oracle designates this particular file as subject to the "Classpath"
21   * exception as provided by Oracle in the GPL Version 2 section of the License
22   * file that accompanied this code.
23   *
24   * Modifications:
25   * If applicable, add the following below the License Header, with the fields
26   * enclosed by brackets [] replaced by your own identifying information:
27   * "Portions Copyright [year] [name of copyright owner]"
28   *
29   * Contributor(s):
30   * If you wish your version of this file to be governed by only the CDDL or
31   * only the GPL Version 2, indicate your decision by adding "[Contributor]
32   * elects to include this software in this distribution under the [CDDL or GPL
33   * Version 2] license."  If you don't indicate a single choice of license, a
34   * recipient has the option to distribute your version of this file under
35   * either the CDDL, the GPL Version 2 or to extend the choice of license to
36   * its licensees as provided above.  However, if you add GPL Version 2 code
37   * and therefore, elected the GPL Version 2 license, then the option applies
38   * only if the new code is made subject to such option by the copyright
39   * holder.
40   */
41  package com.helger.jcodemodel;
42  
43  import javax.annotation.Nonnull;
44  
45  import com.helger.jcodemodel.util.JCValueEnforcer;
46  
47  /**
48   * Do loops
49   */
50  public class JDoLoop implements IJStatement
51  {
52    /**
53     * Test part of Do statement for determining exit state
54     */
55    private final IJExpression m_aTest;
56  
57    /**
58     * JBlock of statements which makes up body of this Do statement
59     */
60    private JBlock m_aBody;
61  
62    /**
63     * Construct a Do statement
64     *
65     * @param aTest
66     *        Test expression
67     */
68    protected JDoLoop (@Nonnull final IJExpression aTest)
69    {
70      m_aTest = JCValueEnforcer.notNull (aTest, "Test");
71    }
72  
73    @Nonnull
74    public IJExpression test ()
75    {
76      return m_aTest;
77    }
78  
79    @Nonnull
80    public JBlock body ()
81    {
82      if (m_aBody == null)
83        m_aBody = new JBlock ();
84      return m_aBody;
85    }
86  
87    public void state (@Nonnull final JFormatter f)
88    {
89      f.print ("do");
90      if (m_aBody != null)
91        f.generable (m_aBody);
92      else
93        f.print ("{ }");
94  
95      if (JOp.hasTopOp (m_aTest))
96      {
97        f.print ("while ").generable (m_aTest);
98      }
99      else
100     {
101       f.print ("while (").generable (m_aTest).print (')');
102     }
103     f.print (';').newline ();
104   }
105 }