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-2018 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  import javax.annotation.Nullable;
45  
46  /**
47   * Catch block for a try/catch/finally statement
48   */
49  public class JCatchBlock implements IJGenerable
50  {
51    private final AbstractJClass m_aException;
52    private JVar m_aVar;
53    private final JBlockl#JBlock">JBlock m_aBody = new JBlock ();
54  
55    protected JCatchBlock (@Nonnull final AbstractJClass aException)
56    {
57      m_aException = aException;
58    }
59  
60    @Nonnull
61    public AbstractJClass exception ()
62    {
63      return m_aException;
64    }
65  
66    @Nonnull
67    public JVar param (final String sName)
68    {
69      if (m_aVar != null)
70        throw new IllegalStateException ("A variable is already present!");
71      m_aVar = new JVar (JMods.forVar (JMod.FINAL), m_aException, sName, null);
72      return m_aVar;
73    }
74  
75    @Nullable
76    public JVar param ()
77    {
78      return m_aVar;
79    }
80  
81    @Nonnull
82    public JBlock body ()
83    {
84      return m_aBody;
85    }
86  
87    public void generate (@Nonnull final IJFormatter f)
88    {
89      if (m_aVar == null)
90        m_aVar = new JVar (JMods.forVar (JMod.FINAL), m_aException, "ex", null);
91      f.print ("catch (").var (m_aVar).print (')').generable (m_aBody);
92    }
93  }