1 /*
2  * Copyright (c) 2005, 2014, 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.source.tree;
27 
28 import java.util.List;
29 
30 /**
31  * A tree node for a {@code case} in a {@code switch} statement or expression.
32  *
33  * For example:
34  * <pre>
35  *   case <em>expression</em> :
36  *       <em>statements</em>
37  *
38  *   default :
39  *       <em>statements</em>
40  * </pre>
41  *
42  * @jls 14.11 The switch Statement
43  *
44  * @author Peter von der Ah&eacute;
45  * @author Jonathan Gibbons
46  * @since 1.6
47  */
48 public interface CaseTree extends Tree {
49     /**
50      * Returns the expression for the case, or
51      * {@code null} if this is the default case.
52      * If this case has multiple lables, returns the first label.
53      * @return the expression for the case, or null
54      */
getExpression()55     ExpressionTree getExpression();
56 
57     /**
58      * Returns the labels for this case.
59      * For default case, returns an empty list.
60      *
61      * @return labels for this case
62      * @since 12
63      *
64      * @deprecated This method is modeling a case with multiple labels,
65      * which is part of a preview feature and may be removed
66      * if the preview feature is removed.
67      */
68     @Deprecated(forRemoval=true, since="12")
getExpressions()69     List<? extends ExpressionTree> getExpressions();
70 
71     /**
72      * For case with kind {@linkplain CaseKind#STATEMENT},
73      * returns the statements labeled by the case.
74      * Returns {@code null} for case with kind
75      * {@linkplain CaseKind#RULE}.
76      * @return the statements labeled by the case or null
77      */
getStatements()78     List<? extends StatementTree> getStatements();
79 
80     /**
81      * For case with kind {@linkplain CaseKind#RULE},
82      * returns the statement or expression after the arrow.
83      * Returns {@code null} for case with kind
84      * {@linkplain CaseKind#STATEMENT}.
85      *
86      * @return case value or null
87      * @since 12
88      *
89      * @deprecated This method is modeling a rule case,
90      * which is part of a preview feature and may be removed
91      * if the preview feature is removed.
92      */
93     @Deprecated(forRemoval=true, since="12")
getBody()94     public default Tree getBody() {
95         return null;
96     }
97 
98     /**
99      * Returns the kind of this case.
100      *
101      * @return the kind of this case
102      * @since 12
103      *
104      * @deprecated This method is used to model a rule case,
105      * which is part of a preview feature and may be removed
106      * if the preview feature is removed.
107      */
108     @Deprecated(forRemoval=true, since="12")
getCaseKind()109     public default CaseKind getCaseKind() {
110         return CaseKind.STATEMENT;
111     }
112 
113     /**
114      * The syntatic form of this case:
115      * <ul>
116      *     <li>STATEMENT: {@code case <expression>: <statements>}</li>
117      *     <li>RULE: {@code case <expression> -> <expression>/<statement>}</li>
118      * </ul>
119      *
120      * @since 12
121      *
122      * @deprecated This enum is used to model a rule case,
123      * which is part of a preview feature and may be removed
124      * if the preview feature is removed.
125      */
126     @Deprecated(forRemoval=true, since="12")
127     public enum CaseKind {
128         /**
129          * Case is in the form: {@code case <expression>: <statements>}.
130          */
131         STATEMENT,
132         /**
133          * Case is in the form: {@code case <expression> -> <expression>}.
134          */
135         RULE;
136     }
137 }
138