JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/ast/stmt/SwitchEntry.java
1/*
2 * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2020 The JavaParser Team.
4 *
5 * This file is part of JavaParser.
6 *
7 * JavaParser can be used either under the terms of
8 * a) the GNU Lesser General Public License as published by
9 *     the Free Software Foundation, either version 3 of the License, or
10 *     (at your option) any later version.
11 * b) the terms of the Apache License
12 *
13 * You should have received a copy of both licenses in LICENCE.LGPL and
14 * LICENCE.APACHE. Please refer to those files for details.
15 *
16 * JavaParser is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 */
21package com.github.javaparser.ast.stmt;
22
23import com.github.javaparser.TokenRange;
24import com.github.javaparser.ast.AllFieldsConstructor;
25import com.github.javaparser.ast.Generated;
26import com.github.javaparser.ast.Node;
27import com.github.javaparser.ast.NodeList;
28import com.github.javaparser.ast.expr.Expression;
29import com.github.javaparser.ast.nodeTypes.NodeWithStatements;
30import com.github.javaparser.ast.observer.ObservableProperty;
31import com.github.javaparser.ast.visitor.CloneVisitor;
32import com.github.javaparser.ast.visitor.GenericVisitor;
33import com.github.javaparser.ast.visitor.VoidVisitor;
34import com.github.javaparser.metamodel.JavaParserMetaModel;
35import com.github.javaparser.metamodel.SwitchEntryMetaModel;
36import static com.github.javaparser.utils.Utils.assertNotNull;
37
38/**
39 * <h1>One case in a switch statement</h1>
40 * The main Javadoc is in {@link SwitchStmt}
41 * <h2>Java 1.0-11</h2>
42 * <pre>{@code
43 * switch (i) {
44 *   case 1:
45 *   case 2:
46 *     System.out.println(444);
47 *     break;
48 *   default:
49 *     System.out.println(0);
50 * }
51 * }</pre>
52 * <br>
53 * This contains three SwitchEntrys. All of them are of type STATEMENT_GROUP.
54 * <ul>
55 *     <li>The first one has label 1 and no statements.</li>
56 *     <li>The second has label 2 and two statements (the println and the break).</li>
57 *     <li>The third, the default, has no label and one statement.</li>
58 * </ul>
59 * <h2>Java 12-</h2>
60 * <pre>{@code
61 *     case 1 -> 15*15;
62 *     case 2 -> { a++; b++; }
63 *     case 3 -> throw new Exception();
64 * }</pre>
65 * These are three new variants.
66 * <ul>
67 *     <li>The first one is of type EXPRESSION and stores its {@link Expression} in an {@link ExpressionStmt} which is stored as the first and only statement in statements.</li>
68 *     <li>The second one is of type BLOCK and stores its {@link BlockStmt} as the first and only statement in statements.</li>
69 *     <li>The third one is of type THROWS_STATEMENT and stores its {@link ThrowStmt} as the first and only statement in statements.</li>
70 * </ul>
71 * <pre>{@code
72 *     case MONDAY, FRIDAY, SUNDAY -> 6;
73 * }</pre>
74 * Multiple case labels are now allowed.
75 * <pre>{@code
76 *     case 16*16, 10+10 -> 6;
77 * }</pre>
78 * Many kinds of expressions are now allowed.
79 *
80 * @author Julio Vilmar Gesser
81 * @see SwitchStmt
82 * @see com.github.javaparser.ast.expr.SwitchExpr
83 */
84public class SwitchEntry extends Node implements NodeWithStatements<SwitchEntry> {
85
86    public enum Type {
87
88        STATEMENT_GROUP, EXPRESSION, BLOCK, THROWS_STATEMENT
89    }
90
91    private NodeList<Expressionlabels;
92
93    private NodeList<Statementstatements;
94
95    private Type type;
96
97    public SwitchEntry() {
98        this(null, new NodeList<Expression>(), Type.STATEMENT_GROUP, new NodeList<>());
99    }
100
101    @AllFieldsConstructor
102    public SwitchEntry(final NodeList<Expressionlabelsfinal Type typefinal NodeList<Statementstatements) {
103        this(nulllabelstypestatements);
104    }
105
106    /**
107     * This constructor is used by the parser and is considered private.
108     */
109    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
110    public SwitchEntry(TokenRange tokenRangeNodeList<ExpressionlabelsType typeNodeList<Statementstatements) {
111        super(tokenRange);
112        setLabels(labels);
113        setType(type);
114        setStatements(statements);
115        customInitialization();
116    }
117
118    @Override
119    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
120    public <RAR accept(final GenericVisitor<RAvfinal A arg) {
121        return v.visit(this, arg);
122    }
123
124    @Override
125    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
126    public <Avoid accept(final VoidVisitor<Avfinal A arg) {
127        v.visit(this, arg);
128    }
129
130    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
131    public NodeList<ExpressiongetLabels() {
132        return labels;
133    }
134
135    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
136    public NodeList<StatementgetStatements() {
137        return statements;
138    }
139
140    /**
141     * Sets the label
142     *
143     * @param labels the label, can be null
144     * @return this, the SwitchEntry
145     */
146    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
147    public SwitchEntry setLabels(final NodeList<Expressionlabels) {
148        assertNotNull(labels);
149        if (labels == this.labels) {
150            return (SwitchEntry) this;
151        }
152        notifyPropertyChange(ObservableProperty.LABELS, this.labelslabels);
153        if (this.labels != null)
154            this.labels.setParentNode(null);
155        this.labels = labels;
156        setAsParentNodeOf(labels);
157        return this;
158    }
159
160    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
161    public SwitchEntry setStatements(final NodeList<Statementstatements) {
162        assertNotNull(statements);
163        if (statements == this.statements) {
164            return (SwitchEntry) this;
165        }
166        notifyPropertyChange(ObservableProperty.STATEMENTS, this.statementsstatements);
167        if (this.statements != null)
168            this.statements.setParentNode(null);
169        this.statements = statements;
170        setAsParentNodeOf(statements);
171        return this;
172    }
173
174    @Override
175    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
176    public boolean remove(Node node) {
177        if (node == null)
178            return false;
179        for (int i = 0i < labels.size(); i++) {
180            if (labels.get(i) == node) {
181                labels.remove(i);
182                return true;
183            }
184        }
185        for (int i = 0i < statements.size(); i++) {
186            if (statements.get(i) == node) {
187                statements.remove(i);
188                return true;
189            }
190        }
191        return super.remove(node);
192    }
193
194    @Override
195    @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
196    public SwitchEntry clone() {
197        return (SwitchEntryaccept(new CloneVisitor(), null);
198    }
199
200    @Override
201    @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
202    public SwitchEntryMetaModel getMetaModel() {
203        return JavaParserMetaModel.switchEntryMetaModel;
204    }
205
206    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
207    public Type getType() {
208        return type;
209    }
210
211    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
212    public SwitchEntry setType(final Type type) {
213        assertNotNull(type);
214        if (type == this.type) {
215            return (SwitchEntry) this;
216        }
217        notifyPropertyChange(ObservableProperty.TYPE, this.typetype);
218        this.type = type;
219        return this;
220    }
221
222    @Override
223    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
224    public boolean replace(Node nodeNode replacementNode) {
225        if (node == null)
226            return false;
227        for (int i = 0i < labels.size(); i++) {
228            if (labels.get(i) == node) {
229                labels.set(i, (ExpressionreplacementNode);
230                return true;
231            }
232        }
233        for (int i = 0i < statements.size(); i++) {
234            if (statements.get(i) == node) {
235                statements.set(i, (StatementreplacementNode);
236                return true;
237            }
238        }
239        return super.replace(nodereplacementNode);
240    }
241}
242
MembersX
SwitchEntry:statements
SwitchEntry:SwitchEntry
SwitchEntry:accept
SwitchEntry:Type:STATEMENT_GROUP
SwitchEntry:replace
SwitchEntry:Type:EXPRESSION
SwitchEntry:getStatements
SwitchEntry:getType
SwitchEntry:Type:BLOCK
SwitchEntry:getLabels
SwitchEntry:clone
SwitchEntry:Type:THROWS_STATEMENT
SwitchEntry:getMetaModel
SwitchEntry:setLabels
SwitchEntry:type
SwitchEntry:remove
SwitchEntry:labels
SwitchEntry:setType
SwitchEntry:setStatements
Members
X