diff options
10 files changed, 127 insertions, 23 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 42a6fe067..deb8d4cdc 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ParserConfiguration.java @@ -27,6 +27,7 @@ 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 com.github.javaparser.version.Java11PostProcessor; import java.util.ArrayList; import java.util.List; @@ -41,7 +42,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull; */ public class ParserConfiguration { public enum LanguageLevel { - ANY(null, null), + RAW(null, null), JAVA_1_0(new Java1_0Validator(), null), JAVA_1_1(new Java1_1Validator(), null), JAVA_1_2(new Java1_2Validator(), null), @@ -52,7 +53,8 @@ public class ParserConfiguration { JAVA_7(new Java7Validator(), null), JAVA_8(new Java8Validator(), null), JAVA_9(new Java9Validator(), null), - JAVA_10_PREVIEW(null, new Java10PostProcessor()); + JAVA_10_PREVIEW(null, new Java10PostProcessor()), + JAVA_11_PREVIEW(null, new Java11PostProcessor()); final Validator validator; final ParseResult.PostProcessor postProcessor; @@ -201,7 +203,7 @@ public class ParserConfiguration { } else if (validator instanceof Java1_0Validator) { setLanguageLevel(LanguageLevel.JAVA_1_0); } else if (validator instanceof NoProblemsValidator) { - setLanguageLevel(LanguageLevel.ANY); + setLanguageLevel(LanguageLevel.RAW); } return 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 index c551013a8..b182e8db5 100644 --- 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 @@ -8,7 +8,7 @@ import com.github.javaparser.ast.type.VarType; public class Java10Validator extends Java9Validator { protected final Validator varOnlyOnLocalVariableDefinitionAndFor = new SingleNodeTypeValidator<>(VarType.class, (n, reporter) -> { - + // TODO issue 1407 }); public Java10Validator() { diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java11Validator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java11Validator.java new file mode 100644 index 000000000..d80577268 --- /dev/null +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/validator/Java11Validator.java @@ -0,0 +1,10 @@ +package com.github.javaparser.ast.validator; + +/** + * This validator validates according to Java 11 syntax rules. + */ +public class Java11Validator extends Java10Validator { + public Java11Validator() { + super(); + } +} 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 15edbf7f3..002668892 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 @@ -6,7 +6,7 @@ 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 when setting a language validator, try {@link com.github.javaparser.ParserConfiguration#setLanguageLevel(ParserConfiguration.LanguageLevel)} with RAW. */ @Deprecated public final class NoProblemsValidator implements Validator { 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 index 569f461ad..01251712e 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/version/Java10PostProcessor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/version/Java10PostProcessor.java @@ -7,24 +7,29 @@ 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; + +import static com.github.javaparser.ParseResult.*; /** * 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))); - } +public class Java10PostProcessor extends PostProcessors { + protected final PostProcessor java10Validator = new Java10Validator().postProcessor(); + protected final PostProcessor varNodeCreator = new PostProcessor() { + @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))); - }); + } + }; + + public Java10PostProcessor() { + add(varNodeCreator); + add(java10Validator); } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/version/Java11PostProcessor.java b/javaparser-core/src/main/java/com/github/javaparser/version/Java11PostProcessor.java new file mode 100644 index 000000000..5d36efc05 --- /dev/null +++ b/javaparser-core/src/main/java/com/github/javaparser/version/Java11PostProcessor.java @@ -0,0 +1,18 @@ +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.validator.Java11Validator; +import com.github.javaparser.ast.validator.ProblemReporter; + +/** + * Processes the generic AST into a Java 10 AST and validates it. + */ +public class Java11PostProcessor extends Java10PostProcessor { + protected final ParseResult.PostProcessor java11Validator = new Java11Validator().postProcessor(); + + public Java11PostProcessor() { + replace(java10Validator, java11Validator); + } +} diff --git a/javaparser-core/src/main/java/com/github/javaparser/version/PostProcessors.java b/javaparser-core/src/main/java/com/github/javaparser/version/PostProcessors.java new file mode 100644 index 000000000..4220de341 --- /dev/null +++ b/javaparser-core/src/main/java/com/github/javaparser/version/PostProcessors.java @@ -0,0 +1,49 @@ +package com.github.javaparser.version; + +import com.github.javaparser.ParseResult; +import com.github.javaparser.ParserConfiguration; +import com.github.javaparser.ast.Node; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static com.github.javaparser.ParseResult.PostProcessor; + +/** + * A post processor that will call a collection of post processors. + */ +public class PostProcessors implements PostProcessor { + private final List<PostProcessor> postProcessors = new ArrayList<>(); + + public PostProcessors(PostProcessor... postProcessors) { + this.postProcessors.addAll(Arrays.asList(postProcessors)); + } + + public List<PostProcessor> getPostProcessors() { + return postProcessors; + } + + public PostProcessors remove(PostProcessor postProcessor) { + if (!postProcessors.remove(postProcessor)) { + throw new AssertionError("Trying to remove a post processor that isn't there."); + } + return this; + } + + public PostProcessors replace(PostProcessor oldProcessor, PostProcessor newProcessor) { + remove(oldProcessor); + add(newProcessor); + return this; + } + + public PostProcessors add(PostProcessor newProcessor) { + postProcessors.add(newProcessor); + return this; + } + + @Override + public void process(ParseResult<? extends Node> result, ParserConfiguration configuration) { + postProcessors.forEach(pp -> pp.process(result, configuration)); + } +} diff --git a/javaparser-testing/src/test/java/com/github/javaparser/ParserConfigurationTest.java b/javaparser-testing/src/test/java/com/github/javaparser/ParserConfigurationTest.java index 292634d72..abc400912 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/ParserConfigurationTest.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/ParserConfigurationTest.java @@ -3,7 +3,6 @@ package com.github.javaparser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.stmt.Statement; -import com.github.javaparser.ast.validator.NoProblemsValidator; import org.junit.Test; import static com.github.javaparser.ParseStart.STATEMENT; @@ -25,7 +24,7 @@ public class ParserConfigurationTest { @Test public void noProblemsHere() { ParseResult<Statement> result = - new JavaParser(new ParserConfiguration().setLanguageLevel(ANY)) + new JavaParser(new ParserConfiguration().setLanguageLevel(RAW)) .parse(STATEMENT, provider("try{}")); assertEquals(true, result.isSuccessful()); } diff --git a/javaparser-testing/src/test/java/com/github/javaparser/ast/type/TypeTest.java b/javaparser-testing/src/test/java/com/github/javaparser/ast/type/TypeTest.java index aa2117291..17244f383 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/ast/type/TypeTest.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/ast/type/TypeTest.java @@ -6,7 +6,6 @@ import com.github.javaparser.ParseResult; import com.github.javaparser.ParserConfiguration; import com.github.javaparser.ast.expr.VariableDeclarationExpr; import com.github.javaparser.ast.validator.Java5Validator; -import com.github.javaparser.ast.validator.ProblemReporter; import org.junit.Test; import static com.github.javaparser.JavaParser.parseType; @@ -33,7 +32,7 @@ public class TypeTest { @Test public void primitiveTypeArgumentLenientValidator() { ParserConfiguration config = new ParserConfiguration() - .setLanguageLevel(ANY); + .setLanguageLevel(RAW); config.getPostProcessors().add(new Java5Validator() {{ remove(noPrimitiveGenericArguments); }}.postProcessor()); diff --git a/javaparser-testing/src/test/java/com/github/javaparser/version/Java11PostProcessorTest.java b/javaparser-testing/src/test/java/com/github/javaparser/version/Java11PostProcessorTest.java new file mode 100644 index 000000000..30115c87c --- /dev/null +++ b/javaparser-testing/src/test/java/com/github/javaparser/version/Java11PostProcessorTest.java @@ -0,0 +1,22 @@ +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.stmt.Statement; +import org.junit.Test; + +import static com.github.javaparser.ParseStart.STATEMENT; +import static com.github.javaparser.ParserConfiguration.LanguageLevel.JAVA_11_PREVIEW; +import static com.github.javaparser.Providers.provider; +import static com.github.javaparser.utils.TestUtils.assertNoProblems; + +public class Java11PostProcessorTest { + public static final JavaParser javaParser = new JavaParser(new ParserConfiguration().setLanguageLevel(JAVA_11_PREVIEW)); + + @Test + public void varAllowedInLocalVariableDeclaration() { + ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("x((var x, var y) -> x+y);")); + assertNoProblems(result); + } +} |