toMatchAllPatternExpr() {
+ return Optional.of(this);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public void ifMatchAllPatternExpr(Consumer action) {
+ action.accept(this);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
+ public boolean remove(Node node) {
+ if (node == null) {
+ return false;
+ }
+ for (int i = 0; i < modifiers.size(); i++) {
+ if (modifiers.get(i) == node) {
+ modifiers.remove(i);
+ return true;
+ }
+ }
+ return super.remove(node);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
+ public boolean replace(Node node, Node replacementNode) {
+ if (node == null) {
+ return false;
+ }
+ for (int i = 0; i < modifiers.size(); i++) {
+ if (modifiers.get(i) == node) {
+ modifiers.set(i, (Modifier) replacementNode);
+ return true;
+ }
+ }
+ return super.replace(node, replacementNode);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
+ public MatchAllPatternExpr clone() {
+ return (MatchAllPatternExpr) accept(new CloneVisitor(), null);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
+ public MatchAllPatternExprMetaModel getMetaModel() {
+ return JavaParserMetaModel.matchAllPatternExprMetaModel;
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/MethodReferenceExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/MethodReferenceExpr.java
index 6ba7188472..04d276e539 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/MethodReferenceExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/MethodReferenceExpr.java
@@ -249,4 +249,22 @@ public ResolvedMethodDeclaration resolve() {
public boolean isPolyExpression() {
return true;
}
+
+ /*
+ * https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.13
+ * Workaround to handle cases where scope should have been parsed as a primary expression.
+ * A change to the grammar should lead to the removal of this method.
+ * This is the case, for example, in the following reference expression âfoo:convertâ,
+ * where foo is an instance of the Foo class and convert is a method of the Foo class.
+ * foo should not be considered a type expression as String could be in the expression String::length.
+ * This method compares the scope (e.g. foo) with the resolved type, e.g. Foo.
+ * If they are different, we consider it to be a primary expression.
+ */
+ public boolean isScopePrimaryExpr() {
+ return !getScope()
+ .calculateResolvedType()
+ .erasure()
+ .describe()
+ .endsWith(getScope().toString());
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/PatternExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/PatternExpr.java
index f3662652df..fd9cbeb7c1 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/PatternExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/PatternExpr.java
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
- * Copyright (C) 2011, 2013-2024 The JavaParser Team.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
*
* This file is part of JavaParser.
*
@@ -30,48 +29,63 @@
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.type.Type;
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.PatternExprMetaModel;
import java.util.Optional;
import java.util.function.Consumer;
/**
- * Pattern Matching in Java
- *
- * Java 1.0 to 13
- * Not available.
- *
- * Java 14
- * Java 14 introduced TypePatterns with simple pattern matching in {@code instanceof} expressions.
- * @see com.github.javaparser.ast.expr.TypePatternExpr
- * Java 21
- * In Java 21, support for pattern matching was extended to switch expressions and {@code Record Patterns}
- * were introduced. Since {@code Record Patterns} and {@code TypePatterns} can be used interchangeably, the
- * {@code PatternExpr} class is used as a common parent for both in the JavaParser AST.
- *
- * JDK21 Grammar
- *
- * Pattern:
- * TypePattern
- * RecordPattern
- * TypePattern:
- * LocalVariableDeclaration
- * RecordPattern:
- * ReferenceType ( [PatternList] )
- * PatternList:
- * Pattern {, Pattern }
- *
- * @author Johannes Coetzee
- *
- * @see JEP305: https://bugs.openjdk.java.net/browse/JDK-8181287
- * @see https://docs.oracle.com/javase/specs/jls/se11/html/jls-15.html#jls-15.20
+ * PatternExpr serves as the abstract base class for typed pattern expressions. These patterns may be used as top-level
+ * patterns in instanceof expressions and switch labels.
*/
-public abstract class PatternExpr extends Expression implements NodeWithType {
+public abstract class PatternExpr extends ComponentPatternExpr implements NodeWithType {
+ /**
+ * The types of record patters and top-level type patterns must be reference types, but nested type patterns
+ * can also have primitive types.
+ */
private Type type;
@AllFieldsConstructor
- public PatternExpr(final Type type) {}
+ public PatternExpr(Type type) {}
+
+ /**
+ * This constructor is used by the parser and is considered private.
+ */
+ @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
+ public PatternExpr(TokenRange tokenRange, Type type) {
+ super(tokenRange);
+ setType(type);
+ customInitialization();
+ }
+
+ @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
+ public Type getType() {
+ return type;
+ }
+
+ @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
+ public PatternExpr setType(final Type type) {
+ assertNotNull(type);
+ if (type == this.type) {
+ return this;
+ }
+ notifyPropertyChange(ObservableProperty.TYPE, this.type, type);
+ if (this.type != null) this.type.setParentNode(null);
+ this.type = type;
+ setAsParentNodeOf(type);
+ return this;
+ }
+
+ @Override
+ public R accept(GenericVisitor v, A arg) {
+ return null;
+ }
+
+ @Override
+ public void accept(VoidVisitor v, A arg) {}
@Override
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
@@ -97,49 +111,6 @@ public void ifPatternExpr(Consumer action) {
action.accept(this);
}
- @Override
- @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
- public PatternExpr clone() {
- return (PatternExpr) accept(new CloneVisitor(), null);
- }
-
- @Override
- @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
- public PatternExprMetaModel getMetaModel() {
- return JavaParserMetaModel.patternExprMetaModel;
- }
-
- /**
- * This constructor is used by the parser and is considered private.
- */
- @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
- public PatternExpr(TokenRange tokenRange) {
- super(tokenRange);
- customInitialization();
- }
-
- @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
- public PatternExpr setType(final Type type) {
- assertNotNull(type);
- if (type == this.type) {
- return this;
- }
- notifyPropertyChange(ObservableProperty.TYPE, this.type, type);
- if (this.type != null) this.type.setParentNode(null);
- this.type = type;
- setAsParentNodeOf(type);
- return this;
- }
-
- /**
- * The types of record patters and top-level type patterns must be reference types, but nested type patterns
- * can also have primitive types.
- */
- @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
- public Type getType() {
- return type;
- }
-
@Override
@Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
public boolean replace(Node node, Node replacementNode) {
@@ -153,13 +124,15 @@ public boolean replace(Node node, Node replacementNode) {
return super.replace(node, replacementNode);
}
- /**
- * This constructor is used by the parser and is considered private.
- */
- @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
- public PatternExpr(TokenRange tokenRange, Type type) {
- super(tokenRange);
- setType(type);
- customInitialization();
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
+ public PatternExpr clone() {
+ return (PatternExpr) accept(new CloneVisitor(), null);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
+ public PatternExprMetaModel getMetaModel() {
+ return JavaParserMetaModel.patternExprMetaModel;
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/RecordPatternExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/RecordPatternExpr.java
index 429889e350..526a5d310a 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/RecordPatternExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/RecordPatternExpr.java
@@ -72,7 +72,7 @@
* }
*
*
- * @see com.github.javaparser.ast.expr.PatternExpr
+ * @see ComponentPatternExpr
* @see com.github.javaparser.ast.expr.TypePatternExpr
* @see JEP 440: Record Patterns
*/
@@ -80,7 +80,7 @@ public class RecordPatternExpr extends PatternExpr implements NodeWithFinalModif
private NodeList modifiers;
- private NodeList patternList;
+ private NodeList patternList;
public RecordPatternExpr() {
this(new NodeList<>(), new ClassOrInterfaceType(), new NodeList<>());
@@ -88,7 +88,7 @@ public RecordPatternExpr() {
@AllFieldsConstructor
public RecordPatternExpr(
- final NodeList modifiers, final Type type, final NodeList patternList) {
+ final NodeList modifiers, final Type type, final NodeList patternList) {
this(null, modifiers, type, patternList);
}
@@ -156,12 +156,12 @@ public void ifRecordPatternExpr(Consumer action) {
}
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
- public NodeList getPatternList() {
+ public NodeList getPatternList() {
return patternList;
}
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
- public RecordPatternExpr setPatternList(final NodeList patternList) {
+ public RecordPatternExpr setPatternList(final NodeList patternList) {
assertNotNull(patternList);
if (patternList == this.patternList) {
return this;
@@ -208,7 +208,7 @@ public boolean replace(Node node, Node replacementNode) {
}
for (int i = 0; i < patternList.size(); i++) {
if (patternList.get(i) == node) {
- patternList.set(i, (PatternExpr) replacementNode);
+ patternList.set(i, (ComponentPatternExpr) replacementNode);
return true;
}
}
@@ -232,7 +232,10 @@ public RecordPatternExprMetaModel getMetaModel() {
*/
@Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
public RecordPatternExpr(
- TokenRange tokenRange, NodeList modifiers, Type type, NodeList patternList) {
+ TokenRange tokenRange,
+ NodeList modifiers,
+ Type type,
+ NodeList patternList) {
super(tokenRange, type);
setModifiers(modifiers);
setPatternList(patternList);
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithJavadoc.java b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithJavadoc.java
index 7c8014cd92..f056cc76bc 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithJavadoc.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithJavadoc.java
@@ -23,6 +23,8 @@
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.comments.Comment;
import com.github.javaparser.ast.comments.JavadocComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.javadoc.Javadoc;
import java.util.Optional;
@@ -56,13 +58,20 @@ default Optional getJavadoc() {
}
/**
- * Use this to store additional information to this node.
- *
- * @param comment to be set
+ * Set a JavadocComment for this node
*/
@SuppressWarnings("unchecked")
+ default N setJavadocComment(String comment, boolean isMarkdownComment) {
+ JavadocComment javadocComment =
+ isMarkdownComment ? new MarkdownComment(comment) : new TraditionalJavadocComment(comment);
+ return setJavadocComment(javadocComment);
+ }
+
+ /**
+ * Set a JavadocComment for this node
+ */
default N setJavadocComment(String comment) {
- return setJavadocComment(new JavadocComment(comment));
+ return setJavadocComment(comment, false);
}
default N setJavadocComment(JavadocComment comment) {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java
index a944ec3ae5..37d402c6bd 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java
@@ -170,11 +170,11 @@ default boolean hasParametersOfType(String... paramTypes) {
* @return {@code true} if all parameters match one by one, in the given order.
*/
default boolean hasParametersOfType(Class>... paramTypes) {
- return getParameters().stream()
- . // if p.getType() is a class or interface type, we want to consider its erasure, i.e., if the
- // parameter
- // is "List", we want to consider it as "List", so we need to call getName()
- map(p -> p.getType()
+ return // if p.getType() is a class or interface type, we want to consider its erasure, i.e., if the
+ // parameter
+ // is "List", we want to consider it as "List", so we need to call getName()
+ getParameters().stream()
+ .map(p -> p.getType()
.toClassOrInterfaceType()
.map(NodeWithSimpleName::getNameAsString)
.orElseGet(() -> p.getType().asString()))
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/observer/ObservableProperty.java b/javaparser-core/src/main/java/com/github/javaparser/ast/observer/ObservableProperty.java
index 353f76b8cd..d0b00d9cc8 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/observer/ObservableProperty.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/observer/ObservableProperty.java
@@ -44,6 +44,7 @@ public enum ObservableProperty {
CLASS_BODY(Type.MULTIPLE_REFERENCE),
CLASS_DECLARATION(Type.SINGLE_REFERENCE),
COMMENT(Type.SINGLE_REFERENCE),
+ COMPACT(Type.SINGLE_ATTRIBUTE),
COMPARE(Type.SINGLE_REFERENCE),
COMPONENT_TYPE(Type.SINGLE_REFERENCE),
CONDITION(Type.SINGLE_REFERENCE),
@@ -81,7 +82,7 @@ public enum ObservableProperty {
MEMBER_VALUE(Type.SINGLE_REFERENCE),
MESSAGE(Type.SINGLE_REFERENCE),
MODIFIERS(Type.MULTIPLE_REFERENCE),
- MODULE(Type.SINGLE_REFERENCE),
+ MODULE(Type.SINGLE_ATTRIBUTE),
MODULE_NAMES(Type.MULTIPLE_REFERENCE),
NAME(Type.SINGLE_REFERENCE),
OPEN(Type.SINGLE_ATTRIBUTE),
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_0Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_0Validator.java
index 21588c57ed..dc589d3ef0 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_0Validator.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_0Validator.java
@@ -27,6 +27,7 @@
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.ModuleDeclaration;
+import com.github.javaparser.ast.nodeTypes.NodeWithIdentifier;
import com.github.javaparser.ast.nodeTypes.NodeWithTypeArguments;
import com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters;
import com.github.javaparser.ast.stmt.*;
@@ -53,6 +54,18 @@ public class Java1_0Validator extends Validators {
new UpgradeJavaMessage(
"'assert' keyword is not supported.", ParserConfiguration.LanguageLevel.JAVA_1_4)));
+ final Validator noAssertIdentifer = new TreeVisitorValidator((node, reporter) -> {
+ if (node instanceof NodeWithIdentifier
+ && ((NodeWithIdentifier) node).getIdentifier().equals("assert")) {
+ reporter.report(
+ node,
+ new UpgradeJavaMessage(
+ "'assert' identifier is not supported.",
+ ParserConfiguration.LanguageLevel.JAVA_1_4,
+ false));
+ }
+ });
+
final Validator noInnerClasses = new SimpleValidator<>(
ClassOrInterfaceDeclaration.class,
n -> !n.isTopLevelType(),
@@ -245,7 +258,7 @@ public class Java1_0Validator extends Validators {
});
final Validator noSwitchPatterns = new SingleNodeTypeValidator<>(SwitchEntry.class, (n, reporter) -> {
- if (n.getGuard().isPresent() || n.getLabels().stream().anyMatch(expr -> expr.isPatternExpr())) {
+ if (n.getGuard().isPresent() || n.getLabels().stream().anyMatch(expr -> expr.isComponentPatternExpr())) {
reporter.report(
n,
new UpgradeJavaMessage(
@@ -262,6 +275,36 @@ public class Java1_0Validator extends Validators {
}
});
+ final Validator noModuleImports = new TreeVisitorValidator((node, reporter) -> {
+ if (node instanceof ImportDeclaration && ((ImportDeclaration) node).isModule()) {
+ reporter.report(
+ node,
+ new UpgradeJavaMessage(
+ "Module imports are not supported", ParserConfiguration.LanguageLevel.JAVA_25));
+ }
+ });
+
+ final Validator explicitConstructorInvocationMustBeFirstStatement =
+ new TreeVisitorValidator((Node node, ProblemReporter reporter) -> {
+ // Only validate this for ExplicitConstructorInvocationStmts that appear as a child of a block node.
+ // This will
+ // be the case for all such statements that are parsed as part of a compiling source file, but may not
+ // always
+ // be the case for code snippets being parsed.
+ if (node instanceof ExplicitConstructorInvocationStmt
+ && node.getParentNode().isPresent()) {
+ Node parent = node.getParentNode().get();
+ if (parent instanceof BlockStmt
+ && ((BlockStmt) parent).getStatements().indexOf(node) > 0) {
+ reporter.report(
+ node,
+ new UpgradeJavaMessage(
+ "Flexible constructor bodies are not supported",
+ ParserConfiguration.LanguageLevel.JAVA_25));
+ }
+ }
+ });
+
public Java1_0Validator() {
super(new CommonValidators());
add(modifiersWithoutStrictfpAndDefaultAndStaticInterfaceMethodsAndPrivateInterfaceMethods);
@@ -291,5 +334,7 @@ public Java1_0Validator() {
add(noSwitchNullDefault);
add(noSwitchPatterns);
add(noRecordPatterns);
+ add(noModuleImports);
+ add(explicitConstructorInvocationMustBeFirstStatement);
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_4Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_4Validator.java
index c95e33b4d4..dba337d33e 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_4Validator.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java1_4Validator.java
@@ -28,5 +28,6 @@ public class Java1_4Validator extends Java1_3Validator {
public Java1_4Validator() {
super();
remove(noAssertKeyword);
+ add(noAssertIdentifer);
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java22Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java22Validator.java
new file mode 100755
index 0000000000..aa6d0b7f7c
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java22Validator.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.language_level_validations;
+
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.expr.*;
+import com.github.javaparser.ast.stmt.CatchClause;
+import com.github.javaparser.ast.stmt.ForStmt;
+import com.github.javaparser.ast.validator.ProblemReporter;
+import com.github.javaparser.ast.validator.SingleNodeTypeValidator;
+import com.github.javaparser.ast.validator.Validator;
+import com.github.javaparser.resolution.Navigator;
+
+/**
+ * This validator validates according to Java 22 syntax rules.
+ *
+ * @see https://openjdk.java.net/projects/jdk/22/
+ */
+public class Java22Validator extends Java21Validator {
+
+ final Validator unnamedVarOnlyWhereAllowedByJep456 =
+ new SingleNodeTypeValidator<>(SimpleName.class, (name, reporter) -> {
+ if (!name.getIdentifier().equals("_")) {
+ return;
+ }
+ if (reportNoParent(name, reporter)) {
+ return;
+ }
+ Node parentNode = name.getParentNode().get();
+ if (parentNode instanceof VariableDeclarator || parentNode instanceof TypePatternExpr) {
+ return;
+ }
+ if (parentNode instanceof Parameter) {
+ Parameter parameter = (Parameter) parentNode;
+ if (reportNoParent(parameter, reporter)) {
+ return;
+ }
+ Node grandParent = parameter.getParentNode().get();
+ if (grandParent instanceof CatchClause || grandParent instanceof LambdaExpr) {
+ return;
+ }
+ }
+ try {
+ ForStmt enclosingFor =
+ (ForStmt) Navigator.demandParentNode(name, ancestor -> ancestor instanceof ForStmt);
+ if (enclosingFor.getCompare().isPresent()
+ && enclosingFor.getCompare().get().containsWithinRange(name)) {
+ // In a for compare, so now check that it's the LHS of an assignment
+ AssignExpr enclosingAssign = (AssignExpr)
+ Navigator.demandParentNode(name, ancestor -> ancestor instanceof AssignExpr);
+ if (enclosingAssign.getTarget().containsWithinRange(name)) {
+ return;
+ }
+ }
+ } catch (IllegalStateException e) {
+ // Didn't find a ForStmt ancestor, so the "_" identifier should not be allowed here.
+ }
+ reporter.report(name, "Unnamed variables only supported in cases described by JEP456");
+ });
+
+ final Validator matchAllPatternNotTopLevel =
+ new SingleNodeTypeValidator<>(MatchAllPatternExpr.class, (patternExpr, reporter) -> {
+ if (!patternExpr.getParentNode().isPresent()
+ || !(patternExpr.getParentNode().get() instanceof PatternExpr)) {
+ reporter.report(patternExpr, "MatchAllPatternExpr cannot be used as a top-level pattern");
+ }
+ });
+
+ private boolean reportNoParent(Node node, ProblemReporter reporter) {
+ if (node.getParentNode().isPresent()) {
+ return false;
+ }
+ String className = node.getClass().getCanonicalName();
+ reporter.report(node, "Node of type " + className + " must have an AST parent");
+ return true;
+ }
+
+ public Java22Validator() {
+ super();
+ remove(underscoreKeywordValidator);
+ add(unnamedVarOnlyWhereAllowedByJep456);
+ add(matchAllPatternNotTopLevel);
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java23Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java23Validator.java
new file mode 100644
index 0000000000..06fb364342
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java23Validator.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.language_level_validations;
+
+/**
+ * Validator for Java 23 language features.
+ * Java 23 does not introduce new syntax changes that affect parsing,
+ * so this validator simply extends Java 22.
+ */
+public class Java23Validator extends Java22Validator {
+
+ public Java23Validator() {
+ super();
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java24Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java24Validator.java
new file mode 100644
index 0000000000..87e96e2ec9
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java24Validator.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.language_level_validations;
+
+/**
+ * Validator for Java 24 language features.
+ * Java 24 does not introduce new syntax changes that affect parsing,
+ * so this validator simply extends Java 23.
+ */
+public class Java24Validator extends Java23Validator {
+
+ public Java24Validator() {
+ super();
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java25Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java25Validator.java
new file mode 100644
index 0000000000..be6a1f9c72
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/Java25Validator.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.language_level_validations;
+
+/**
+ * Validator for Java 25 language features:
+ * - Module imports {@see https://openjdk.org/jeps/511}
+ * - Compact class declarations (WIP) {@see https://openjdk.org/jeps/512}
+ * - Flexible constructor bodies (WIP) {@see https://openjdk.org/jeps/513}
+ */
+public class Java25Validator extends Java24Validator {
+
+ public Java25Validator() {
+ super();
+ remove(noModuleImports);
+ remove(explicitConstructorInvocationMustBeFirstStatement);
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/UpgradeJavaMessage.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/UpgradeJavaMessage.java
index b6c21d63d0..f48a520369 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/UpgradeJavaMessage.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/language_level_validations/UpgradeJavaMessage.java
@@ -41,20 +41,34 @@ public final class UpgradeJavaMessage {
*/
private final ParserConfiguration.LanguageLevel level;
+ /**
+ * A language level upgrade is needed (default: true)
+ */
+ private final boolean upgradeNeeded;
+
/**
* Contructor.
* @param reason The reason why the language level must be upgraded.
* @param level The language level that must be configured.
*/
UpgradeJavaMessage(final String reason, final ParserConfiguration.LanguageLevel level) {
+ this(reason, level, true);
+ }
+
+ UpgradeJavaMessage(final String reason, final ParserConfiguration.LanguageLevel level, boolean upgradeNeeded) {
this.reason = reason;
this.level = level;
+ this.upgradeNeeded = upgradeNeeded;
}
@Override
public String toString() {
return String.format(
- "%s Pay attention that this feature is supported starting from '%s' language level. If you need that feature the language level must be configured in the configuration before parsing the source files.",
- this.reason, this.level.toString());
+ upgradeNeeded
+ ? "%s Pay attention that this feature is supported starting from '%s' language level."
+ : "%s Pay attention that this feature is no longer supported since '%s' language level.",
+ this.reason,
+ this.level.toString())
+ + " If you need that feature the language level must be configured in the configuration before parsing the source files.";
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java22PostProcessor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java22PostProcessor.java
new file mode 100755
index 0000000000..2de4ce912f
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java22PostProcessor.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2011, 2013-2024 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.postprocessors;
+
+/**
+ * Processes the generic AST into a Java 22 AST and validates it.
+ */
+public class Java22PostProcessor extends Java21PostProcessor {}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java23PostProcessor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java23PostProcessor.java
new file mode 100644
index 0000000000..6eb348a3ec
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java23PostProcessor.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.postprocessors;
+
+/**
+ * Post-processor for Java 23 language features.
+ * Java 23 does not introduce new syntax changes requiring post-processing.
+ */
+public class Java23PostProcessor extends Java22PostProcessor {}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java24PostProcessor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java24PostProcessor.java
new file mode 100644
index 0000000000..c5c87fc7eb
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java24PostProcessor.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.postprocessors;
+
+/**
+ * Post-processor for Java 24 language features.
+ * Java 24 does not introduce new syntax changes requiring post-processing.
+ */
+public class Java24PostProcessor extends Java23PostProcessor {}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java25PostProcessor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java25PostProcessor.java
new file mode 100644
index 0000000000..a828f63d75
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/postprocessors/Java25PostProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2025 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.ast.validator.postprocessors;
+
+/**
+ * Post-processor for Java 25 language features.
+ */
+public class Java25PostProcessor extends Java24PostProcessor {}
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 7885d6df6f..e523b21f67 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
@@ -24,8 +24,9 @@
import com.github.javaparser.ast.body.*;
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.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -130,7 +131,8 @@ public Visitable visit(final ClassOrInterfaceDeclaration n, final Object arg) {
extendedTypes,
implementedTypes,
permittedTypes,
- members);
+ members,
+ n.isCompact());
r.setComment(comment);
n.getOrphanComments().stream().map(Comment::clone).forEach(r::addOrphanComment);
copyData(n, r);
@@ -311,9 +313,10 @@ public Visitable visit(final InitializerDeclaration n, final Object arg) {
}
@Override
- public Visitable visit(final JavadocComment n, final Object arg) {
+ public Visitable visit(final TraditionalJavadocComment n, final Object arg) {
Comment comment = cloneNode(n.getComment(), arg);
- JavadocComment r = new JavadocComment(n.getTokenRange().orElse(null), n.getContent());
+ TraditionalJavadocComment r =
+ new TraditionalJavadocComment(n.getTokenRange().orElse(null), n.getContent());
r.setComment(comment);
n.getOrphanComments().stream().map(Comment::clone).forEach(r::addOrphanComment);
copyData(n, r);
@@ -1108,7 +1111,8 @@ public Visitable visit(NodeList n, Object arg) {
public Node visit(final ImportDeclaration n, final Object arg) {
Name name = cloneNode(n.getName(), arg);
Comment comment = cloneNode(n.getComment(), arg);
- ImportDeclaration r = new ImportDeclaration(n.getTokenRange().orElse(null), name, n.isStatic(), n.isAsterisk());
+ ImportDeclaration r =
+ new ImportDeclaration(n.getTokenRange().orElse(null), name, n.isStatic(), n.isAsterisk(), n.isModule());
r.setComment(comment);
n.getOrphanComments().stream().map(Comment::clone).forEach(r::addOrphanComment);
copyData(n, r);
@@ -1364,7 +1368,7 @@ public Visitable visit(final CompactConstructorDeclaration n, final Object arg)
@Override
public Visitable visit(final RecordPatternExpr n, final Object arg) {
NodeList modifiers = cloneList(n.getModifiers(), arg);
- NodeList patternList = cloneList(n.getPatternList(), arg);
+ NodeList patternList = cloneList(n.getPatternList(), arg);
Type type = cloneNode(n.getType(), arg);
Comment comment = cloneNode(n.getComment(), arg);
RecordPatternExpr r = new RecordPatternExpr(n.getTokenRange().orElse(null), modifiers, type, patternList);
@@ -1373,4 +1377,25 @@ public Visitable visit(final RecordPatternExpr n, final Object arg) {
copyData(n, r);
return r;
}
+
+ @Override
+ public Visitable visit(final MatchAllPatternExpr n, final Object arg) {
+ NodeList modifiers = cloneList(n.getModifiers(), arg);
+ Comment comment = cloneNode(n.getComment(), arg);
+ MatchAllPatternExpr r = new MatchAllPatternExpr(n.getTokenRange().orElse(null), modifiers);
+ r.setComment(comment);
+ n.getOrphanComments().stream().map(Comment::clone).forEach(r::addOrphanComment);
+ copyData(n, r);
+ return r;
+ }
+
+ @Override
+ public Visitable visit(final MarkdownComment n, final Object arg) {
+ Comment comment = cloneNode(n.getComment(), arg);
+ MarkdownComment r = new MarkdownComment(n.getTokenRange().orElse(null), n.getContent());
+ r.setComment(comment);
+ n.getOrphanComments().stream().map(Comment::clone).forEach(r::addOrphanComment);
+ copyData(n, r);
+ 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 8b08e8e444..1f2b3b43f8 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -187,6 +188,7 @@ public Boolean visit(final ClassOrInterfaceDeclaration n, final Visitable arg) {
final ClassOrInterfaceDeclaration n2 = (ClassOrInterfaceDeclaration) arg;
if (!nodesEquals(n.getExtendedTypes(), n2.getExtendedTypes())) return false;
if (!nodesEquals(n.getImplementedTypes(), n2.getImplementedTypes())) return false;
+ if (!objEquals(n.isCompact(), n2.isCompact())) return false;
if (!objEquals(n.isInterface(), n2.isInterface())) return false;
if (!nodesEquals(n.getPermittedTypes(), n2.getPermittedTypes())) return false;
if (!nodesEquals(n.getTypeParameters(), n2.getTypeParameters())) return false;
@@ -320,8 +322,8 @@ public Boolean visit(final InitializerDeclaration n, final Visitable arg) {
}
@Override
- public Boolean visit(final JavadocComment n, final Visitable arg) {
- final JavadocComment n2 = (JavadocComment) arg;
+ public Boolean visit(final TraditionalJavadocComment n, final Visitable arg) {
+ final TraditionalJavadocComment n2 = (TraditionalJavadocComment) arg;
if (!objEquals(n.getContent(), n2.getContent())) return false;
if (!nodeEquals(n.getComment(), n2.getComment())) return false;
return true;
@@ -916,6 +918,7 @@ public Boolean visit(final TypeExpr n, final Visitable arg) {
public Boolean visit(final ImportDeclaration n, final Visitable arg) {
final ImportDeclaration n2 = (ImportDeclaration) arg;
if (!objEquals(n.isAsterisk(), n2.isAsterisk())) return false;
+ if (!objEquals(n.isModule(), n2.isModule())) return false;
if (!objEquals(n.isStatic(), n2.isStatic())) return false;
if (!nodeEquals(n.getName(), n2.getName())) return false;
if (!nodeEquals(n.getComment(), n2.getComment())) return false;
@@ -1087,4 +1090,20 @@ public Boolean visit(final RecordPatternExpr n, final Visitable arg) {
if (!nodeEquals(n.getComment(), n2.getComment())) return false;
return true;
}
+
+ @Override
+ public Boolean visit(final MatchAllPatternExpr n, final Visitable arg) {
+ final MatchAllPatternExpr n2 = (MatchAllPatternExpr) arg;
+ if (!nodesEquals(n.getModifiers(), n2.getModifiers())) return false;
+ if (!nodeEquals(n.getComment(), n2.getComment())) return false;
+ return true;
+ }
+
+ @Override
+ public Boolean visit(final MarkdownComment n, final Visitable arg) {
+ final MarkdownComment n2 = (MarkdownComment) arg;
+ if (!objEquals(n.getContent(), n2.getContent())) return false;
+ if (!nodeEquals(n.getComment(), n2.getComment())) return false;
+ return true;
+ }
}
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 3cf33ea4b8..325cf6d839 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -915,7 +916,7 @@ public List visit(final IntersectionType n, final A arg) {
}
@Override
- public List visit(final JavadocComment n, final A arg) {
+ public List visit(final TraditionalJavadocComment n, final A arg) {
List result = new ArrayList<>();
List tmp;
if (n.getComment().isPresent()) {
@@ -2028,4 +2029,30 @@ public List visit(final RecordPatternExpr n, final A arg) {
}
return result;
}
+
+ @Override
+ public List visit(final MatchAllPatternExpr n, final A arg) {
+ List result = new ArrayList<>();
+ List tmp;
+ {
+ tmp = n.getModifiers().accept(this, arg);
+ if (tmp != null) result.addAll(tmp);
+ }
+ if (n.getComment().isPresent()) {
+ tmp = n.getComment().get().accept(this, arg);
+ if (tmp != null) result.addAll(tmp);
+ }
+ return result;
+ }
+
+ @Override
+ public List visit(final MarkdownComment n, final A arg) {
+ List result = new ArrayList<>();
+ List tmp;
+ if (n.getComment().isPresent()) {
+ tmp = n.getComment().get().accept(this, arg);
+ if (tmp != null) result.addAll(tmp);
+ }
+ return result;
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java
index bef9b939be..59c105ea34 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -77,7 +78,7 @@ public interface GenericVisitor {
R visit(InitializerDeclaration n, A arg);
- R visit(JavadocComment n, A arg);
+ R visit(TraditionalJavadocComment n, A arg);
// - Type ----------------------------------------------
R visit(ClassOrInterfaceType n, A arg);
@@ -245,4 +246,8 @@ public interface GenericVisitor {
R visit(TypePatternExpr n, A arg);
R visit(RecordPatternExpr n, A arg);
+
+ R visit(MatchAllPatternExpr n, A arg);
+
+ R visit(MarkdownComment n, A arg);
}
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 4c8811c2c0..e251d11297 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -792,7 +793,7 @@ public R visit(final IntegerLiteralExpr n, final A arg) {
}
@Override
- public R visit(final JavadocComment n, final A arg) {
+ public R visit(final TraditionalJavadocComment n, final A arg) {
R result;
if (n.getComment().isPresent()) {
result = n.getComment().get().accept(this, arg);
@@ -1927,4 +1928,28 @@ public R visit(final RecordPatternExpr n, final A arg) {
}
return null;
}
+
+ @Override
+ public R visit(final MatchAllPatternExpr n, final A arg) {
+ R result;
+ {
+ result = n.getModifiers().accept(this, arg);
+ if (result != null) return result;
+ }
+ if (n.getComment().isPresent()) {
+ result = n.getComment().get().accept(this, arg);
+ if (result != null) return result;
+ }
+ return null;
+ }
+
+ @Override
+ public R visit(final MarkdownComment n, final A arg) {
+ R result;
+ if (n.getComment().isPresent()) {
+ result = n.getComment().get().accept(this, arg);
+ if (result != null) return result;
+ }
+ return null;
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorWithDefaults.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorWithDefaults.java
index 1e3d2d4d47..5953e9bf2c 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorWithDefaults.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorWithDefaults.java
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -241,7 +242,7 @@ public R visit(final IntegerLiteralExpr n, final A arg) {
}
@Override
- public R visit(final JavadocComment n, final A arg) {
+ public R visit(final TraditionalJavadocComment n, final A arg) {
return defaultAction(n, arg);
}
@@ -559,4 +560,14 @@ public R visit(final CompactConstructorDeclaration n, final A arg) {
public R visit(final RecordPatternExpr n, final A arg) {
return defaultAction(n, arg);
}
+
+ @Override
+ public R visit(final MatchAllPatternExpr n, final A arg) {
+ return defaultAction(n, arg);
+ }
+
+ @Override
+ public R visit(final MarkdownComment n, final A arg) {
+ return defaultAction(n, arg);
+ }
}
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 99823f7200..6b09e30ae7 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -159,6 +160,7 @@ public Integer visit(final ClassExpr n, final Void arg) {
public Integer visit(final ClassOrInterfaceDeclaration n, final Void arg) {
return (n.getExtendedTypes().accept(this, arg)) * 31
+ (n.getImplementedTypes().accept(this, arg)) * 31
+ + (n.isCompact() ? 1 : 0) * 31
+ (n.isInterface() ? 1 : 0) * 31
+ (n.getPermittedTypes().accept(this, arg)) * 31
+ (n.getTypeParameters().accept(this, arg)) * 31
@@ -313,6 +315,7 @@ public Integer visit(final IfStmt n, final Void arg) {
public Integer visit(final ImportDeclaration n, final Void arg) {
return (n.isAsterisk() ? 1 : 0) * 31
+ + (n.isModule() ? 1 : 0) * 31
+ (n.isStatic() ? 1 : 0) * 31
+ (n.getName().accept(this, arg)) * 31
+ (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
@@ -343,7 +346,7 @@ public Integer visit(final IntersectionType n, final Void arg) {
+ (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
}
- public Integer visit(final JavadocComment n, final Void arg) {
+ public Integer visit(final TraditionalJavadocComment n, final Void arg) {
return (n.getContent().hashCode()) * 31
+ (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
}
@@ -738,4 +741,16 @@ public Integer visit(final RecordPatternExpr n, final Void arg) {
+ (n.getType().accept(this, arg)) * 31
+ (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
}
+
+ @Override
+ public Integer visit(final MatchAllPatternExpr n, final Void arg) {
+ return (n.getModifiers().accept(this, arg)) * 31
+ + (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
+ }
+
+ @Override
+ public Integer visit(final MarkdownComment n, final Void arg) {
+ return (n.getContent().hashCode()) * 31
+ + (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
+ }
}
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 f288964b60..928a59eea6 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
@@ -27,8 +27,9 @@
import com.github.javaparser.ast.body.*;
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.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -607,7 +608,7 @@ public Visitable visit(final IntegerLiteralExpr n, final A arg) {
}
@Override
- public Visitable visit(final JavadocComment n, final A arg) {
+ public Visitable visit(final TraditionalJavadocComment n, final A arg) {
Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null);
n.setComment(comment);
return n;
@@ -1323,7 +1324,7 @@ public Visitable visit(final TypePatternExpr n, final A arg) {
@Override
public Visitable visit(final RecordPatternExpr n, final A arg) {
NodeList modifiers = modifyList(n.getModifiers(), arg);
- NodeList patternList = modifyList(n.getPatternList(), arg);
+ NodeList patternList = modifyList(n.getPatternList(), arg);
Type type = (Type) n.getType().accept(this, arg);
Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null);
if (type == null) return null;
@@ -1333,4 +1334,20 @@ public Visitable visit(final RecordPatternExpr n, final A arg) {
n.setComment(comment);
return n;
}
+
+ @Override
+ public Visitable visit(final MatchAllPatternExpr n, final A arg) {
+ NodeList modifiers = modifyList(n.getModifiers(), arg);
+ Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null);
+ n.setModifiers(modifiers);
+ n.setComment(comment);
+ return n;
+ }
+
+ @Override
+ public Visitable visit(final MarkdownComment n, final A arg) {
+ Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null);
+ 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 2e3302ac3d..981c077551 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -136,6 +137,7 @@ public Boolean visit(final ClassOrInterfaceDeclaration n, final Visitable arg) {
final ClassOrInterfaceDeclaration n2 = (ClassOrInterfaceDeclaration) arg;
if (!nodesEquals(n.getExtendedTypes(), n2.getExtendedTypes())) return false;
if (!nodesEquals(n.getImplementedTypes(), n2.getImplementedTypes())) return false;
+ if (!objEquals(n.isCompact(), n2.isCompact())) return false;
if (!objEquals(n.isInterface(), n2.isInterface())) return false;
if (!nodesEquals(n.getPermittedTypes(), n2.getPermittedTypes())) return false;
if (!nodesEquals(n.getTypeParameters(), n2.getTypeParameters())) return false;
@@ -258,7 +260,7 @@ public Boolean visit(final InitializerDeclaration n, final Visitable arg) {
}
@Override
- public Boolean visit(final JavadocComment n, final Visitable arg) {
+ public Boolean visit(final TraditionalJavadocComment n, final Visitable arg) {
return true;
}
@@ -784,6 +786,7 @@ public Boolean visit(final TypeExpr n, final Visitable arg) {
public Boolean visit(final ImportDeclaration n, final Visitable arg) {
final ImportDeclaration n2 = (ImportDeclaration) arg;
if (!objEquals(n.isAsterisk(), n2.isAsterisk())) return false;
+ if (!objEquals(n.isModule(), n2.isModule())) return false;
if (!objEquals(n.isStatic(), n2.isStatic())) return false;
if (!nodeEquals(n.getName(), n2.getName())) return false;
return true;
@@ -936,4 +939,18 @@ public Boolean visit(final RecordPatternExpr n, final Visitable arg) {
if (!nodeEquals(n.getType(), n2.getType())) return false;
return true;
}
+
+ @Override
+ public Boolean visit(final MatchAllPatternExpr n, final Visitable arg) {
+ final MatchAllPatternExpr n2 = (MatchAllPatternExpr) arg;
+ if (!nodesEquals(n.getModifiers(), n2.getModifiers())) return false;
+ return true;
+ }
+
+ @Override
+ public Boolean visit(final MarkdownComment n, final Visitable arg) {
+ final MarkdownComment n2 = (MarkdownComment) arg;
+ if (!objEquals(n.getContent(), n2.getContent())) 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 7f82fc6635..5133e5b367 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -130,6 +131,7 @@ public Integer visit(final ClassExpr n, final Void arg) {
public Integer visit(final ClassOrInterfaceDeclaration n, final Void arg) {
return (n.getExtendedTypes().accept(this, arg)) * 31
+ (n.getImplementedTypes().accept(this, arg)) * 31
+ + (n.isCompact() ? 1 : 0) * 31
+ (n.isInterface() ? 1 : 0) * 31
+ (n.getPermittedTypes().accept(this, arg)) * 31
+ (n.getTypeParameters().accept(this, arg)) * 31
@@ -262,6 +264,7 @@ public Integer visit(final IfStmt n, final Void arg) {
public Integer visit(final ImportDeclaration n, final Void arg) {
return (n.isAsterisk() ? 1 : 0) * 31
+ + (n.isModule() ? 1 : 0) * 31
+ (n.isStatic() ? 1 : 0) * 31
+ (n.getName().accept(this, arg));
}
@@ -286,7 +289,7 @@ public Integer visit(final IntersectionType n, final Void arg) {
return (n.getElements().accept(this, arg)) * 31 + (n.getAnnotations().accept(this, arg));
}
- public Integer visit(final JavadocComment n, final Void arg) {
+ public Integer visit(final TraditionalJavadocComment n, final Void arg) {
return 0;
}
@@ -609,4 +612,14 @@ public Integer visit(final RecordPatternExpr n, final Void arg) {
+ (n.getPatternList().accept(this, arg)) * 31
+ (n.getType().accept(this, arg));
}
+
+ @Override
+ public Integer visit(final MatchAllPatternExpr n, final Void arg) {
+ return (n.getModifiers().accept(this, arg));
+ }
+
+ @Override
+ public Integer visit(final MarkdownComment n, final Void arg) {
+ return (n.getContent().hashCode());
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NodeFinderVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NodeFinderVisitor.java
index f9de9956e1..b84a4cf500 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NodeFinderVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NodeFinderVisitor.java
@@ -42,8 +42,8 @@
import com.github.javaparser.ast.body.RecordDeclaration;
import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.ArrayAccessExpr;
import com.github.javaparser.ast.expr.ArrayCreationExpr;
import com.github.javaparser.ast.expr.ArrayInitializerExpr;
@@ -971,7 +971,7 @@ public void visit(final IntegerLiteralExpr n, final Range arg) {
}
@Override
- public void visit(final JavadocComment n, final Range arg) {
+ public void visit(final TraditionalJavadocComment n, final Range arg) {
if (n.getComment().isPresent()) {
n.getComment().get().accept(this, arg);
if (selectedNode != null) return;
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityEqualsVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityEqualsVisitor.java
index 4af8d020e3..2611e419a7 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityEqualsVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityEqualsVisitor.java
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -129,7 +130,7 @@ public Boolean visit(final InitializerDeclaration n, final Visitable arg) {
}
@Override
- public Boolean visit(final JavadocComment n, final Visitable arg) {
+ public Boolean visit(final TraditionalJavadocComment n, final Visitable arg) {
return n == arg;
}
@@ -552,4 +553,14 @@ public Boolean visit(final CompactConstructorDeclaration n, final Visitable arg)
public Boolean visit(final RecordPatternExpr n, final Visitable arg) {
return n == arg;
}
+
+ @Override
+ public Boolean visit(final MatchAllPatternExpr n, final Visitable arg) {
+ return n == arg;
+ }
+
+ @Override
+ public Boolean visit(final MarkdownComment n, final Visitable arg) {
+ return n == arg;
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityHashCodeVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityHashCodeVisitor.java
index 7930c9c341..6019e48dcd 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityHashCodeVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityHashCodeVisitor.java
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -214,7 +215,7 @@ public Integer visit(final IntersectionType n, final Void arg) {
return n.hashCode();
}
- public Integer visit(final JavadocComment n, final Void arg) {
+ public Integer visit(final TraditionalJavadocComment n, final Void arg) {
return n.hashCode();
}
@@ -463,4 +464,14 @@ public Integer visit(final CompactConstructorDeclaration n, final Void arg) {
public Integer visit(final RecordPatternExpr n, final Void arg) {
return n.hashCode();
}
+
+ @Override
+ public Integer visit(final MatchAllPatternExpr n, final Void arg) {
+ return n.hashCode();
+ }
+
+ @Override
+ public Integer visit(final MarkdownComment n, final Void arg) {
+ return n.hashCode();
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/SimpleVoidVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/SimpleVoidVisitor.java
index dd0e2d1bfc..1633003aea 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/SimpleVoidVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/SimpleVoidVisitor.java
@@ -3,8 +3,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -246,7 +247,7 @@ public void visit(IntersectionType n, A arg) {
}
@Override
- public void visit(JavadocComment n, A arg) {
+ public void visit(TraditionalJavadocComment n, A arg) {
defaultAction(n, arg);
}
@@ -529,4 +530,14 @@ public void visit(TypePatternExpr n, A arg) {
public void visit(RecordPatternExpr n, A arg) {
defaultAction(n, arg);
}
+
+ @Override
+ public void visit(MatchAllPatternExpr n, A arg) {
+ defaultAction(n, arg);
+ }
+
+ @Override
+ public void visit(MarkdownComment n, A arg) {
+ defaultAction(n, arg);
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java
index fcfc613d76..efc4c5321f 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -125,7 +126,7 @@ public interface VoidVisitor {
void visit(IntersectionType n, A arg);
- void visit(JavadocComment n, A arg);
+ void visit(TraditionalJavadocComment n, A arg);
void visit(LabeledStmt n, A arg);
@@ -240,4 +241,8 @@ public interface VoidVisitor {
void visit(TypePatternExpr n, A arg);
void visit(RecordPatternExpr n, A arg);
+
+ void visit(MatchAllPatternExpr n, A arg);
+
+ void visit(MarkdownComment n, A 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 83502ef73c..a811b170c7 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
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -328,7 +329,7 @@ public void visit(final IntegerLiteralExpr n, final A arg) {
}
@Override
- public void visit(final JavadocComment n, final A arg) {
+ public void visit(final TraditionalJavadocComment n, final A arg) {
n.getComment().ifPresent(l -> l.accept(this, arg));
}
@@ -765,4 +766,15 @@ public void visit(final RecordPatternExpr n, final A arg) {
n.getType().accept(this, arg);
n.getComment().ifPresent(l -> l.accept(this, arg));
}
+
+ @Override
+ public void visit(final MatchAllPatternExpr n, final A arg) {
+ n.getModifiers().forEach(p -> p.accept(this, arg));
+ n.getComment().ifPresent(l -> l.accept(this, arg));
+ }
+
+ @Override
+ public void visit(final MarkdownComment n, final A arg) {
+ n.getComment().ifPresent(l -> l.accept(this, arg));
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorWithDefaults.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorWithDefaults.java
index 725c574296..8ae2dcbd99 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorWithDefaults.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorWithDefaults.java
@@ -23,8 +23,9 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.comments.BlockComment;
-import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.stmt.*;
@@ -242,7 +243,7 @@ public void visit(final IntegerLiteralExpr n, final A arg) {
}
@Override
- public void visit(final JavadocComment n, final A arg) {
+ public void visit(final TraditionalJavadocComment n, final A arg) {
defaultAction(n, arg);
}
@@ -553,4 +554,14 @@ public void visit(final CompactConstructorDeclaration n, final A arg) {
public void visit(final RecordPatternExpr n, final A arg) {
defaultAction(n, arg);
}
+
+ @Override
+ public void visit(final MatchAllPatternExpr n, final A arg) {
+ defaultAction(n, arg);
+ }
+
+ @Override
+ public void visit(final MarkdownComment n, final A arg) {
+ defaultAction(n, arg);
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java b/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java
index 6cd5441152..c6b71e501f 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java
@@ -21,6 +21,8 @@
package com.github.javaparser.javadoc;
import com.github.javaparser.ast.comments.JavadocComment;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
import com.github.javaparser.javadoc.description.JavadocDescription;
import com.github.javaparser.utils.LineSeparator;
import java.util.LinkedList;
@@ -40,11 +42,18 @@ public class Javadoc {
private List blockTags;
+ private boolean isMarkdownComment;
+
public Javadoc(JavadocDescription description) {
this.description = description;
this.blockTags = new LinkedList<>();
}
+ public Javadoc(JavadocDescription description, boolean isMarkdownComment) {
+ this(description);
+ this.isMarkdownComment = isMarkdownComment;
+ }
+
public Javadoc addBlockTag(JavadocBlockTag blockTag) {
this.blockTags.add(blockTag);
return this;
@@ -113,17 +122,22 @@ public JavadocComment toComment(String indentation) {
StringBuilder sb = new StringBuilder();
sb.append(LineSeparator.SYSTEM);
final String text = toText();
+ String commentPrefix = isMarkdownComment ? "/// " : " * ";
if (!text.isEmpty()) {
for (String line : text.split(LineSeparator.SYSTEM.asRawString())) {
sb.append(indentation);
- sb.append(" * ");
+ sb.append(commentPrefix);
sb.append(line);
sb.append(LineSeparator.SYSTEM);
}
}
- sb.append(indentation);
- sb.append(" ");
- return new JavadocComment(sb.toString());
+ if (isMarkdownComment) {
+ return new MarkdownComment(sb.toString());
+ } else {
+ sb.append(indentation);
+ sb.append(" ");
+ return new TraditionalJavadocComment(sb.toString());
+ }
}
public JavadocDescription getDescription() {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/ClassOrInterfaceDeclarationMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/ClassOrInterfaceDeclarationMetaModel.java
index b3106eed55..7e60f99ae8 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/ClassOrInterfaceDeclarationMetaModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/ClassOrInterfaceDeclarationMetaModel.java
@@ -51,6 +51,8 @@ public class ClassOrInterfaceDeclarationMetaModel extends TypeDeclarationMetaMod
public PropertyMetaModel implementedTypesPropertyMetaModel;
+ public PropertyMetaModel isCompactPropertyMetaModel;
+
public PropertyMetaModel isInterfacePropertyMetaModel;
public PropertyMetaModel permittedTypesPropertyMetaModel;
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/ComponentPatternExprMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/ComponentPatternExprMetaModel.java
new file mode 100644
index 0000000000..8c1d40dbda
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/ComponentPatternExprMetaModel.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2024 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.metamodel;
+
+import com.github.javaparser.ast.Generated;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.expr.ComponentPatternExpr;
+import java.util.Optional;
+
+/**
+ * This file, class, and its contents are completely generated based on:
+ *
+ * - The contents and annotations within the package `com.github.javaparser.ast`, and
+ * - `ALL_NODE_CLASSES` within the class `com.github.javaparser.generator.metamodel.MetaModelGenerator`.
+ *
+ *
+ * For this reason, any changes made directly to this file will be overwritten the next time generators are run.
+ */
+@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+public class ComponentPatternExprMetaModel extends ExpressionMetaModel {
+
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ ComponentPatternExprMetaModel(Optional superBaseNodeMetaModel) {
+ super(
+ superBaseNodeMetaModel,
+ ComponentPatternExpr.class,
+ "ComponentPatternExpr",
+ "com.github.javaparser.ast.expr",
+ true,
+ false);
+ }
+
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ protected ComponentPatternExprMetaModel(
+ Optional superNodeMetaModel,
+ Class extends Node> type,
+ String name,
+ String packageName,
+ boolean isAbstract,
+ boolean hasWildcard) {
+ super(superNodeMetaModel, type, name, packageName, isAbstract, hasWildcard);
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/ImportDeclarationMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/ImportDeclarationMetaModel.java
index 5ed94b2385..03d1883d17 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/ImportDeclarationMetaModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/ImportDeclarationMetaModel.java
@@ -49,6 +49,8 @@ public class ImportDeclarationMetaModel extends NodeMetaModel {
public PropertyMetaModel isAsteriskPropertyMetaModel;
+ public PropertyMetaModel isModulePropertyMetaModel;
+
public PropertyMetaModel isStaticPropertyMetaModel;
public PropertyMetaModel namePropertyMetaModel;
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 5011c0d96d..eb35f1f2c9 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
@@ -94,6 +94,7 @@ private static void initializeConstructorParameters() {
importDeclarationMetaModel
.getConstructorParameters()
.add(importDeclarationMetaModel.isAsteriskPropertyMetaModel);
+ importDeclarationMetaModel.getConstructorParameters().add(importDeclarationMetaModel.isModulePropertyMetaModel);
modifierMetaModel.getConstructorParameters().add(modifierMetaModel.keywordPropertyMetaModel);
packageDeclarationMetaModel
.getConstructorParameters()
@@ -151,6 +152,9 @@ private static void initializeConstructorParameters() {
classOrInterfaceDeclarationMetaModel
.getConstructorParameters()
.add(typeDeclarationMetaModel.membersPropertyMetaModel);
+ classOrInterfaceDeclarationMetaModel
+ .getConstructorParameters()
+ .add(classOrInterfaceDeclarationMetaModel.isCompactPropertyMetaModel);
constructorDeclarationMetaModel
.getConstructorParameters()
.add(callableDeclarationMetaModel.modifiersPropertyMetaModel);
@@ -278,9 +282,11 @@ private static void initializeConstructorParameters() {
.getConstructorParameters()
.add(variableDeclaratorMetaModel.initializerPropertyMetaModel);
commentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
- blockCommentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
javadocCommentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
+ blockCommentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
+ traditionalJavadocCommentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
lineCommentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
+ markdownCommentMetaModel.getConstructorParameters().add(commentMetaModel.contentPropertyMetaModel);
arrayAccessExprMetaModel.getConstructorParameters().add(arrayAccessExprMetaModel.namePropertyMetaModel);
arrayAccessExprMetaModel.getConstructorParameters().add(arrayAccessExprMetaModel.indexPropertyMetaModel);
arrayCreationExprMetaModel
@@ -388,6 +394,9 @@ private static void initializeConstructorParameters() {
typePatternExprMetaModel.getConstructorParameters().add(typePatternExprMetaModel.namePropertyMetaModel);
unaryExprMetaModel.getConstructorParameters().add(unaryExprMetaModel.expressionPropertyMetaModel);
unaryExprMetaModel.getConstructorParameters().add(unaryExprMetaModel.operatorPropertyMetaModel);
+ matchAllPatternExprMetaModel
+ .getConstructorParameters()
+ .add(matchAllPatternExprMetaModel.modifiersPropertyMetaModel);
variableDeclarationExprMetaModel
.getConstructorParameters()
.add(variableDeclarationExprMetaModel.modifiersPropertyMetaModel);
@@ -537,6 +546,7 @@ private static void initializeNodeMetaModels() {
nodeMetaModels.add(commentMetaModel);
nodeMetaModels.add(compactConstructorDeclarationMetaModel);
nodeMetaModels.add(compilationUnitMetaModel);
+ nodeMetaModels.add(componentPatternExprMetaModel);
nodeMetaModels.add(conditionalExprMetaModel);
nodeMetaModels.add(constructorDeclarationMetaModel);
nodeMetaModels.add(continueStmtMetaModel);
@@ -568,7 +578,9 @@ private static void initializeNodeMetaModels() {
nodeMetaModels.add(localClassDeclarationStmtMetaModel);
nodeMetaModels.add(localRecordDeclarationStmtMetaModel);
nodeMetaModels.add(longLiteralExprMetaModel);
+ nodeMetaModels.add(markdownCommentMetaModel);
nodeMetaModels.add(markerAnnotationExprMetaModel);
+ nodeMetaModels.add(matchAllPatternExprMetaModel);
nodeMetaModels.add(memberValuePairMetaModel);
nodeMetaModels.add(methodCallExprMetaModel);
nodeMetaModels.add(methodDeclarationMetaModel);
@@ -608,6 +620,7 @@ private static void initializeNodeMetaModels() {
nodeMetaModels.add(textBlockLiteralExprMetaModel);
nodeMetaModels.add(thisExprMetaModel);
nodeMetaModels.add(throwStmtMetaModel);
+ nodeMetaModels.add(traditionalJavadocCommentMetaModel);
nodeMetaModels.add(tryStmtMetaModel);
nodeMetaModels.add(typeDeclarationMetaModel);
nodeMetaModels.add(typeExprMetaModel);
@@ -899,6 +912,11 @@ private static void initializePropertyMetaModels() {
importDeclarationMetaModel
.getDeclaredPropertyMetaModels()
.add(importDeclarationMetaModel.isAsteriskPropertyMetaModel);
+ importDeclarationMetaModel.isModulePropertyMetaModel = new PropertyMetaModel(
+ importDeclarationMetaModel, "isModule", boolean.class, Optional.empty(), false, false, false, false);
+ importDeclarationMetaModel
+ .getDeclaredPropertyMetaModels()
+ .add(importDeclarationMetaModel.isModulePropertyMetaModel);
importDeclarationMetaModel.isStaticPropertyMetaModel = new PropertyMetaModel(
importDeclarationMetaModel, "isStatic", boolean.class, Optional.empty(), false, false, false, false);
importDeclarationMetaModel
@@ -1022,6 +1040,18 @@ private static void initializePropertyMetaModels() {
classOrInterfaceDeclarationMetaModel
.getDeclaredPropertyMetaModels()
.add(classOrInterfaceDeclarationMetaModel.implementedTypesPropertyMetaModel);
+ classOrInterfaceDeclarationMetaModel.isCompactPropertyMetaModel = new PropertyMetaModel(
+ classOrInterfaceDeclarationMetaModel,
+ "isCompact",
+ boolean.class,
+ Optional.empty(),
+ false,
+ false,
+ false,
+ false);
+ classOrInterfaceDeclarationMetaModel
+ .getDeclaredPropertyMetaModels()
+ .add(classOrInterfaceDeclarationMetaModel.isCompactPropertyMetaModel);
classOrInterfaceDeclarationMetaModel.isInterfacePropertyMetaModel = new PropertyMetaModel(
classOrInterfaceDeclarationMetaModel,
"isInterface",
@@ -2029,8 +2059,8 @@ private static void initializePropertyMetaModels() {
recordPatternExprMetaModel.patternListPropertyMetaModel = new PropertyMetaModel(
recordPatternExprMetaModel,
"patternList",
- com.github.javaparser.ast.expr.PatternExpr.class,
- Optional.of(patternExprMetaModel),
+ com.github.javaparser.ast.expr.ComponentPatternExpr.class,
+ Optional.of(componentPatternExprMetaModel),
false,
false,
true,
@@ -2151,6 +2181,18 @@ private static void initializePropertyMetaModels() {
unaryExprMetaModel.prefixPropertyMetaModel = new PropertyMetaModel(
unaryExprMetaModel, "prefix", boolean.class, Optional.empty(), false, false, false, false);
unaryExprMetaModel.getDerivedPropertyMetaModels().add(unaryExprMetaModel.prefixPropertyMetaModel);
+ matchAllPatternExprMetaModel.modifiersPropertyMetaModel = new PropertyMetaModel(
+ matchAllPatternExprMetaModel,
+ "modifiers",
+ com.github.javaparser.ast.Modifier.class,
+ Optional.of(modifierMetaModel),
+ false,
+ false,
+ true,
+ false);
+ matchAllPatternExprMetaModel
+ .getDeclaredPropertyMetaModels()
+ .add(matchAllPatternExprMetaModel.modifiersPropertyMetaModel);
variableDeclarationExprMetaModel.annotationsPropertyMetaModel = new PropertyMetaModel(
variableDeclarationExprMetaModel,
"annotations",
@@ -3092,18 +3134,26 @@ public static Optional getNodeMetaModel(Class> c) {
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final CommentMetaModel commentMetaModel = new CommentMetaModel(Optional.of(nodeMetaModel));
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ public static final JavadocCommentMetaModel javadocCommentMetaModel =
+ new JavadocCommentMetaModel(Optional.of(commentMetaModel));
+
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final BlockCommentMetaModel blockCommentMetaModel =
new BlockCommentMetaModel(Optional.of(commentMetaModel));
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
- public static final JavadocCommentMetaModel javadocCommentMetaModel =
- new JavadocCommentMetaModel(Optional.of(commentMetaModel));
+ public static final TraditionalJavadocCommentMetaModel traditionalJavadocCommentMetaModel =
+ new TraditionalJavadocCommentMetaModel(Optional.of(javadocCommentMetaModel));
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final LineCommentMetaModel lineCommentMetaModel =
new LineCommentMetaModel(Optional.of(commentMetaModel));
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ public static final MarkdownCommentMetaModel markdownCommentMetaModel =
+ new MarkdownCommentMetaModel(Optional.of(javadocCommentMetaModel));
+
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final ArrayAccessExprMetaModel arrayAccessExprMetaModel =
new ArrayAccessExprMetaModel(Optional.of(expressionMetaModel));
@@ -3205,9 +3255,13 @@ public static Optional getNodeMetaModel(Class> c) {
public static final ObjectCreationExprMetaModel objectCreationExprMetaModel =
new ObjectCreationExprMetaModel(Optional.of(expressionMetaModel));
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ public static final ComponentPatternExprMetaModel componentPatternExprMetaModel =
+ new ComponentPatternExprMetaModel(Optional.of(expressionMetaModel));
+
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final PatternExprMetaModel patternExprMetaModel =
- new PatternExprMetaModel(Optional.of(expressionMetaModel));
+ new PatternExprMetaModel(Optional.of(componentPatternExprMetaModel));
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final RecordPatternExprMetaModel recordPatternExprMetaModel =
@@ -3246,6 +3300,10 @@ public static Optional getNodeMetaModel(Class> c) {
public static final UnaryExprMetaModel unaryExprMetaModel =
new UnaryExprMetaModel(Optional.of(expressionMetaModel));
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ public static final MatchAllPatternExprMetaModel matchAllPatternExprMetaModel =
+ new MatchAllPatternExprMetaModel(Optional.of(componentPatternExprMetaModel));
+
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final VariableDeclarationExprMetaModel variableDeclarationExprMetaModel =
new VariableDeclarationExprMetaModel(Optional.of(expressionMetaModel));
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavadocCommentMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavadocCommentMetaModel.java
index 903fc99919..9002cf33b2 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavadocCommentMetaModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavadocCommentMetaModel.java
@@ -21,6 +21,7 @@
package com.github.javaparser.metamodel;
import com.github.javaparser.ast.Generated;
+import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.comments.JavadocComment;
import java.util.Optional;
@@ -43,7 +44,18 @@ public class JavadocCommentMetaModel extends CommentMetaModel {
JavadocComment.class,
"JavadocComment",
"com.github.javaparser.ast.comments",
- false,
+ true,
false);
}
+
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ protected JavadocCommentMetaModel(
+ Optional superNodeMetaModel,
+ Class extends Node> type,
+ String name,
+ String packageName,
+ boolean isAbstract,
+ boolean hasWildcard) {
+ super(superNodeMetaModel, type, name, packageName, isAbstract, hasWildcard);
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/MarkdownCommentMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/MarkdownCommentMetaModel.java
new file mode 100644
index 0000000000..2d43bbc16d
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/MarkdownCommentMetaModel.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2024 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.metamodel;
+
+import com.github.javaparser.ast.Generated;
+import com.github.javaparser.ast.comments.MarkdownComment;
+import java.util.Optional;
+
+/**
+ * This file, class, and its contents are completely generated based on:
+ *
+ * - The contents and annotations within the package `com.github.javaparser.ast`, and
+ * - `ALL_NODE_CLASSES` within the class `com.github.javaparser.generator.metamodel.MetaModelGenerator`.
+ *
+ *
+ * For this reason, any changes made directly to this file will be overwritten the next time generators are run.
+ */
+@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+public class MarkdownCommentMetaModel extends JavadocCommentMetaModel {
+
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ MarkdownCommentMetaModel(Optional superBaseNodeMetaModel) {
+ super(
+ superBaseNodeMetaModel,
+ MarkdownComment.class,
+ "MarkdownComment",
+ "com.github.javaparser.ast.comments",
+ false,
+ false);
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/MatchAllPatternExprMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/MatchAllPatternExprMetaModel.java
new file mode 100644
index 0000000000..610699219e
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/MatchAllPatternExprMetaModel.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2024 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.metamodel;
+
+import com.github.javaparser.ast.Generated;
+import com.github.javaparser.ast.expr.MatchAllPatternExpr;
+import java.util.Optional;
+
+/**
+ * This file, class, and its contents are completely generated based on:
+ *
+ * - The contents and annotations within the package `com.github.javaparser.ast`, and
+ * - `ALL_NODE_CLASSES` within the class `com.github.javaparser.generator.metamodel.MetaModelGenerator`.
+ *
+ *
+ * For this reason, any changes made directly to this file will be overwritten the next time generators are run.
+ */
+@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+public class MatchAllPatternExprMetaModel extends ComponentPatternExprMetaModel {
+
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ MatchAllPatternExprMetaModel(Optional superBaseNodeMetaModel) {
+ super(
+ superBaseNodeMetaModel,
+ MatchAllPatternExpr.class,
+ "MatchAllPatternExpr",
+ "com.github.javaparser.ast.expr",
+ false,
+ false);
+ }
+
+ public PropertyMetaModel modifiersPropertyMetaModel;
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/PatternExprMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/PatternExprMetaModel.java
index 6262b97a6a..4fd907fcb0 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/PatternExprMetaModel.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/PatternExprMetaModel.java
@@ -35,7 +35,7 @@
* For this reason, any changes made directly to this file will be overwritten the next time generators are run.
*/
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
-public class PatternExprMetaModel extends ExpressionMetaModel {
+public class PatternExprMetaModel extends ComponentPatternExprMetaModel {
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
PatternExprMetaModel(Optional superBaseNodeMetaModel) {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/TraditionalJavadocCommentMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/TraditionalJavadocCommentMetaModel.java
new file mode 100644
index 0000000000..4751f4d1ea
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/TraditionalJavadocCommentMetaModel.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2024 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+package com.github.javaparser.metamodel;
+
+import com.github.javaparser.ast.Generated;
+import com.github.javaparser.ast.comments.TraditionalJavadocComment;
+import java.util.Optional;
+
+/**
+ * This file, class, and its contents are completely generated based on:
+ *
+ * - The contents and annotations within the package `com.github.javaparser.ast`, and
+ * - `ALL_NODE_CLASSES` within the class `com.github.javaparser.generator.metamodel.MetaModelGenerator`.
+ *
+ *
+ * For this reason, any changes made directly to this file will be overwritten the next time generators are run.
+ */
+@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+public class TraditionalJavadocCommentMetaModel extends JavadocCommentMetaModel {
+
+ @Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
+ TraditionalJavadocCommentMetaModel(Optional superBaseNodeMetaModel) {
+ super(
+ superBaseNodeMetaModel,
+ TraditionalJavadocComment.class,
+ "TraditionalJavadocComment",
+ "com.github.javaparser.ast.comments",
+ 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 f965b51845..5cb5ba5082 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
@@ -142,45 +142,49 @@ private static CsmElement typeArguments() {
semicolon()));
concreteSyntaxModelByClass.put(
ClassOrInterfaceDeclaration.class,
- sequence(
- comment(),
- memberAnnotations(),
- modifiers(),
- conditional(
- ObservableProperty.INTERFACE,
- FLAG,
- token(GeneratedJavaParserConstants.INTERFACE),
- token(GeneratedJavaParserConstants.CLASS)),
- space(),
- child(ObservableProperty.NAME),
- list(
- TYPE_PARAMETERS,
- sequence(comma(), space()),
- string(GeneratedJavaParserConstants.LT),
- string(GeneratedJavaParserConstants.GT)),
- list(
- ObservableProperty.EXTENDED_TYPES,
- sequence(string(GeneratedJavaParserConstants.COMMA), space()),
- sequence(space(), token(GeneratedJavaParserConstants.EXTENDS), space()),
- none()),
- list(
- ObservableProperty.IMPLEMENTED_TYPES,
- sequence(string(GeneratedJavaParserConstants.COMMA), space()),
- sequence(space(), token(GeneratedJavaParserConstants.IMPLEMENTS), space()),
- none()),
- space(),
- list(
- ObservableProperty.PERMITTED_TYPES,
- sequence(string(GeneratedJavaParserConstants.COMMA), space()),
- sequence(space(), token(GeneratedJavaParserConstants.PERMITS), space()),
- none()),
- block(sequence(
- newline(),
+ sequence(conditional(
+ ObservableProperty.COMPACT,
+ FLAG,
+ list(ObservableProperty.MEMBERS, sequence(newline(), newline()), newline(), none()),
+ sequence(
+ comment(),
+ memberAnnotations(),
+ modifiers(),
+ conditional(
+ ObservableProperty.INTERFACE,
+ FLAG,
+ token(GeneratedJavaParserConstants.INTERFACE),
+ token(GeneratedJavaParserConstants.CLASS)),
+ space(),
+ child(ObservableProperty.NAME),
list(
- ObservableProperty.MEMBERS,
- sequence(newline(), newline()),
+ TYPE_PARAMETERS,
+ sequence(comma(), space()),
+ string(GeneratedJavaParserConstants.LT),
+ string(GeneratedJavaParserConstants.GT)),
+ list(
+ ObservableProperty.EXTENDED_TYPES,
+ sequence(string(GeneratedJavaParserConstants.COMMA), space()),
+ sequence(space(), token(GeneratedJavaParserConstants.EXTENDS), space()),
+ none()),
+ list(
+ ObservableProperty.IMPLEMENTED_TYPES,
+ sequence(string(GeneratedJavaParserConstants.COMMA), space()),
+ sequence(space(), token(GeneratedJavaParserConstants.IMPLEMENTS), space()),
+ none()),
+ space(),
+ list(
+ ObservableProperty.PERMITTED_TYPES,
+ sequence(string(GeneratedJavaParserConstants.COMMA), space()),
+ sequence(space(), token(GeneratedJavaParserConstants.PERMITS), space()),
+ none()),
+ block(sequence(
newline(),
- newline())))));
+ list(
+ ObservableProperty.MEMBERS,
+ sequence(newline(), newline()),
+ newline(),
+ newline())))))));
concreteSyntaxModelByClass.put(
ConstructorDeclaration.class,
sequence(
@@ -516,6 +520,9 @@ private static CsmElement typeArguments() {
concreteSyntaxModelByClass.put(
MarkerAnnotationExpr.class,
sequence(comment(), token(GeneratedJavaParserConstants.AT), attribute(ObservableProperty.NAME)));
+ concreteSyntaxModelByClass.put(
+ MatchAllPatternExpr.class,
+ sequence(comment(), token(GeneratedJavaParserConstants.UNNAMED_PLACEHOLDER)));
concreteSyntaxModelByClass.put(
MemberValuePair.class,
sequence(
@@ -1117,6 +1124,10 @@ SCOPE, IS_PRESENT, sequence(child(SCOPE), string(GeneratedJavaParserConstants.DO
ObservableProperty.STATIC,
FLAG,
sequence(token(GeneratedJavaParserConstants.STATIC), space())),
+ conditional(
+ ObservableProperty.MODULE,
+ FLAG,
+ sequence(token(GeneratedJavaParserConstants.MODULE), space())),
child(ObservableProperty.NAME),
conditional(
ASTERISK,
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/DefaultPrettyPrinterVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/printer/DefaultPrettyPrinterVisitor.java
index 75b36fe7b5..06bffa0c30 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/DefaultPrettyPrinterVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/DefaultPrettyPrinterVisitor.java
@@ -26,10 +26,7 @@
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.body.*;
-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.comments.*;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.modules.*;
import com.github.javaparser.ast.nodeTypes.NodeWithTraversableScope;
@@ -109,6 +106,27 @@ protected void printMembers(final NodeList> members, final Vo
}
}
+ /**
+ * Print a list of compact class members. This is similar to {@see printMembers} with the exception that the
+ * empty lines preceding the first member and following the last member are not printed.
+ */
+ protected void printCompactClassMembers(final NodeList