You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/06/26 02:54:53 UTC
[groovy] branch danielsun/tweak-statement-rule updated: Trivial
refactoring
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch danielsun/tweak-statement-rule
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/danielsun/tweak-statement-rule by this push:
new 59b59ec Trivial refactoring
59b59ec is described below
commit 59b59ecec1be31d4ce177901c6f0db67f775337f
Author: Daniel Sun <su...@apache.org>
AuthorDate: Fri Jun 26 10:54:26 2020 +0800
Trivial refactoring
---
.../apache/groovy/parser/antlr4/AstBuilder.java | 66 ++++++++++++++--------
1 file changed, 43 insertions(+), 23 deletions(-)
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 4e11861..6ce6000 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -113,6 +113,7 @@ import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
import org.codehaus.groovy.ast.stmt.ThrowStatement;
import org.codehaus.groovy.ast.stmt.TryCatchStatement;
import org.codehaus.groovy.ast.stmt.WhileStatement;
+import org.codehaus.groovy.ast.tools.ClosureUtils;
import org.codehaus.groovy.control.CompilationFailedException;
import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.control.SourceUnit;
@@ -2067,29 +2068,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
|| baseExpr instanceof GStringExpression /* e.g. "$m" 1, 2 */
|| (baseExpr instanceof ConstantExpression && isTrue(baseExpr, IS_STRING)) /* e.g. "m" 1, 2 */)
) {
- if (baseExpr instanceof VariableExpression) {
- /* Validate the following invalid cases:
- * 1) void m() {}
- * 2) String m() {}
- * Note: if the text of `VariableExpression` does not start with upper case character, e.g. task m() {}
- * ,it may be a command expression
- */
- if (isBuiltInType(baseExpr) || Character.isUpperCase(baseExpr.getText().codePointAt(0))) {
- if (arguments instanceof ArgumentListExpression) {
- List<Expression> expressionList = ((ArgumentListExpression) arguments).getExpressions();
- if (1 == expressionList.size()) {
- final Expression expression = expressionList.get(0);
- if (expression instanceof MethodCallExpression) {
- throw createParsingFailedException(
- "Method definition not expected here",
- tuple(baseExpr.getLineNumber(), baseExpr.getColumnNumber()),
- tuple(expression.getLastLineNumber(), expression.getLastColumnNumber())
- );
- }
- }
- }
- }
- }
+ validateInvalidMethodDefinition(baseExpr, arguments);
methodCallExpression =
configureAST(
@@ -2124,6 +2103,47 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
ctx);
}
+ /* Validate the following invalid cases:
+ * 1) void m() {}
+ * 2) String m() {}
+ * Note: if the text of `VariableExpression` does not start with upper case character, e.g. task m() {}
+ * ,it may be a command expression
+ */
+ private void validateInvalidMethodDefinition(Expression baseExpr, Expression arguments) {
+ if (baseExpr instanceof VariableExpression) {
+ if (isBuiltInType(baseExpr) || Character.isUpperCase(baseExpr.getText().codePointAt(0))) {
+ if (arguments instanceof ArgumentListExpression) {
+ List<Expression> expressionList = ((ArgumentListExpression) arguments).getExpressions();
+ if (1 == expressionList.size()) {
+ final Expression expression = expressionList.get(0);
+ if (expression instanceof MethodCallExpression) {
+ MethodCallExpression mce = (MethodCallExpression) expression;
+ final Expression methodCallArguments = mce.getArguments();
+
+ // check the method call tails with a closure
+ if (methodCallArguments instanceof ArgumentListExpression) {
+ List<Expression> methodCallArgumentExpressionList = ((ArgumentListExpression) methodCallArguments).getExpressions();
+ final int argumentCnt = methodCallArgumentExpressionList.size();
+ if (argumentCnt > 0) {
+ final Expression lastArgumentExpression = methodCallArgumentExpressionList.get(argumentCnt - 1);
+ if (lastArgumentExpression instanceof ClosureExpression) {
+ if (ClosureUtils.hasImplicitParameter(((ClosureExpression) lastArgumentExpression))) {
+ throw createParsingFailedException(
+ "Method definition not expected here",
+ tuple(baseExpr.getLineNumber(), baseExpr.getColumnNumber()),
+ tuple(expression.getLastLineNumber(), expression.getLastColumnNumber())
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
@Override
public Expression visitCommandArgument(CommandArgumentContext ctx) {
// e.g. x y a b we call "x y" as the base expression