Skip to content

Commit

Permalink
Validate positions of var
Browse files Browse the repository at this point in the history
  • Loading branch information
matozoid committed Feb 20, 2018
1 parent fbd8c73 commit 8d247c6
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 19 deletions.
@@ -1,14 +1,38 @@
package com.github.javaparser.ast.validator; package com.github.javaparser.ast.validator;


import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import com.github.javaparser.ast.stmt.ForStmt;
import com.github.javaparser.ast.stmt.ForeachStmt;
import com.github.javaparser.ast.type.VarType; import com.github.javaparser.ast.type.VarType;


import java.util.Optional;

/** /**
* This validator validates according to Java 10 syntax rules. * This validator validates according to Java 10 syntax rules.
*/ */
public class Java10Validator extends Java9Validator { public class Java10Validator extends Java9Validator {


protected final Validator varOnlyOnLocalVariableDefinitionAndFor = new SingleNodeTypeValidator<>(VarType.class, (n, reporter) -> { protected final Validator varOnlyOnLocalVariableDefinitionAndFor = new SingleNodeTypeValidator<>(VarType.class, (n, reporter) -> {
// TODO issue 1407 Optional<VariableDeclarator> variableDeclarator = n.findParent(VariableDeclarator.class);
if (!variableDeclarator.isPresent()) {
reporter.report(n, "\"var\" is not allowed here.");
return;
}
variableDeclarator.ifPresent(vd -> {
Optional<Node> container = vd.getParentNode();
if (!container.isPresent()) {
reporter.report(n, "\"var\" is not allowed here.");
return;
}
container.ifPresent(c -> {
boolean positionIsFine = c instanceof ForStmt || c instanceof ForeachStmt || c instanceof VariableDeclarationExpr;
if (!positionIsFine) {
reporter.report(n, "\"var\" is not allowed here.");
}
});
});
}); });


public Java10Validator() { public Java10Validator() {
Expand Down
@@ -0,0 +1,56 @@
package com.github.javaparser.ast.validator;

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 Java10ValidatorTest {
public static final JavaParser javaParser = new JavaParser(new ParserConfiguration().setLanguageLevel(JAVA_10_PREVIEW));

@Test
public void varAllowedInLocalVariableDeclaration() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("var a = 5;"));
assertNoProblems(result);
}

@Test
public void varAllowedInForEach() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("for(var a : as){}"));
assertNoProblems(result);
}

@Test
public void varAllowedInOldFor() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("for(var a = 5;a<9;a++){}"));
assertNoProblems(result);
}

@Test
public void varNotAllowedInCast() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("int a = (var)20;"));
assertNoProblems(result);
}

@Test
public void varNotAllowedInTypeArguments() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("new X<var>();"));
assertProblems(result, "(line 1,col 7) \"var\" is not allowed here.");
}

@Test
public void varNotAllowedInLambdaParameters() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("x((var x) -> null);"));
assertProblems(result, "(line 1,col 4) \"var\" is not allowed here.");
}
}
Expand Up @@ -26,22 +26,4 @@ public void varIsAType() {


assertEquals(1, allVarTypes.size()); assertEquals(1, allVarTypes.size());
} }

@Test
public void varAllowedInLocalVariableDeclaration() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("var a = 5;"));
assertNoProblems(result);
}

@Test
public void varAllowedInForEach() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("for(var a : as){}"));
assertNoProblems(result);
}

@Test
public void varAllowedInOldFor() {
ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("for(var a = 5;a<9;a++){}"));
assertNoProblems(result);
}
} }

0 comments on commit 8d247c6

Please sign in to comment.