aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core/src/main
diff options
context:
space:
mode:
authorDanny van Bruggen <hexagonaal@gmail.com>2018-02-06 20:14:17 +0100
committerDanny van Bruggen <hexagonaal@gmail.com>2018-02-06 20:14:17 +0100
commit8a84534731712fff8d6cdd1d50f93945591b782c (patch)
tree0500d5d64be5032d2de4610521a953a484165227 /javaparser-core/src/main
parent571f5206dac4eb9e2c8664547fc7a180cd6f3ecb (diff)
parentd7d541ee649ec1cac49abadda78e2b68662a11c3 (diff)
downloadplatform_external_javaparser-8a84534731712fff8d6cdd1d50f93945591b782c.tar.gz
platform_external_javaparser-8a84534731712fff8d6cdd1d50f93945591b782c.tar.bz2
platform_external_javaparser-8a84534731712fff8d6cdd1d50f93945591b782c.zip
Merge remote-tracking branch 'jp/master' into cleanup_jss
# Conflicts: # javaparser-testing/src/test/java/com/github/javaparser/ParserConfigurationTest.java
Diffstat (limited to 'javaparser-core/src/main')
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/JavaParser.java32
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ParseResult.java27
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java123
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/Node.java6
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java8
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/expr/AssignExpr.java7
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/expr/BinaryExpr.java7
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/expr/ObjectCreationExpr.java3
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java3
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java19
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/type/VarType.java133
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java10Validator.java20
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/validator/NoProblemsValidator.java4
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/validator/ProblemReporter.java10
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/validator/TypedValidator.java8
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java9
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java10
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericListVisitorAdapter.java17
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java2
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java16
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorWithDefaults.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/HashCodeVisitor.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitor.java9
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentEqualsVisitor.java8
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/NoCommentHashCodeVisitor.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityEqualsVisitor.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ObjectIdentityHashCodeVisitor.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java2
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java6
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorWithDefaults.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java5
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/javadoc/description/JavadocDescription.java14
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java7
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/metamodel/VarTypeMetaModel.java10
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java2
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java7
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/version/Java10PostProcessor.java30
37 files changed, 512 insertions, 82 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java b/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java
index 287e88e6b..7b8ee87a5 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java
@@ -27,16 +27,13 @@ import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.PackageDeclaration;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.Parameter;
-import com.github.javaparser.ast.comments.CommentsCollection;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt;
import com.github.javaparser.ast.stmt.Statement;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
-import com.github.javaparser.ast.validator.ProblemReporter;
import com.github.javaparser.javadoc.Javadoc;
-import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;
import java.io.*;
import java.nio.charset.Charset;
@@ -53,7 +50,6 @@ import static com.github.javaparser.utils.Utils.assertNotNull;
* @author Júlio Vilmar Gesser
*/
public final class JavaParser {
- private final CommentsInserter commentsInserter;
private final ParserConfiguration configuration;
private GeneratedJavaParser astParser = null;
@@ -74,7 +70,6 @@ public final class JavaParser {
*/
public JavaParser(ParserConfiguration configuration) {
this.configuration = configuration;
- commentsInserter = new CommentsInserter(configuration);
}
/**
@@ -129,20 +124,13 @@ public final class JavaParser {
final GeneratedJavaParser parser = getParserForProvider(provider);
try {
N resultNode = start.parse(parser);
- if (configuration.isAttributeComments()) {
- final CommentsCollection comments = parser.getCommentsCollection();
- commentsInserter.insertComments(resultNode, comments.copy().getComments());
- }
- if (configuration.isLexicalPreservationEnabled()) {
- LexicalPreservingPrinter.setup(resultNode);
- }
-
- configuration.getValidator().accept(resultNode, new ProblemReporter(parser.problems));
- parser.problems.sort(PROBLEM_BY_BEGIN_POSITION);
-
ParseResult<N> result = new ParseResult<>(resultNode, parser.problems, parser.getTokens(),
parser.getCommentsCollection());
- considerInjectingSymbolResolver(result, configuration);
+
+ configuration.getPostProcessors().forEach(postProcessor ->
+ postProcessor.process(result, configuration));
+
+ result.getProblems().sort(PROBLEM_BY_BEGIN_POSITION);
return result;
} catch (Exception e) {
@@ -531,14 +519,4 @@ public final class JavaParser {
public static PackageDeclaration parsePackageDeclaration(String packageDeclaration) {
return simplifiedParse(PACKAGE_DECLARATION, provider(packageDeclaration));
}
-
- private void considerInjectingSymbolResolver(ParseResult<?> parseResult, ParserConfiguration parserConfiguration) {
- parserConfiguration.getSymbolResolver().ifPresent(symbolResolver ->
- parseResult.getResult().ifPresent(result -> {
- if (result instanceof CompilationUnit) {
- ((CompilationUnit) result).setData(Node.SYMBOL_RESOLVER_KEY, symbolResolver);
- }
- })
- );
- }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ParseResult.java b/javaparser-core/src/main/java/com/github/javaparser/ParseResult.java
index 903d401ef..4edc79a6d 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ParseResult.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ParseResult.java
@@ -21,6 +21,7 @@
package com.github.javaparser;
+import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.comments.CommentsCollection;
import java.util.List;
@@ -28,7 +29,6 @@ import java.util.Optional;
import java.util.function.Consumer;
import static com.github.javaparser.utils.Utils.EOL;
-import static java.util.Collections.singletonList;
/**
* The results given when parsing with an instance of JavaParser.
@@ -54,22 +54,6 @@ public class ParseResult<T> {
}
/**
- * Used when parsing failed completely with an exception.
- */
- ParseResult(Throwable throwable) {
- this(null, singletonList(
- new Problem(createMessage(throwable), null, throwable)), null, null);
- }
-
- private static String createMessage(Throwable throwable) {
- String message = throwable.getMessage();
- if (message == null) {
- return throwable.getClass().getSimpleName();
- }
- return message;
- }
-
- /**
* @return if parsing was successful, meaning no errors of any kind were encountered.
*/
public boolean isSuccessful() {
@@ -102,7 +86,7 @@ public class ParseResult<T> {
/**
* @return the complete list of tokens that were parsed, or empty if parsing failed completely.
* @deprecated lists of tokens are now kept in every node.
- * Calling this method is comparable to calling getResult().get().getTokenRange().get()
+ * Calling this method is comparable to calling getResult().get().getTokenRange().get()
*/
@Deprecated
public Optional<List<JavaToken>> getTokens() {
@@ -134,4 +118,11 @@ public class ParseResult<T> {
}
return message.toString();
}
+
+ /**
+ * A post processor that can be added to ParserConfiguration to add some processing right after parsing.
+ */
+ public interface PostProcessor {
+ void process(ParseResult<? extends Node> result, ParserConfiguration configuration);
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java b/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java
index f722eca7a..42a6fe067 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java
@@ -21,10 +21,15 @@
package com.github.javaparser;
-import com.github.javaparser.ast.validator.Java8Validator;
-import com.github.javaparser.ast.validator.Validator;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.validator.*;
+import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;
import com.github.javaparser.resolution.SymbolResolver;
+import com.github.javaparser.version.Java10PostProcessor;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
import static com.github.javaparser.utils.Utils.assertNotNull;
@@ -35,6 +40,29 @@ import static com.github.javaparser.utils.Utils.assertNotNull;
* It will pick up the changes.
*/
public class ParserConfiguration {
+ public enum LanguageLevel {
+ ANY(null, null),
+ JAVA_1_0(new Java1_0Validator(), null),
+ JAVA_1_1(new Java1_1Validator(), null),
+ JAVA_1_2(new Java1_2Validator(), null),
+ JAVA_1_3(new Java1_3Validator(), null),
+ JAVA_1_4(new Java1_4Validator(), null),
+ JAVA_5(new Java5Validator(), null),
+ JAVA_6(new Java6Validator(), null),
+ JAVA_7(new Java7Validator(), null),
+ JAVA_8(new Java8Validator(), null),
+ JAVA_9(new Java9Validator(), null),
+ JAVA_10_PREVIEW(null, new Java10PostProcessor());
+
+ final Validator validator;
+ final ParseResult.PostProcessor postProcessor;
+
+ LanguageLevel(Validator validator, ParseResult.PostProcessor postProcessor) {
+ this.validator = validator;
+ this.postProcessor = postProcessor;
+ }
+ }
+
private boolean storeTokens = true;
private boolean attributeComments = true;
private boolean doNotAssignCommentsPrecedingEmptyLines = true;
@@ -42,7 +70,43 @@ public class ParserConfiguration {
private boolean lexicalPreservationEnabled = false;
private SymbolResolver symbolResolver = null;
private int tabSize = 1;
- private Validator validator = new Java8Validator();
+ private LanguageLevel languageLevel;
+
+ private final List<ParseResult.PostProcessor> postProcessors = new ArrayList<>();
+
+ public ParserConfiguration() {
+ postProcessors.add((result, configuration) -> {
+ if (configuration.isLexicalPreservationEnabled()) {
+ if (configuration.isLexicalPreservationEnabled()) {
+ result.ifSuccessful(LexicalPreservingPrinter::setup);
+ }
+ }
+ });
+ postProcessors.add((result, configuration) -> {
+ if (configuration.isAttributeComments()) {
+ result.ifSuccessful(resultNode -> result
+ .getCommentsCollection().ifPresent(comments ->
+ new CommentsInserter(configuration).insertComments(resultNode, comments.copy().getComments())));
+ }
+ });
+ postProcessors.add((result, configuration) -> {
+ LanguageLevel languageLevel = getLanguageLevel();
+ if (languageLevel.postProcessor != null) {
+ languageLevel.postProcessor.process(result, configuration);
+ }
+ if (languageLevel.validator != null) {
+ languageLevel.validator.accept(result.getResult().get(), new ProblemReporter(newProblem -> result.getProblems().add(newProblem)));
+ }
+ });
+ postProcessors.add((result, configuration) -> configuration.getSymbolResolver().ifPresent(symbolResolver ->
+ result.ifSuccessful(resultNode -> {
+ if (resultNode instanceof CompilationUnit) {
+ resultNode.setData(Node.SYMBOL_RESOLVER_KEY, symbolResolver);
+ }
+ })
+ ));
+ setLanguageLevel(LanguageLevel.JAVA_8);
+ }
public boolean isAttributeComments() {
return attributeComments;
@@ -100,17 +164,45 @@ public class ParserConfiguration {
return this;
}
- public Validator getValidator() {
- return validator;
+ /**
+ * @deprecated use getLanguageLevel
+ */
+ @Deprecated
+ public Optional<Validator> getValidator() {
+ throw new IllegalStateException("method is deprecated");
}
/**
- * The validator to run directly after parsing.
- * By default it is {@link Java8Validator}
+ * @deprecated use setLanguageLevel, or getPostProcessors if you use a custom validator.
*/
+ @Deprecated
public ParserConfiguration setValidator(Validator validator) {
- assertNotNull(validator);
- this.validator = validator;
+ // This whole method is a backwards compatability hack.
+ if (validator instanceof Java10Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_10_PREVIEW);
+ } else if (validator instanceof Java9Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_9);
+ } else if (validator instanceof Java8Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_8);
+ } else if (validator instanceof Java7Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_7);
+ } else if (validator instanceof Java6Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_6);
+ } else if (validator instanceof Java5Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_5);
+ } else if (validator instanceof Java1_4Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_1_4);
+ } else if (validator instanceof Java1_3Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_1_3);
+ } else if (validator instanceof Java1_2Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_1_2);
+ } else if (validator instanceof Java1_1Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_1_1);
+ } else if (validator instanceof Java1_0Validator) {
+ setLanguageLevel(LanguageLevel.JAVA_1_0);
+ } else if (validator instanceof NoProblemsValidator) {
+ setLanguageLevel(LanguageLevel.ANY);
+ }
return this;
}
@@ -142,4 +234,17 @@ public class ParserConfiguration {
this.symbolResolver = symbolResolver;
return this;
}
+
+ public List<ParseResult.PostProcessor> getPostProcessors() {
+ return postProcessors;
+ }
+
+ public ParserConfiguration setLanguageLevel(LanguageLevel languageLevel) {
+ this.languageLevel = assertNotNull(languageLevel);
+ return this;
+ }
+
+ public LanguageLevel getLanguageLevel() {
+ return languageLevel;
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
index 85909736a..98d0bbcb6 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
@@ -108,11 +108,13 @@ public abstract class Node implements Cloneable, HasParentNode<Node>, Visitable,
/**
* Notify exclusively for changes happening on this node alone.
*/
- JUST_THIS_NODE, /**
+ JUST_THIS_NODE,
+ /**
* Notify for changes happening on this node and all its descendants existing at the moment in
* which the observer was registered. Nodes attached later will not be observed.
*/
- THIS_NODE_AND_EXISTING_DESCENDANTS, /**
+ THIS_NODE_AND_EXISTING_DESCENDANTS,
+ /**
* Notify for changes happening on this node and all its descendants. The descendants existing at the moment in
* which the observer was registered will be observed immediately. As new nodes are attached later they are
* automatically registered to be observed.
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java b/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java
index 3fd0a4419..f370e960d 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java
@@ -87,6 +87,14 @@ public class NodeList<N extends Node> implements List<N>, Iterable<N>, HasParent
return innerList.remove(node);
}
+ public N removeFirst() {
+ return remove(0);
+ }
+
+ public N removeLast() {
+ return remove(innerList.size() - 1);
+ }
+
@SafeVarargs
public static <X extends Node> NodeList<X> nodeList(X... nodes) {
final NodeList<X> nodeList = new NodeList<>();
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/AssignExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/AssignExpr.java
index db03718ae..fbb46874d 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/AssignExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/AssignExpr.java
@@ -24,19 +24,14 @@ import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
-
import static com.github.javaparser.utils.Utils.assertNotNull;
-
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.AssignExprMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.printer.Printable;
-
import javax.annotation.Generated;
-
import com.github.javaparser.TokenRange;
-
import java.util.function.Consumer;
import java.util.Optional;
@@ -78,7 +73,7 @@ public final class AssignExpr extends Expression {
}
public Optional<BinaryExpr.Operator> toBinaryOperator() {
- switch (this) {
+ switch(this) {
case PLUS:
return Optional.of(BinaryExpr.Operator.PLUS);
case MINUS:
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/BinaryExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/BinaryExpr.java
index ac4729ac9..5ec79c0af 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/BinaryExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/BinaryExpr.java
@@ -24,19 +24,14 @@ import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
-
import static com.github.javaparser.utils.Utils.assertNotNull;
-
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.BinaryExprMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.printer.Printable;
-
import javax.annotation.Generated;
-
import com.github.javaparser.TokenRange;
-
import java.util.function.Consumer;
import java.util.Optional;
@@ -83,7 +78,7 @@ public final class BinaryExpr extends Expression {
}
public Optional<AssignExpr.Operator> toAssignOperator() {
- switch (this) {
+ switch(this) {
case BINARY_OR:
return Optional.of(AssignExpr.Operator.BINARY_OR);
case BINARY_AND:
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/ObjectCreationExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/ObjectCreationExpr.java
index 7b702c581..c4fe045b7 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/ObjectCreationExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/ObjectCreationExpr.java
@@ -32,8 +32,6 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
-import java.util.Arrays;
-import java.util.List;
import java.util.Optional;
import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.ast.Node;
@@ -44,7 +42,6 @@ import javax.annotation.Generated;
import com.github.javaparser.TokenRange;
import com.github.javaparser.metamodel.OptionalProperty;
import com.github.javaparser.resolution.declarations.ResolvedConstructorDeclaration;
-import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
import java.util.function.Consumer;
/**
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java
index 05452bdc8..76dba1f3f 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java
@@ -61,7 +61,8 @@ public final class ArrayType extends ReferenceType implements NodeWithAnnotation
/**
* The [] were found on the name, like "int a[]" or "String abc()[][]"
*/
- NAME, /**
+ NAME,
+ /**
* The [] were found on the type, like "int[] a" or "String[][] abc()"
*/
TYPE
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java
index b28db1db4..acaf5a9ed 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java
@@ -349,4 +349,23 @@ public abstract class Type extends Node implements Resolvable<Object> {
public Optional<WildcardType> toWildcardType() {
return Optional.empty();
}
+
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public boolean isVarType() {
+ return false;
+ }
+
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public VarType asVarType() {
+ throw new IllegalStateException(f("%s is not an VarType", this));
+ }
+
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public Optional<VarType> toVarType() {
+ return Optional.empty();
+ }
+
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public void ifVarType(Consumer<VarType> action) {
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/VarType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/VarType.java
new file mode 100644
index 000000000..0d6296655
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/VarType.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2016 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.type;
+
+import com.github.javaparser.TokenRange;
+import com.github.javaparser.ast.AllFieldsConstructor;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.NodeList;
+import com.github.javaparser.ast.expr.AnnotationExpr;
+import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
+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.VoidTypeMetaModel;
+import com.github.javaparser.resolution.types.ResolvedVoidType;
+import javax.annotation.Generated;
+import java.util.Optional;
+import java.util.function.Consumer;
+import com.github.javaparser.metamodel.VarTypeMetaModel;
+
+public final class VarType extends Type {
+
+ @AllFieldsConstructor
+ public VarType() {
+ this(null);
+ }
+
+ /**
+ * This constructor is used by the parser and is considered private.
+ */
+ @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
+ public VarType(TokenRange tokenRange) {
+ super(tokenRange);
+ customInitialization();
+ }
+
+ @Override
+ public VarType setAnnotations(NodeList<AnnotationExpr> annotations) {
+ return (VarType) super.setAnnotations(annotations);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
+ public boolean remove(Node node) {
+ if (node == null)
+ return false;
+ return super.remove(node);
+ }
+
+ @Override
+ public String asString() {
+ return "var";
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
+ public VarType clone() {
+ return (VarType) accept(new CloneVisitor(), null);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
+ public VarTypeMetaModel getMetaModel() {
+ return JavaParserMetaModel.varTypeMetaModel;
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
+ public boolean replace(Node node, Node replacementNode) {
+ if (node == null)
+ return false;
+ return super.replace(node, replacementNode);
+ }
+
+ @Override
+ public ResolvedVoidType resolve() {
+ return getSymbolResolver().toResolvedType(this, ResolvedVoidType.class);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
+ public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
+ return v.visit(this, arg);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
+ public <A> void accept(final VoidVisitor<A> v, final A arg) {
+ v.visit(this, arg);
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public boolean isVarType() {
+ return true;
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public VarType asVarType() {
+ return this;
+ }
+
+ @Override
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public Optional<VarType> toVarType() {
+ return Optional.of(this);
+ }
+
+ @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
+ public void ifVarType(Consumer<VarType> action) {
+ action.accept(this);
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java10Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java10Validator.java
new file mode 100644
index 000000000..c551013a8
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java10Validator.java
@@ -0,0 +1,20 @@
+package com.github.javaparser.ast.validator;
+
+import com.github.javaparser.ast.type.VarType;
+
+/**
+ * This validator validates according to Java 10 syntax rules.
+ */
+public class Java10Validator extends Java9Validator {
+
+ protected final Validator varOnlyOnLocalVariableDefinitionAndFor = new SingleNodeTypeValidator<>(VarType.class, (n, reporter) -> {
+
+ });
+
+ public Java10Validator() {
+ super();
+ add(varOnlyOnLocalVariableDefinitionAndFor);
+ /* There is no validator that validates that "var" is not used in Java 9 and lower, since the parser will never create a VarType node,
+ because that is done by the Java10 postprocessor. You can add it by hand, but that is obscure enough to ignore. */
+ }
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/NoProblemsValidator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/NoProblemsValidator.java
index ceecf1752..15edbf7f3 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/NoProblemsValidator.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/NoProblemsValidator.java
@@ -1,10 +1,14 @@
package com.github.javaparser.ast.validator;
+import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.ast.Node;
/**
* Stub validator for when no validation is wanted.
+ *
+ * @deprecated when setting a language validator, try {@link com.github.javaparser.ParserConfiguration#setLanguageLevel(ParserConfiguration.LanguageLevel)} with ANY.
*/
+@Deprecated
public final class NoProblemsValidator implements Validator {
@Override
public void accept(Node node, ProblemReporter problemReporter) {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/ProblemReporter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/ProblemReporter.java
index f5dc663b2..eb54810c1 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/ProblemReporter.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/ProblemReporter.java
@@ -4,7 +4,7 @@ import com.github.javaparser.Problem;
import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.nodeTypes.NodeWithTokenRange;
-import java.util.List;
+import java.util.function.Consumer;
import static com.github.javaparser.utils.CodeGenerationUtils.f;
@@ -12,10 +12,10 @@ import static com.github.javaparser.utils.CodeGenerationUtils.f;
* A simple interface where validators can report found problems.
*/
public class ProblemReporter {
- private final List<Problem> problems;
+ private final Consumer<Problem> problemConsumer;
- public ProblemReporter(List<Problem> problems) {
- this.problems = problems;
+ public ProblemReporter(Consumer<Problem> problemConsumer) {
+ this.problemConsumer = problemConsumer;
}
/**
@@ -29,6 +29,6 @@ public class ProblemReporter {
}
public void report(TokenRange range, String message, Object... args) {
- problems.add(new Problem(f(message, args), range, null));
+ problemConsumer.accept(new Problem(f(message, args), range, null));
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/TypedValidator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/TypedValidator.java
index e6db75fb3..588c53f11 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/TypedValidator.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/TypedValidator.java
@@ -1,5 +1,6 @@
package com.github.javaparser.ast.validator;
+import com.github.javaparser.ParseResult;
import com.github.javaparser.ast.Node;
import java.util.function.BiConsumer;
@@ -13,4 +14,11 @@ public interface TypedValidator<N extends Node> extends BiConsumer<N, ProblemRep
* @param problemReporter when found, validation errors can be reported here
*/
void accept(N node, ProblemReporter problemReporter);
+
+ @SuppressWarnings("unchecked")
+ default ParseResult.PostProcessor postProcessor() {
+ return (result, configuration) ->
+ result.getResult().ifPresent(node ->
+ accept((N) node, new ProblemReporter(problem -> result.getProblems().add(problem))));
+ }
}
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 e5b88e1a1..4ae343ac6 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
@@ -1068,4 +1068,13 @@ public class CloneVisitor implements GenericVisitor<Visitable, Object> {
r.setComment(comment);
return r;
}
+
+ @Override
+ public Visitable visit(final VarType n, final Object arg) {
+ NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
+ Comment comment = cloneNode(n.getComment(), arg);
+ VarType r = new VarType(n.getTokenRange().orElse(null));
+ r.setComment(comment);
+ return r;
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java
index 49a2ee278..2062185a1 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
@@ -1376,4 +1376,14 @@ public class EqualsVisitor implements GenericVisitor<Boolean, Visitable> {
return false;
return true;
}
+
+ @Override
+ public Boolean visit(final VarType n, final Visitable arg) {
+ final VarType n2 = (VarType) arg;
+ if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
+ 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 14ae6c5b5..2defdfa9f 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
@@ -2041,4 +2041,21 @@ public abstract class GenericListVisitorAdapter<R, A> implements GenericVisitor<
}
return result;
}
+
+ @Override
+ public List<R> visit(final VarType n, final A arg) {
+ List<R> result = new ArrayList<>();
+ List<R> tmp;
+ {
+ tmp = n.getAnnotations().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;
+ }
}
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 3fa06f343..494013cc3 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
@@ -314,4 +314,6 @@ public interface GenericVisitor<R, A> {
@Generated("com.github.javaparser.generator.core.visitor.GenericVisitorGenerator")
R visit(ReceiverParameter n, A arg);
+
+ R visit(VarType 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 5b4bf55c0..3d5de4fbb 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
@@ -2035,4 +2035,20 @@ public abstract class GenericVisitorAdapter<R, A> implements GenericVisitor<R, A
}
return null;
}
+
+ @Override
+ public R visit(final VarType n, final A arg) {
+ R result;
+ {
+ result = n.getAnnotations().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;
+ }
}
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 1f9362860..2cd9a0fdc 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
@@ -595,4 +595,9 @@ public abstract class GenericVisitorWithDefaults<R, A> implements GenericVisitor
public R visit(final ReceiverParameter n, final A arg) {
return defaultAction(n, arg);
}
+
+ @Override
+ public R visit(final VarType 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 2a12b7f69..92da13e8f 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
@@ -510,4 +510,9 @@ public class HashCodeVisitor implements GenericVisitor<Integer, Void> {
public Integer visit(final ReceiverParameter n, final Void arg) {
return (n.getAnnotations().accept(this, arg)) * 31 + (n.getName().accept(this, arg)) * 31 + (n.getType().accept(this, arg)) * 31 + (n.getComment().isPresent() ? n.getComment().get().accept(this, arg) : 0);
}
+
+ @Override
+ public Integer visit(final VarType n, final Void arg) {
+ return (n.getAnnotations().accept(this, arg)) * 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 ae82fc282..c7808641d 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
@@ -1285,4 +1285,13 @@ public class ModifierVisitor<A> implements GenericVisitor<Visitable, A> {
n.setComment(comment);
return n;
}
+
+ @Override
+ public Visitable visit(final VarType n, final A arg) {
+ NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg);
+ Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null);
+ n.setAnnotations(annotations);
+ 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 8e6862995..b3c1dceff 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
@@ -1143,4 +1143,12 @@ public class NoCommentEqualsVisitor implements GenericVisitor<Boolean, Visitable
return false;
return true;
}
+
+ @Override
+ public Boolean visit(final VarType n, final Visitable arg) {
+ final VarType n2 = (VarType) arg;
+ if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
+ 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 914391c90..774e5d914 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
@@ -502,4 +502,9 @@ public class NoCommentHashCodeVisitor implements GenericVisitor<Integer, Void> {
public Integer visit(final ReceiverParameter n, final Void arg) {
return (n.getAnnotations().accept(this, arg)) * 31 + (n.getName().accept(this, arg)) * 31 + (n.getType().accept(this, arg));
}
+
+ @Override
+ public Integer visit(final VarType n, final Void arg) {
+ return (n.getAnnotations().accept(this, arg));
+ }
}
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 dceeabba3..7c642bbdb 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
@@ -588,4 +588,9 @@ public class ObjectIdentityEqualsVisitor implements GenericVisitor<Boolean, Visi
public Boolean visit(final ReceiverParameter n, final Visitable arg) {
return n == arg;
}
+
+ @Override
+ public Boolean visit(final VarType 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 8f7a5e386..c53cf79a8 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
@@ -502,4 +502,9 @@ public class ObjectIdentityHashCodeVisitor implements GenericVisitor<Integer, Vo
public Integer visit(final ReceiverParameter n, final Void arg) {
return n.hashCode();
}
+
+ @Override
+ public Integer visit(final VarType n, final Void arg) {
+ return n.hashCode();
+ }
}
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 e797d8ef4..37c9c1c3b 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
@@ -309,4 +309,6 @@ public interface VoidVisitor<A> {
@Generated("com.github.javaparser.generator.core.visitor.VoidVisitorGenerator")
void visit(ReceiverParameter n, A arg);
+
+ void visit(VarType 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 d0cfbe401..1ee82669a 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
@@ -764,4 +764,10 @@ public abstract class VoidVisitorAdapter<A> implements VoidVisitor<A> {
n.getType().accept(this, arg);
n.getComment().ifPresent(l -> l.accept(this, arg));
}
+
+ @Override
+ public void visit(final VarType n, final A arg) {
+ n.getAnnotations().forEach(p -> p.accept(this, 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 ba5a93db2..6622567e6 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
@@ -591,4 +591,9 @@ public abstract class VoidVisitorWithDefaults<A> implements VoidVisitor<A> {
public void visit(final ReceiverParameter n, final A arg) {
defaultAction(n, arg);
}
+
+ @Override
+ public void visit(final VarType 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 41ed01bdc..62e1957cc 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
@@ -109,8 +109,11 @@ public class Javadoc {
return description;
}
+ /**
+ * @return the current List of associated JavadocBlockTags
+ */
public List<JavadocBlockTag> getBlockTags() {
- return blockTags;
+ return this.blockTags;
}
@Override
diff --git a/javaparser-core/src/main/java/com/github/javaparser/javadoc/description/JavadocDescription.java b/javaparser-core/src/main/java/com/github/javaparser/javadoc/description/JavadocDescription.java
index 2718551b6..82f818a98 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/javadoc/description/JavadocDescription.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/javadoc/description/JavadocDescription.java
@@ -69,8 +69,18 @@ public class JavadocDescription {
elements = new LinkedList<>();
}
- public void addElement(JavadocDescriptionElement element) {
- this.elements.add(element);
+ public JavadocDescription(List<JavadocDescriptionElement> elements) {
+ this();
+
+ this.elements.addAll(elements);
+ }
+
+ public boolean addElement(JavadocDescriptionElement element) {
+ return this.elements.add(element);
+ }
+
+ public List<JavadocDescriptionElement> getElements() {
+ return this.elements;
}
public String toText() {
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 4d81ec662..bffbd3711 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
@@ -349,6 +349,7 @@ public final class JavaParserMetaModel {
nodeMetaModels.add(unionTypeMetaModel);
nodeMetaModels.add(unknownTypeMetaModel);
nodeMetaModels.add(unparsableStmtMetaModel);
+ nodeMetaModels.add(varTypeMetaModel);
nodeMetaModels.add(variableDeclarationExprMetaModel);
nodeMetaModels.add(variableDeclaratorMetaModel);
nodeMetaModels.add(voidTypeMetaModel);
@@ -441,7 +442,7 @@ public final class JavaParserMetaModel {
fieldDeclarationMetaModel.getDeclaredPropertyMetaModels().add(fieldDeclarationMetaModel.modifiersPropertyMetaModel);
fieldDeclarationMetaModel.variablesPropertyMetaModel = new PropertyMetaModel(fieldDeclarationMetaModel, "variables", com.github.javaparser.ast.body.VariableDeclarator.class, Optional.of(variableDeclaratorMetaModel), false, true, true, false, false);
fieldDeclarationMetaModel.getDeclaredPropertyMetaModels().add(fieldDeclarationMetaModel.variablesPropertyMetaModel);
- fieldDeclarationMetaModel.maximumCommonTypePropertyMetaModel = new PropertyMetaModel(fieldDeclarationMetaModel, "maximumCommonType", com.github.javaparser.ast.type.Type.class, Optional.of(typeMetaModel), false, false, false, false, false);
+ fieldDeclarationMetaModel.maximumCommonTypePropertyMetaModel = new PropertyMetaModel(fieldDeclarationMetaModel, "maximumCommonType", com.github.javaparser.ast.type.Type.class, Optional.of(typeMetaModel), true, false, false, false, false);
fieldDeclarationMetaModel.getDerivedPropertyMetaModels().add(fieldDeclarationMetaModel.maximumCommonTypePropertyMetaModel);
initializerDeclarationMetaModel.bodyPropertyMetaModel = new PropertyMetaModel(initializerDeclarationMetaModel, "body", com.github.javaparser.ast.stmt.BlockStmt.class, Optional.of(blockStmtMetaModel), false, false, false, false, false);
initializerDeclarationMetaModel.getDeclaredPropertyMetaModels().add(initializerDeclarationMetaModel.bodyPropertyMetaModel);
@@ -605,7 +606,7 @@ public final class JavaParserMetaModel {
variableDeclarationExprMetaModel.getDeclaredPropertyMetaModels().add(variableDeclarationExprMetaModel.modifiersPropertyMetaModel);
variableDeclarationExprMetaModel.variablesPropertyMetaModel = new PropertyMetaModel(variableDeclarationExprMetaModel, "variables", com.github.javaparser.ast.body.VariableDeclarator.class, Optional.of(variableDeclaratorMetaModel), false, true, true, false, false);
variableDeclarationExprMetaModel.getDeclaredPropertyMetaModels().add(variableDeclarationExprMetaModel.variablesPropertyMetaModel);
- variableDeclarationExprMetaModel.maximumCommonTypePropertyMetaModel = new PropertyMetaModel(variableDeclarationExprMetaModel, "maximumCommonType", com.github.javaparser.ast.type.Type.class, Optional.of(typeMetaModel), false, false, false, false, false);
+ variableDeclarationExprMetaModel.maximumCommonTypePropertyMetaModel = new PropertyMetaModel(variableDeclarationExprMetaModel, "maximumCommonType", com.github.javaparser.ast.type.Type.class, Optional.of(typeMetaModel), true, false, false, false, false);
variableDeclarationExprMetaModel.getDerivedPropertyMetaModels().add(variableDeclarationExprMetaModel.maximumCommonTypePropertyMetaModel);
importDeclarationMetaModel.isAsteriskPropertyMetaModel = new PropertyMetaModel(importDeclarationMetaModel, "isAsterisk", boolean.class, Optional.empty(), false, false, false, false, false);
importDeclarationMetaModel.getDeclaredPropertyMetaModels().add(importDeclarationMetaModel.isAsteriskPropertyMetaModel);
@@ -956,6 +957,8 @@ public final class JavaParserMetaModel {
public static final WildcardTypeMetaModel wildcardTypeMetaModel = new WildcardTypeMetaModel(Optional.of(typeMetaModel));
+ public static final VarTypeMetaModel varTypeMetaModel = new VarTypeMetaModel(Optional.of(typeMetaModel));
+
public static final ModuleRequiresStmtMetaModel moduleRequiresStmtMetaModel = new ModuleRequiresStmtMetaModel(Optional.of(moduleStmtMetaModel));
public static final ModuleExportsStmtMetaModel moduleExportsStmtMetaModel = new ModuleExportsStmtMetaModel(Optional.of(moduleStmtMetaModel));
diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/VarTypeMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/VarTypeMetaModel.java
new file mode 100644
index 000000000..1ada830c5
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/VarTypeMetaModel.java
@@ -0,0 +1,10 @@
+package com.github.javaparser.metamodel;
+
+import java.util.Optional;
+
+public class VarTypeMetaModel extends TypeMetaModel {
+
+ VarTypeMetaModel(Optional<BaseNodeMetaModel> superBaseNodeMetaModel) {
+ super(superBaseNodeMetaModel, com.github.javaparser.ast.type.VarType.class, "VarType", "com.github.javaparser.ast.type", 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 3fac25cd2..8d3fca97a 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
@@ -793,6 +793,8 @@ public class ConcreteSyntaxModel {
concreteSyntaxModelByClass.put(VoidType.class, sequence(comment(), annotations(), token(GeneratedJavaParserConstants.VOID)));
+ concreteSyntaxModelByClass.put(VarType.class, sequence(comment(), annotations(), string(GeneratedJavaParserConstants.IDENTIFIER, "var")));
+
concreteSyntaxModelByClass.put(WildcardType.class, sequence(comment(), annotations(), token(GeneratedJavaParserConstants.HOOK),
CsmElement.conditional(ObservableProperty.EXTENDED_TYPE, IS_PRESENT, CsmElement.sequence(space(), token(GeneratedJavaParserConstants.EXTENDS), space(), CsmElement.child(EXTENDED_TYPE))),
CsmElement.conditional(ObservableProperty.SUPER_TYPE, IS_PRESENT, CsmElement.sequence(space(), token(GeneratedJavaParserConstants.SUPER), space(), CsmElement.child(SUPER_TYPE)))));
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java
index 3a09cbf9b..d68f38752 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java
@@ -559,6 +559,13 @@ public class PrettyPrintVisitor implements VoidVisitor<Void> {
}
@Override
+ public void visit(final VarType n, final Void arg) {
+ printComment(n.getComment(), arg);
+ printAnnotations(n.getAnnotations(), false, arg);
+ printer.print("var");
+ }
+
+ @Override
public void visit(final ArrayAccessExpr n, final Void arg) {
printComment(n.getComment(), arg);
n.getName().accept(this, arg);
diff --git a/javaparser-core/src/main/java/com/github/javaparser/version/Java10PostProcessor.java b/javaparser-core/src/main/java/com/github/javaparser/version/Java10PostProcessor.java
new file mode 100644
index 000000000..569f461ad
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/version/Java10PostProcessor.java
@@ -0,0 +1,30 @@
+package com.github.javaparser.version;
+
+import com.github.javaparser.ParseResult;
+import com.github.javaparser.ParserConfiguration;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.type.ClassOrInterfaceType;
+import com.github.javaparser.ast.type.VarType;
+import com.github.javaparser.ast.validator.Java10Validator;
+import com.github.javaparser.ast.validator.ProblemReporter;
+import com.github.javaparser.ast.visitor.ModifierVisitor;
+import com.github.javaparser.ast.visitor.Visitable;
+
+/**
+ * Processes the generic AST into a Java 10 AST and validates it.
+ */
+public class Java10PostProcessor implements ParseResult.PostProcessor {
+ private final Java10Validator validator = new Java10Validator();
+
+ @Override
+ public void process(ParseResult<? extends Node> result, ParserConfiguration configuration) {
+ result.getResult().ifPresent(node -> {
+ node.findAll(ClassOrInterfaceType.class).forEach(n -> {
+ if (n.getNameAsString().equals("var")) {
+ n.replace(new VarType(n.getTokenRange().orElse(null)));
+ }
+ });
+ validator.accept(node, new ProblemReporter(problem -> result.getProblems().add(problem)));
+ });
+ }
+}