Package com.github.javaparser.ast.stmt
Class SwitchEntry
- java.lang.Object
-
- com.github.javaparser.ast.Node
-
- com.github.javaparser.ast.stmt.SwitchEntry
-
- All Implemented Interfaces:
NodeWithRange<Node>
,NodeWithStatements<SwitchEntry>
,NodeWithTokenRange<Node>
,Observable
,Visitable
,HasParentNode<Node>
,Cloneable
public class SwitchEntry extends Node implements NodeWithStatements<SwitchEntry>
One case in a switch statement
The main Javadoc is inSwitchStmt
Java 1.0-11
switch (i) { case 1: case 2: System.out.println(444); break; default: System.out.println(0); }
This contains three SwitchEntrys. All of them are of type STATEMENT_GROUP.- The first one has label 1 and no statements.
- The second has label 2 and two statements (the println and the break).
- The third, the default, has no label and one statement.
Java 12-
These are three new variants.case 1 -> 15*15; case 2 -> { a++; b++; } case 3 -> throw new Exception();
- The first one is of type EXPRESSION and stores its
Expression
in anExpressionStmt
which is stored as the first and only statement in statements. - The second one is of type BLOCK and stores its
BlockStmt
as the first and only statement in statements. - The third one is of type THROWS_STATEMENT and stores its
ThrowStmt
as the first and only statement in statements.
Multiple case labels are now allowed.case MONDAY, FRIDAY, SUNDAY -> 6;
Many kinds of expressions are now allowed. Note (https://github.com/javaparser/javaparser/pull/4679): The JavaParser representation for SwitchEntry is (slightly) incorrect. JP Assumes that the body of a SwitchEntry will be a list of statements which was true before switch expressions were added, but is no longer the case for this rule. The workaround for this was to wrap the expression in an ExpressionStmt node which works well, but is not entirely correct according to the JLS since the ExpressionStmt in this specific case can contain any expression, not just those which are legal expression statements according to the JLS, for example below (a lambda is not a valid expression statement, but the below snippet is still legal Java code):case 16*16, 10+10 -> 6;
https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.28 https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.8return switch (o) { case String s -> (arg) -> System.out.println(arg + s); case null, default -> (arg) -> {}; };
- Author:
- Julio Vilmar Gesser
- See Also:
SwitchStmt
,SwitchExpr
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SwitchEntry.Type
-
Nested classes/interfaces inherited from class com.github.javaparser.ast.Node
Node.BreadthFirstIterator, Node.DirectChildrenIterator, Node.ObserverRegistrationMode, Node.ParentsVisitor, Node.Parsedness, Node.PostOrderIterator, Node.PreOrderIterator, Node.TreeTraversal
-
-
Field Summary
-
Fields inherited from class com.github.javaparser.ast.Node
ABSOLUTE_BEGIN_LINE, ABSOLUTE_END_LINE, LINE_SEPARATOR_KEY, NODE_BY_BEGIN_POSITION, PHANTOM_KEY, prettyPrinterNoCommentsConfiguration, PRINTER_KEY, SYMBOL_RESOLVER_KEY
-
-
Constructor Summary
Constructors Constructor Description SwitchEntry()
SwitchEntry(NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements)
This constructor exists for backwards compatibility for code that instantiated `SwitchEntries` before the `isDefault` and guard fields were added.SwitchEntry(NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements, boolean isDefault, Expression guard)
SwitchEntry(TokenRange tokenRange, NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements)
This constructor exists for backwards compatibility for code that instantiated `SwitchEntries` before the `isDefault` and guard fields were added.SwitchEntry(TokenRange tokenRange, NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements, boolean isDefault)
This constructor is used by the parser and is considered private.SwitchEntry(TokenRange tokenRange, NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements, boolean isDefault, Expression guard)
This constructor is used by the parser and is considered private.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <R,A>
Raccept(GenericVisitor<R,A> v, A arg)
Accept method for visitor support.<A> void
accept(VoidVisitor<A> v, A arg)
Accept method for visitor support.SwitchEntry
clone()
Optional<Expression>
getGuard()
NodeList<Expression>
getLabels()
SwitchEntryMetaModel
getMetaModel()
NodeList<Statement>
getStatements()
SwitchEntry.Type
getType()
boolean
isDefault()
boolean
isSwitchStatementEntry()
This is required for the ConcreteSyntaxModel, specifically to determine whether this entry uses the classic switch statement syntax (e.g.boolean
remove(Node node)
SwitchEntry
removeGuard()
boolean
replace(Node node, Node replacementNode)
SwitchEntry
setDefault(boolean isDefault)
SwitchEntry
setGuard(Expression guard)
SwitchEntry
setLabels(NodeList<Expression> labels)
Sets the labelSwitchEntry
setStatements(NodeList<Statement> statements)
SwitchEntry
setType(SwitchEntry.Type type)
-
Methods inherited from class com.github.javaparser.ast.Node
addOrphanComment, containsData, createDefaultPrinter, createDefaultPrinter, customInitialization, equals, findAll, findAll, findAll, findByRange, findCompilationUnit, findData, findFirst, findFirst, findFirst, findRootNode, getAllContainedComments, getChildNodes, getChildNodesByType, getComment, getData, getDataKeys, getDefaultPrinterConfiguration, getLineEndingStyle, getLineEndingStyleOrDefault, getNodesByType, getOrphanComments, getParentNode, getParentNodeForChildren, getParsed, getPrinter, getPrinter, getRange, getSymbolResolver, getTokenRange, hashCode, hasScope, isAncestorOf, isPhantom, isRegistered, notifyPropertyChange, register, register, registerForSubtree, remove, removeComment, removeData, removeForced, removeOrphanComment, replace, setAsParentNodeOf, setAsParentNodeOf, setBlockComment, setComment, setData, setLineComment, setParentNode, setParsed, setRange, setTokenRange, stream, stream, toString, toString, tryAddImportToParentCompilationUnit, unregister, walk, walk, walk
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.github.javaparser.HasParentNode
findAncestor, findAncestor, findAncestor, hasParentNode, isDescendantOf
-
Methods inherited from interface com.github.javaparser.ast.nodeTypes.NodeWithRange
containsWithin, containsWithinRange, getBegin, getEnd, hasRange
-
Methods inherited from interface com.github.javaparser.ast.nodeTypes.NodeWithStatements
addAndGetStatement, addAndGetStatement, addAndGetStatement, addAndGetStatement, addStatement, addStatement, addStatement, addStatement, addStatement, copyStatements, copyStatements, getStatement, isEmpty, setStatement
-
-
-
-
Constructor Detail
-
SwitchEntry
public SwitchEntry()
-
SwitchEntry
public SwitchEntry(TokenRange tokenRange, NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements)
This constructor exists for backwards compatibility for code that instantiated `SwitchEntries` before the `isDefault` and guard fields were added.
-
SwitchEntry
public SwitchEntry(NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements)
This constructor exists for backwards compatibility for code that instantiated `SwitchEntries` before the `isDefault` and guard fields were added.
-
SwitchEntry
public SwitchEntry(NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements, boolean isDefault, Expression guard)
-
SwitchEntry
public SwitchEntry(TokenRange tokenRange, NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements, boolean isDefault, Expression guard)
This constructor is used by the parser and is considered private.
-
SwitchEntry
public SwitchEntry(TokenRange tokenRange, NodeList<Expression> labels, SwitchEntry.Type type, NodeList<Statement> statements, boolean isDefault)
This constructor is used by the parser and is considered private.
-
-
Method Detail
-
isSwitchStatementEntry
public boolean isSwitchStatementEntry()
This is required for the ConcreteSyntaxModel, specifically to determine whether this entry uses the classic switch statement syntax (e.g. `case X: ...`) or the newer switch expression syntax (`case X -> ...`). The entry type is STATEMENT_GROUP in the switch statement case and all other values are for the various switch expressions.
-
accept
public <R,A> R accept(GenericVisitor<R,A> v, A arg)
Description copied from interface:Visitable
Accept method for visitor support.- Specified by:
accept
in interfaceVisitable
- Type Parameters:
R
- the type of the return value of the visitorA
- the type the user argument passed to the visitor- Parameters:
v
- the visitor implementationarg
- the argument passed to the visitor (of type A)- Returns:
- the result of the visit (of type R)
-
accept
public <A> void accept(VoidVisitor<A> v, A arg)
Description copied from interface:Visitable
Accept method for visitor support.
-
getLabels
public NodeList<Expression> getLabels()
-
getStatements
public NodeList<Statement> getStatements()
- Specified by:
getStatements
in interfaceNodeWithStatements<SwitchEntry>
-
setLabels
public SwitchEntry setLabels(NodeList<Expression> labels)
Sets the label- Parameters:
labels
- the label, can be null- Returns:
- this, the SwitchEntry
-
setStatements
public SwitchEntry setStatements(NodeList<Statement> statements)
- Specified by:
setStatements
in interfaceNodeWithStatements<SwitchEntry>
-
clone
public SwitchEntry clone()
-
getMetaModel
public SwitchEntryMetaModel getMetaModel()
- Overrides:
getMetaModel
in classNode
- Returns:
- get JavaParser specific node introspection information.
-
getType
public SwitchEntry.Type getType()
-
setType
public SwitchEntry setType(SwitchEntry.Type type)
-
isDefault
public boolean isDefault()
-
setDefault
public SwitchEntry setDefault(boolean isDefault)
-
getGuard
public Optional<Expression> getGuard()
-
setGuard
public SwitchEntry setGuard(Expression guard)
-
removeGuard
public SwitchEntry removeGuard()
-
-