aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java69
-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/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/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/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/PrettyPrintVisitor.java7
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/version/Java10Processor.java28
-rw-r--r--javaparser-metamodel-generator/src/main/java/com/github/javaparser/generator/metamodel/MetaModelGenerator.java1
-rw-r--r--javaparser-testing/src/test/java/com/github/javaparser/version/Java10ProcessorTest.java85
29 files changed, 461 insertions, 33 deletions
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 05afde2fb..15585a95d 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java
@@ -23,22 +23,46 @@ package com.github.javaparser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node;
-import com.github.javaparser.ast.validator.Java8Validator;
-import com.github.javaparser.ast.validator.ProblemReporter;
-import com.github.javaparser.ast.validator.Validator;
+import com.github.javaparser.ast.validator.*;
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;
import com.github.javaparser.resolution.SymbolResolver;
+import com.github.javaparser.version.Java10Processor;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import static com.github.javaparser.utils.Utils.assertNotNull;
+
/**
* The configuration that is used by the parser.
* Note that this can be changed even when reusing the same JavaParser instance.
* 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(null, new Java10Processor());
+
+ 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;
@@ -46,7 +70,8 @@ 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() {
@@ -64,9 +89,15 @@ public class ParserConfiguration {
new CommentsInserter(configuration).insertComments(resultNode, comments.copy().getComments())));
}
});
- postProcessors.add((result, configuration) ->
- getValidator().ifPresent(validator ->
- validator.accept(result.getResult().get(), new ProblemReporter(newProblem -> result.getProblems().add(newProblem)))));
+ 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) {
@@ -74,6 +105,7 @@ public class ParserConfiguration {
}
})
));
+ setLanguageLevel(LanguageLevel.JAVA_8);
}
public boolean isAttributeComments() {
@@ -132,18 +164,20 @@ public class ParserConfiguration {
return this;
}
+ /**
+ * @deprecated use getLanguageLevel
+ */
+ @Deprecated
public Optional<Validator> getValidator() {
- return Optional.of(validator);
+ throw new IllegalStateException("method is deprecated");
}
/**
- * The language level validator to run directly after parsing.
- * By default it is {@link Java8Validator}
- * If it is null, all validation is turned off and only hard parse errors will be reported.
+ * @deprecated use setLanguageLevel, or getPostProcessors if you use a custom validator.
*/
+ @Deprecated
public ParserConfiguration setValidator(Validator validator) {
- this.validator = validator;
- return this;
+ throw new IllegalStateException("method is deprecated");
}
/**
@@ -178,4 +212,13 @@ public class ParserConfiguration {
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 400777dd9..285c2385f 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/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/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/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/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/Java10Processor.java b/javaparser-core/src/main/java/com/github/javaparser/version/Java10Processor.java
new file mode 100644
index 000000000..411ce72b2
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/version/Java10Processor.java
@@ -0,0 +1,28 @@
+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.visitor.ModifierVisitor;
+import com.github.javaparser.ast.visitor.Visitable;
+
+/**
+ * Processes the generic AST into a Java 10 AST and validates it.
+ */
+public class Java10Processor implements ParseResult.PostProcessor {
+ @Override
+ public void process(ParseResult<? extends Node> result, ParserConfiguration configuration) {
+ result.getResult().get().accept(
+ new ModifierVisitor<Void>() {
+ @Override
+ public Visitable visit(ClassOrInterfaceType n, Void arg) {
+ if (n.getNameAsString().equals("var")) {
+ return new VarType(n.getTokenRange().orElse(null));
+ }
+ return super.visit(n, arg);
+ }
+ }, null);
+ }
+}
diff --git a/javaparser-metamodel-generator/src/main/java/com/github/javaparser/generator/metamodel/MetaModelGenerator.java b/javaparser-metamodel-generator/src/main/java/com/github/javaparser/generator/metamodel/MetaModelGenerator.java
index 15772b3e5..43d9112fd 100644
--- a/javaparser-metamodel-generator/src/main/java/com/github/javaparser/generator/metamodel/MetaModelGenerator.java
+++ b/javaparser-metamodel-generator/src/main/java/com/github/javaparser/generator/metamodel/MetaModelGenerator.java
@@ -140,6 +140,7 @@ public class MetaModelGenerator {
add(UnknownType.class);
add(VoidType.class);
add(WildcardType.class);
+ add(VarType.class);
add(ModuleRequiresStmt.class);
add(ModuleExportsStmt.class);
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/version/Java10ProcessorTest.java b/javaparser-testing/src/test/java/com/github/javaparser/version/Java10ProcessorTest.java
new file mode 100644
index 000000000..6ebb89cfb
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/version/Java10ProcessorTest.java
@@ -0,0 +1,85 @@
+package com.github.javaparser.version;
+
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ParseResult;
+import com.github.javaparser.ParserConfiguration;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.stmt.Statement;
+import org.junit.Test;
+
+import static com.github.javaparser.ParseStart.COMPILATION_UNIT;
+import static com.github.javaparser.ParseStart.STATEMENT;
+import static com.github.javaparser.ParserConfiguration.LanguageLevel.*;
+import static com.github.javaparser.Providers.provider;
+import static com.github.javaparser.ast.validator.Java1_1ValidatorTest.allModifiers;
+import static com.github.javaparser.utils.TestUtils.assertNoProblems;
+import static com.github.javaparser.utils.TestUtils.assertProblems;
+
+public class Java10ProcessorTest {
+ public static final JavaParser javaParser = new JavaParser(new ParserConfiguration().setLanguageLevel(JAVA_10));
+
+ @Test
+ public void varIsAType() {
+ ParseResult<Statement> statement = javaParser.parse(STATEMENT, provider("var x=\"\";"));
+
+ }
+
+ @Test
+ public void underscoreIdentifiers() {
+ ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("a.b._.c.d = act(_, _ -> _);"));
+ assertProblems(result,
+ "(line 1,col 5) '_' is a reserved keyword.",
+ "(line 1,col 17) '_' is a reserved keyword.",
+ "(line 1,col 20) '_' is a reserved keyword.",
+ "(line 1,col 25) '_' is a reserved keyword."
+ );
+ }
+
+ @Test
+ public void moduleRequires() {
+ ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("module x{requires " + allModifiers + " a;}"));
+ assertProblems(result,
+ "(line 1,col 10) Can have only one of 'public', 'protected', 'private'.",
+ "(line 1,col 10) Can have only one of 'final', 'abstract'.",
+ "(line 1,col 10) Can have only one of 'native', 'strictfp'.",
+ "(line 1,col 10) 'transient' is not allowed here.",
+ "(line 1,col 10) 'volatile' is not allowed here.",
+ "(line 1,col 10) 'final' is not allowed here.",
+ "(line 1,col 10) 'synchronized' is not allowed here.",
+ "(line 1,col 10) 'default' is not allowed here.",
+ "(line 1,col 10) 'native' is not allowed here.",
+ "(line 1,col 10) 'private' is not allowed here.",
+ "(line 1,col 10) 'protected' is not allowed here.",
+ "(line 1,col 10) 'strictfp' is not allowed here.",
+ "(line 1,col 10) 'abstract' is not allowed here.",
+ "(line 1,col 10) 'public' is not allowed here."
+ );
+ }
+
+ @Test
+ public void interfaceMethod() {
+ ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("interface X{" + allModifiers + "int x(){};}"));
+ assertProblems(result,
+ "(line 1,col 13) Can have only one of 'public', 'protected', 'private'.",
+ "(line 1,col 13) Can have only one of 'final', 'abstract'.",
+ "(line 1,col 13) Can have only one of 'native', 'strictfp'.",
+ "(line 1,col 13) Cannot be 'abstract' and also 'private', 'static', 'final', 'native', 'strictfp', 'synchronized'.",
+ "(line 1,col 13) 'transient' is not allowed here.",
+ "(line 1,col 13) 'volatile' is not allowed here.",
+ "(line 1,col 13) 'transitive' is not allowed here."
+ );
+ }
+
+ @Test
+ public void modules() {
+ ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("open module x {}"));
+ assertNoProblems(result);
+ }
+
+ @Test
+ public void tryWithResourceReference() {
+ ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("try(a.b.c){}"));
+ assertNoProblems(result);
+ }
+
+}