src/jdk.compiler/share/classes/com/sun/source/tree/CaseTree.java
changeset 51563 de411d537aae
parent 47216 71c04702a3d5
child 54817 ef73702a906e
equal deleted inserted replaced
51562:1b1bca603244 51563:de411d537aae
    26 package com.sun.source.tree;
    26 package com.sun.source.tree;
    27 
    27 
    28 import java.util.List;
    28 import java.util.List;
    29 
    29 
    30 /**
    30 /**
    31  * A tree node for a {@code case} in a {@code switch} statement.
    31  * A tree node for a {@code case} in a {@code switch} statement or expression.
    32  *
    32  *
    33  * For example:
    33  * For example:
    34  * <pre>
    34  * <pre>
    35  *   case <em>expression</em> :
    35  *   case <em>expression</em> :
    36  *       <em>statements</em>
    36  *       <em>statements</em>
    47  */
    47  */
    48 public interface CaseTree extends Tree {
    48 public interface CaseTree extends Tree {
    49     /**
    49     /**
    50      * Returns the expression for the case, or
    50      * Returns the expression for the case, or
    51      * {@code null} if this is the default case.
    51      * {@code null} if this is the default case.
       
    52      * If this case has multiple lables, returns the first label.
    52      * @return the expression for the case, or null
    53      * @return the expression for the case, or null
    53      */
    54      */
    54     ExpressionTree getExpression();
    55     ExpressionTree getExpression();
    55 
    56 
    56     /**
    57     /**
    57      * Returns the statements labeled by the case.
    58      * Returns the labels for this case.
    58      * @return the statements labeled by the 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")
       
    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
    59      */
    77      */
    60     List<? extends StatementTree> 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")
       
    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")
       
   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     }
    61 }
   137 }