diff --git a/javaparser-core-testing/src/test/java/com/github/javaparser/ast/expr/SwitchExprTest.java b/javaparser-core-testing/src/test/java/com/github/javaparser/ast/expr/SwitchExprTest.java
index fbc4460c71..ab46fae52d 100644
--- a/javaparser-core-testing/src/test/java/com/github/javaparser/ast/expr/SwitchExprTest.java
+++ b/javaparser-core-testing/src/test/java/com/github/javaparser/ast/expr/SwitchExprTest.java
@@ -63,7 +63,6 @@ void jep325Example5() {
"};");
}
- @Disabled("to be implemented")
@Test
void jep325Example6() {
JavaParser.parseStatement("int result = switch (s) {\n" +
diff --git a/javaparser-core-testing/src/test/java/com/github/javaparser/ast/stmt/BreakStmtTest.java b/javaparser-core-testing/src/test/java/com/github/javaparser/ast/stmt/BreakStmtTest.java
new file mode 100644
index 0000000000..9b19992b85
--- /dev/null
+++ b/javaparser-core-testing/src/test/java/com/github/javaparser/ast/stmt/BreakStmtTest.java
@@ -0,0 +1,29 @@
+package com.github.javaparser.ast.stmt;
+
+import com.github.javaparser.ast.expr.BinaryExpr;
+import org.junit.jupiter.api.Test;
+
+import static com.github.javaparser.JavaParser.parseStatement;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+class BreakStmtTest {
+ @Test
+ void simpleBreak() {
+ BreakStmt statement = parseStatement("break;").asBreakStmt();
+ assertFalse(statement.getValue().isPresent());
+ }
+
+ @Test
+ void breakWithLabel() {
+ BreakStmt statement = parseStatement("break hond;").asBreakStmt();
+ assertEquals("hond", statement.getValue().get().asNameExpr().getName().asString());
+
+ }
+
+ @Test
+ void breakWithExpression() {
+ BreakStmt statement = parseStatement("break 12*12;").asBreakStmt();
+ assertEquals(BinaryExpr.class, statement.getValue().get().getClass());
+ }
+}
\ No newline at end of file
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SwitchExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SwitchExpr.java
index 703515c8ed..627f258881 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SwitchExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SwitchExpr.java
@@ -27,22 +27,28 @@
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.nodeTypes.SwitchNode;
import com.github.javaparser.ast.observer.ObservableProperty;
-import com.github.javaparser.ast.stmt.Statement;
import com.github.javaparser.ast.stmt.SwitchEntryStmt;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
import com.github.javaparser.metamodel.JavaParserMetaModel;
-import com.github.javaparser.metamodel.SwitchStmtMetaModel;
+import com.github.javaparser.metamodel.SwitchExprMetaModel;
+
import java.util.Optional;
import java.util.function.Consumer;
+
import static com.github.javaparser.utils.Utils.assertNotNull;
-import com.github.javaparser.metamodel.SwitchExprMetaModel;
/**
- * A switch expression.
- *
In switch(a) { ... }
the selector is "a",
- * and the contents of the { ... } are the entries.
+ *
The switch expression
+ * Java 1.0-11
+ * Not available.
+ * Java 12-
+ * Like {@link com.github.javaparser.ast.stmt.SwitchStmt},
+ * but can also be used as an expression.
+ *
+ *
int a = switch(x) { case 5,6 -> 20; case 9 -> 30; default -> 40; };
+ *
int a = switch(x) { case 5,6: break 20; default: break 5+5; };
*
* @author Julio Vilmar Gesser
* @see SwitchEntryStmt
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/BreakStmt.java b/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/BreakStmt.java
index 8d92a7f44a..24690f8dca 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/BreakStmt.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/BreakStmt.java
@@ -20,52 +20,64 @@
*/
package com.github.javaparser.ast.stmt;
+import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
-import com.github.javaparser.ast.expr.SimpleName;
+import com.github.javaparser.ast.Generated;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
+import com.github.javaparser.metamodel.OptionalProperty;
import java.util.Optional;
+import java.util.function.Consumer;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.BreakStmtMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
-import com.github.javaparser.TokenRange;
-import com.github.javaparser.metamodel.OptionalProperty;
-import java.util.function.Consumer;
-import com.github.javaparser.ast.Generated;
/**
- * A usage of the break keyword.
- *
In break abc;
the label is abc.
+ * The break statement
+ * Java 1.0-11
+ * Break has an optional label:
+ *
break;
+ *
break somewhere;
+ *
The label is in the "value" property as a NameExpr.
+ * Java 12
+ * Break can now also have any expression,
+ * to be used in the switch-expression:
+ *
break 123+456;
+ *
break "more or less";
+ *
The expression will be in the "value" property.
*
* @author Julio Vilmar Gesser
+ * @see com.github.javaparser.ast.expr.SwitchExpr
*/
public final class BreakStmt extends Statement {
@OptionalProperty
- private SimpleName label;
+ private Expression value;
public BreakStmt() {
- this(null, new SimpleName());
+ this(null, new NameExpr());
}
public BreakStmt(final String label) {
- this(null, new SimpleName(label));
+ this(null, new NameExpr(label));
}
@AllFieldsConstructor
- public BreakStmt(final SimpleName label) {
- this(null, label);
+ public BreakStmt(final Expression value) {
+ this(null, value);
}
/**
* This constructor is used by the parser and is considered private.
*/
@Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
- public BreakStmt(TokenRange tokenRange, SimpleName label) {
+ public BreakStmt(TokenRange tokenRange, Expression value) {
super(tokenRange);
- setLabel(label);
+ setValue(value);
customInitialization();
}
@@ -82,26 +94,26 @@ public void accept(final VoidVisitor v, final A arg) {
}
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
- public Optional getLabel() {
- return Optional.ofNullable(label);
+ public Optional getValue() {
+ return Optional.ofNullable(value);
}
/**
* Sets the label
*
- * @param label the label, can be null
+ * @param value the label or the expression, can be null
* @return this, the BreakStmt
*/
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
- public BreakStmt setLabel(final SimpleName label) {
- if (label == this.label) {
+ public BreakStmt setValue(final Expression value) {
+ if (value == this.value) {
return (BreakStmt) this;
}
- notifyPropertyChange(ObservableProperty.LABEL, this.label, label);
- if (this.label != null)
- this.label.setParentNode(null);
- this.label = label;
- setAsParentNodeOf(label);
+ notifyPropertyChange(ObservableProperty.VALUE, this.value, value);
+ if (this.value != null)
+ this.value.setParentNode(null);
+ this.value = value;
+ setAsParentNodeOf(value);
return this;
}
@@ -110,9 +122,9 @@ public BreakStmt setLabel(final SimpleName label) {
public boolean remove(Node node) {
if (node == null)
return false;
- if (label != null) {
- if (node == label) {
- removeLabel();
+ if (value != null) {
+ if (node == value) {
+ removeValue();
return true;
}
}
@@ -120,8 +132,8 @@ public boolean remove(Node node) {
}
@Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
- public BreakStmt removeLabel() {
- return setLabel((SimpleName) null);
+ public BreakStmt removeValue() {
+ return setValue((Expression) null);
}
@Override
@@ -141,9 +153,9 @@ public BreakStmtMetaModel getMetaModel() {
public boolean replace(Node node, Node replacementNode) {
if (node == null)
return false;
- if (label != null) {
- if (node == label) {
- setLabel((SimpleName) replacementNode);
+ if (value != null) {
+ if (node == value) {
+ setValue((Expression) replacementNode);
return true;
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchStmt.java b/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchStmt.java
index 7c699c0336..8f144ff794 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchStmt.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchStmt.java
@@ -28,21 +28,47 @@
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
+
import static com.github.javaparser.utils.Utils.assertNotNull;
+
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.SwitchStmtMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.TokenRange;
+
import java.util.function.Consumer;
import java.util.Optional;
+
import com.github.javaparser.ast.Generated;
/**
- * A switch statement.
+ * The switch statement
+ *
+ * Java 1.0-1.4
+ * The basic C-like switch statement.
+ * It can switch only on integers.
+ *
switch(x) { case 5: case 6: a=100; break; case 9: a=33; break; default: throw new IllegalStateException(); };
*
In switch(a) { ... }
the selector is "a",
* and the contents of the { ... } are the entries.
*
+ * Java 5-6
+ * Switching can now also be done on enum constants.
+ *
+ * Java 7-11
+ * Switching can now also be done on strings.
+ *
+ * Java 12-
+ * In preparation for pattern matching, lots of changes are made:
+ *
+ * - multiple labels per case
+ *
- a -> syntax that does not fall through.
+ *
- break can take any expression (usable in the {@link com.github.javaparser.ast.expr.SwitchExpr})
+ *
- switch can be used as an expression (it becomes a {@link com.github.javaparser.ast.expr.SwitchExpr})
+ *
+ * switch(x) { case BANANA,PEAR: b=10; break; default: b=5; };
+ *
switch(x) { case 5,6 -> println("uhuh"); default -> println("nope"); };
+ *
* @author Julio Vilmar Gesser
* @see SwitchEntryStmt
* @see com.github.javaparser.ast.expr.SwitchExpr
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java
index 5716390429..a4d313817a 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java
@@ -22,11 +22,15 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
-import com.github.javaparser.ast.comments.*;
+import com.github.javaparser.ast.comments.BlockComment;
+import com.github.javaparser.ast.comments.Comment;
+import com.github.javaparser.ast.comments.JavadocComment;
+import com.github.javaparser.ast.comments.LineComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
import com.github.javaparser.ast.type.*;
+
import java.util.Optional;
/**
@@ -709,9 +713,9 @@ public Visitable visit(final SwitchEntryStmt n, final Object arg) {
@Override
public Visitable visit(final BreakStmt n, final Object arg) {
- SimpleName label = cloneNode(n.getLabel(), arg);
+ Expression value = cloneNode(n.getValue(), arg);
Comment comment = cloneNode(n.getComment(), arg);
- BreakStmt r = new BreakStmt(n.getTokenRange().orElse(null), label);
+ BreakStmt r = new BreakStmt(n.getTokenRange().orElse(null), value);
r.setComment(comment);
return r;
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java
index 376b2049d6..1ddb3c672f 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java
@@ -986,7 +986,7 @@ public Boolean visit(final SwitchEntryStmt n, final Visitable arg) {
@Override
public Boolean visit(final BreakStmt n, final Visitable arg) {
final BreakStmt n2 = (BreakStmt) arg;
- if (!nodeEquals(n.getLabel(), n2.getLabel()))
+ if (!nodeEquals(n.getValue(), n2.getValue()))
return false;
if (!nodeEquals(n.getComment(), n2.getComment()))
return false;
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericListVisitorAdapter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericListVisitorAdapter.java
index 033226022a..2aabd68d09 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericListVisitorAdapter.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericListVisitorAdapter.java
@@ -319,8 +319,8 @@ public List visit(final BooleanLiteralExpr n, final A arg) {
public List visit(final BreakStmt n, final A arg) {
List result = new ArrayList<>();
List tmp;
- if (n.getLabel().isPresent()) {
- tmp = n.getLabel().get().accept(this, arg);
+ if (n.getValue().isPresent()) {
+ tmp = n.getValue().get().accept(this, arg);
if (tmp != null)
result.addAll(tmp);
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java
index 03633e7910..0ec1051946 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java
@@ -262,8 +262,8 @@ public R visit(final BooleanLiteralExpr n, final A arg) {
@Override
public R visit(final BreakStmt n, final A arg) {
R result;
- if (n.getLabel().isPresent()) {
- result = n.getLabel().get().accept(this, arg);
+ if (n.getValue().isPresent()) {
+ result = n.getValue().get().accept(this, arg);
if (result != null)
return result;
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/HashCodeVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/HashCodeVisitor.java
index 77e0fa9771..a5c2b01d91 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/HashCodeVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/HashCodeVisitor.java
@@ -99,7 +99,7 @@ public Integer visit(final BooleanLiteralExpr n, final Void arg) {
}
public Integer visit(final BreakStmt n, final Void arg) {
- return (n.getLabel().isPresent() ? n.getLabel().get().accept(this, arg) : 0) * 31 + (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
+ return (n.getValue().isPresent() ? n.getValue().get().accept(this, arg) : 0) * 31 + (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
}
public Integer visit(final CastExpr n, final Void arg) {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitor.java
index 8c990e9dcb..5d61f75d26 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitor.java
@@ -180,9 +180,9 @@ public Visitable visit(final BooleanLiteralExpr n, final A arg) {
@Override
public Visitable visit(final BreakStmt n, final A arg) {
- SimpleName label = n.getLabel().map(s -> (SimpleName) s.accept(this, arg)).orElse(null);
+ Expression value = n.getValue().map(s -> (Expression) s.accept(this, arg)).orElse(null);
Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null);
- n.setLabel(label);
+ n.setValue(value);
n.setComment(comment);
return n;
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentEqualsVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentEqualsVisitor.java
index 5b2a46588f..f39915804e 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentEqualsVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentEqualsVisitor.java
@@ -802,7 +802,7 @@ public Boolean visit(final SwitchEntryStmt n, final Visitable arg) {
@Override
public Boolean visit(final BreakStmt n, final Visitable arg) {
final BreakStmt n2 = (BreakStmt) arg;
- if (!nodeEquals(n.getLabel(), n2.getLabel()))
+ if (!nodeEquals(n.getValue(), n2.getValue()))
return false;
return true;
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentHashCodeVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentHashCodeVisitor.java
index 699db416a7..36727cea97 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentHashCodeVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentHashCodeVisitor.java
@@ -91,7 +91,7 @@ public Integer visit(final BooleanLiteralExpr n, final Void arg) {
}
public Integer visit(final BreakStmt n, final Void arg) {
- return (n.getLabel().isPresent() ? n.getLabel().get().accept(this, arg) : 0);
+ return (n.getValue().isPresent() ? n.getValue().get().accept(this, arg) : 0);
}
public Integer visit(final CastExpr n, final Void arg) {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java
index 0958549db8..692bcf62b5 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java
@@ -117,7 +117,7 @@ public void visit(final BooleanLiteralExpr n, final A arg) {
@Override
public void visit(final BreakStmt n, final A arg) {
- n.getLabel().ifPresent(l -> l.accept(this, arg));
+ n.getValue().ifPresent(l -> l.accept(this, arg));
n.getComment().ifPresent(l -> l.accept(this, arg));
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/BreakStmtMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/BreakStmtMetaModel.java
index 39f7232593..394716c65e 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/BreakStmtMetaModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/BreakStmtMetaModel.java
@@ -8,5 +8,5 @@ public class BreakStmtMetaModel extends StatementMetaModel {
super(superBaseNodeMetaModel, com.github.javaparser.ast.stmt.BreakStmt.class, "BreakStmt", "com.github.javaparser.ast.stmt", false, false);
}
- public PropertyMetaModel labelPropertyMetaModel;
+ public PropertyMetaModel valuePropertyMetaModel;
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java
index b69fd33ce5..a16ac495b1 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java
@@ -178,7 +178,7 @@ private static void initializeConstructorParameters() {
assertStmtMetaModel.getConstructorParameters().add(assertStmtMetaModel.checkPropertyMetaModel);
assertStmtMetaModel.getConstructorParameters().add(assertStmtMetaModel.messagePropertyMetaModel);
blockStmtMetaModel.getConstructorParameters().add(blockStmtMetaModel.statementsPropertyMetaModel);
- breakStmtMetaModel.getConstructorParameters().add(breakStmtMetaModel.labelPropertyMetaModel);
+ breakStmtMetaModel.getConstructorParameters().add(breakStmtMetaModel.valuePropertyMetaModel);
catchClauseMetaModel.getConstructorParameters().add(catchClauseMetaModel.parameterPropertyMetaModel);
catchClauseMetaModel.getConstructorParameters().add(catchClauseMetaModel.bodyPropertyMetaModel);
continueStmtMetaModel.getConstructorParameters().add(continueStmtMetaModel.labelPropertyMetaModel);
@@ -624,8 +624,8 @@ private static void initializePropertyMetaModels() {
assertStmtMetaModel.getDeclaredPropertyMetaModels().add(assertStmtMetaModel.messagePropertyMetaModel);
blockStmtMetaModel.statementsPropertyMetaModel = new PropertyMetaModel(blockStmtMetaModel, "statements", com.github.javaparser.ast.stmt.Statement.class, Optional.of(statementMetaModel), false, false, true, false);
blockStmtMetaModel.getDeclaredPropertyMetaModels().add(blockStmtMetaModel.statementsPropertyMetaModel);
- breakStmtMetaModel.labelPropertyMetaModel = new PropertyMetaModel(breakStmtMetaModel, "label", com.github.javaparser.ast.expr.SimpleName.class, Optional.of(simpleNameMetaModel), true, false, false, false);
- breakStmtMetaModel.getDeclaredPropertyMetaModels().add(breakStmtMetaModel.labelPropertyMetaModel);
+ breakStmtMetaModel.valuePropertyMetaModel = new PropertyMetaModel(breakStmtMetaModel, "value", com.github.javaparser.ast.expr.Expression.class, Optional.of(expressionMetaModel), true, false, false, false);
+ breakStmtMetaModel.getDeclaredPropertyMetaModels().add(breakStmtMetaModel.valuePropertyMetaModel);
catchClauseMetaModel.bodyPropertyMetaModel = new PropertyMetaModel(catchClauseMetaModel, "body", com.github.javaparser.ast.stmt.BlockStmt.class, Optional.of(blockStmtMetaModel), false, false, false, false);
catchClauseMetaModel.getDeclaredPropertyMetaModels().add(catchClauseMetaModel.bodyPropertyMetaModel);
catchClauseMetaModel.parameterPropertyMetaModel = new PropertyMetaModel(catchClauseMetaModel, "parameter", com.github.javaparser.ast.body.Parameter.class, Optional.of(parameterMetaModel), false, false, false, false);
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java b/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java
index e42410981d..d891418dd4 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java
@@ -534,7 +534,7 @@ private static CsmElement typeArguments() {
concreteSyntaxModelByClass.put(BreakStmt.class, sequence(
comment(),
token(GeneratedJavaParserConstants.BREAK),
- conditional(ObservableProperty.LABEL, IS_PRESENT, sequence(space(), child(ObservableProperty.LABEL))),
+ conditional(VALUE, IS_PRESENT, sequence(space(), child(VALUE))),
semicolon()
));
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java
index bc3f904d97..946dd2a6be 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java
@@ -1123,7 +1123,10 @@ public void visit(final SwitchEntryStmt n, final Void arg) {
public void visit(final BreakStmt n, final Void arg) {
printComment(n.getComment(), arg);
printer.print("break");
- n.getLabel().ifPresent(l -> printer.print(" ").print(l.getIdentifier()));
+ n.getValue().ifPresent(value -> {
+ printer.print(" ");
+ value.accept(this, arg);
+ });
printer.print(";");
}
diff --git a/javaparser-core/src/main/javacc/java.jj b/javaparser-core/src/main/javacc/java.jj
index b10437c0c3..e2b130dc8a 100644
--- a/javaparser-core/src/main/javacc/java.jj
+++ b/javaparser-core/src/main/javacc/java.jj
@@ -2369,12 +2369,12 @@ NodeList ForUpdate():
BreakStmt BreakStatement():
{
- SimpleName label = null;
+ Expression value = null;
JavaToken begin;
}
{
- "break" {begin=token();} [ label = SimpleName() ] ";"
- { return new BreakStmt(range(begin, token()), label); }
+ "break" {begin=token();} [ value = Expression() ] ";"
+ { return new BreakStmt(range(begin, token()), value); }
}
ContinueStmt ContinueStatement():