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():