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 static com.helger.jcodemodel.util.JCEqualsHelper.isEqual;
44  import static com.helger.jcodemodel.util.JCHashCodeGenerator.getHashCode;
45  
46  import javax.annotation.Nonnull;
47  
48  import com.helger.jcodemodel.util.JCValueEnforcer;
49  
50  /**
51   * Enum Constant reference. When used as an {@link IJExpression}, this object
52   * represents a reference to the enum constant.
53   *
54   * @author Philip Helger
55   */
56  public class JEnumConstantRef implements IJExpression
57  {
58    /**
59     * The enum class.
60     */
61    private final AbstractJClass m_aType;
62  
63    /**
64     * The constant.
65     */
66    private final String m_sName;
67  
68    protected JEnumConstantRef (@Nonnull final AbstractJClass aType, @Nonnull final String sName)
69    {
70      JCValueEnforcer.notNull (aType, "Type");
71      JCValueEnforcer.notNull (sName, "Name");
72      m_aType = aType;
73      m_sName = sName;
74    }
75  
76    @Nonnull
77    public AbstractJClass type ()
78    {
79      return m_aType;
80    }
81  
82    /**
83     * @return The plain name of the enum constant, without any type prefix
84     */
85    @Nonnull
86    public String name ()
87    {
88      return m_sName;
89    }
90  
91    /**
92     * Returns the name of this constant including the type name
93     *
94     * @return never null.
95     */
96    @Nonnull
97    public String getName ()
98    {
99      return m_aType.fullName () + '.' + m_sName;
100   }
101 
102   public void generate (@Nonnull final JFormatter f)
103   {
104     f.type (m_aType).print ('.').print (m_sName);
105   }
106 
107   @Override
108   public boolean equals (final Object o)
109   {
110     if (o == this)
111       return true;
112     if (o == null || getClass () != o.getClass ())
113       return false;
114     final JEnumConstantRef rhs = (JEnumConstantRef) o;
115     return isEqual (m_aType.fullName (), rhs.m_aType.fullName ()) && isEqual (m_sName, rhs.m_sName);
116   }
117 
118   @Override
119   public int hashCode ()
120   {
121     return getHashCode (this, m_aType.fullName (), m_sName);
122   }
123 }