ElementKind.java revision 3976:65d446c80cdf
1/*
2 * Copyright (c) 2005, 2015, 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
26package javax.lang.model.element;
27
28/**
29 * The {@code kind} of an element.
30 *
31 * <p>Note that it is possible additional element kinds will be added
32 * to accommodate new, currently unknown, language structures added to
33 * future versions of the Java&trade; programming language.
34 *
35 * @author Joseph D. Darcy
36 * @author Scott Seligman
37 * @author Peter von der Ah&eacute;
38 * @see Element
39 * @since 1.6
40 */
41public enum ElementKind {
42
43    /** A package. */
44    PACKAGE,
45
46    // Declared types
47    /** An enum type. */
48    ENUM,
49    /** A class not described by a more specific kind (like {@code ENUM}). */
50    CLASS,
51    /** An annotation type. */
52    ANNOTATION_TYPE,
53    /**
54     * An interface not described by a more specific kind (like
55     * {@code ANNOTATION_TYPE}).
56     */
57    INTERFACE,
58
59    // Variables
60    /** An enum constant. */
61    ENUM_CONSTANT,
62    /**
63     * A field not described by a more specific kind (like
64     * {@code ENUM_CONSTANT}).
65     */
66    FIELD,
67    /** A parameter of a method or constructor. */
68    PARAMETER,
69    /** A local variable. */
70    LOCAL_VARIABLE,
71    /** A parameter of an exception handler. */
72    EXCEPTION_PARAMETER,
73
74    // Executables
75    /** A method. */
76    METHOD,
77    /** A constructor. */
78    CONSTRUCTOR,
79    /** A static initializer. */
80    STATIC_INIT,
81    /** An instance initializer. */
82    INSTANCE_INIT,
83
84    /** A type parameter. */
85    TYPE_PARAMETER,
86
87    /**
88     * An implementation-reserved element.  This is not the element
89     * you are looking for.
90     */
91    OTHER,
92
93    /**
94     * A resource variable.
95     * @since 1.7
96     */
97     RESOURCE_VARIABLE,
98
99    /**
100     * A module.
101     * @since 9
102     * @spec JPMS
103     */
104     MODULE;
105
106
107    /**
108     * Returns {@code true} if this is a kind of class:
109     * either {@code CLASS} or {@code ENUM}.
110     *
111     * @return {@code true} if this is a kind of class
112     */
113    public boolean isClass() {
114        return this == CLASS || this == ENUM;
115    }
116
117    /**
118     * Returns {@code true} if this is a kind of interface:
119     * either {@code INTERFACE} or {@code ANNOTATION_TYPE}.
120     *
121     * @return {@code true} if this is a kind of interface
122     */
123    public boolean isInterface() {
124        return this == INTERFACE || this == ANNOTATION_TYPE;
125    }
126
127    /**
128     * Returns {@code true} if this is a kind of field:
129     * either {@code FIELD} or {@code ENUM_CONSTANT}.
130     *
131     * @return {@code true} if this is a kind of field
132     */
133    public boolean isField() {
134        return this == FIELD || this == ENUM_CONSTANT;
135    }
136}
137