This is an automated email from the ASF dual-hosted git repository. emilles pushed a commit to branch GROOVY_3_0_X in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push: new 227315744f less meta data 227315744f is described below commit 227315744fcf8d86b1385d15a51cecdbc4a748d6 Author: Eric Milles <eric.mil...@thomsonreuters.com> AuthorDate: Tue Aug 29 11:25:05 2023 -0500 less meta data --- .../apache/groovy/parser/antlr4/AstBuilder.java | 66 ++++++++-------------- 1 file changed, 23 insertions(+), 43 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 bc454c5984..9e2d25bc3f 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 @@ -544,7 +544,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { ModifierManager modifierManager = new ModifierManager(this, this.visitVariableModifiersOpt(ctx.variableModifiersOpt())); modifierManager.processParameter(parameter); */ - return tuple(configureAST(parameter, ctx.variableDeclaratorId()), (Expression) this.visit(ctx.expression())); + configureAST(parameter, ctx.variableDeclaratorId()); + return tuple(parameter, (Expression) this.visit(ctx.expression())); } @Override @@ -686,16 +687,9 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { */ @Override public List<CatchStatement> visitCatchClause(final CatchClauseContext ctx) { - // FIXME Groovy will ignore variableModifier of parameter in the catch clause - // In order to make the new parser behave same with the old one, we do not process variableModifier* - return this.visitCatchType(ctx.catchType()).stream() .map(e -> configureAST( new CatchStatement( - // FIXME The old parser does not set location info for the parameter of the catch clause. - // we could make it better - //this.configureAST(new Parameter(e, this.visitIdentifier(ctx.identifier())), ctx.Identifier()), - new Parameter(e, this.visitIdentifier(ctx.identifier())), this.visitBlock(ctx.block())), ctx)) @@ -1548,12 +1542,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { } private DeclarationListStatement createMultiAssignmentDeclarationListStatement(final VariableDeclarationContext ctx, final ModifierManager modifierManager) { - /* - if (!modifierManager.contains(DEF)) { - throw createParsingFailedException("keyword def is required to declare tuple, e.g. def (int a, int b) = [1, 2]", ctx); - } - */ - return configureAST( new DeclarationListStatement( configureAST( @@ -2051,13 +2039,13 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { GenericsType[] genericsTypes = this.visitNonWildcardTypeArguments(ctx.nonWildcardTypeArguments()); if (asBoolean(ctx.DOT())) { - boolean isSafeChain = this.isTrue(baseExpr, PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN); + boolean isSafeChain = isTrue(baseExpr, PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN); return this.createDotExpression(ctx, baseExpr, namePartExpr, genericsTypes, isSafeChain); } else if (asBoolean(ctx.SAFE_DOT())) { return this.createDotExpression(ctx, baseExpr, namePartExpr, genericsTypes, true); } else if (asBoolean(ctx.SAFE_CHAIN_DOT())) { // e.g. obj??.a OR obj??.@a Expression expression = createDotExpression(ctx, baseExpr, namePartExpr, genericsTypes, true); - expression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN, true); + expression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN, Boolean.TRUE); return expression; } else if (asBoolean(ctx.METHOD_POINTER())) { // e.g. obj.&m return configureAST(new MethodPointerExpression(baseExpr, namePartExpr), ctx); @@ -2070,7 +2058,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { return configureAST(attributeExpression, ctx); } else { // e.g. obj*.p PropertyExpression propertyExpression = new PropertyExpression(baseExpr, namePartExpr, true); - propertyExpression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_GENERICS_TYPES, genericsTypes); + if (genericsTypes != null) propertyExpression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_GENERICS_TYPES, genericsTypes); propertyExpression.setSpreadSafe(true); return configureAST(propertyExpression, ctx); } @@ -2081,7 +2069,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { return configureAST(this.visitCreator(creatorContext), ctx); } else if (asBoolean(ctx.indexPropertyArgs())) { // e.g. list[1, 3, 5] Tuple2<Token, Expression> tuple = this.visitIndexPropertyArgs(ctx.indexPropertyArgs()); - boolean isSafeChain = this.isTrue(baseExpr, PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN); + boolean isSafeChain = isTrue(baseExpr, PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN); return configureAST( new BinaryExpression(baseExpr, createGroovyToken(tuple.getV1()), tuple.getV2(), isSafeChain || asBoolean(ctx.indexPropertyArgs().QUESTION())), ctx); @@ -2149,7 +2137,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { if (baseExpr instanceof VariableExpression // e.g. m() || baseExpr instanceof GStringExpression // e.g. "$m"() - || (baseExpr instanceof ConstantExpression && this.isTrue(baseExpr, IS_STRING))) { // e.g. "m"() + || (baseExpr instanceof ConstantExpression && isTrue(baseExpr, IS_STRING))) { // e.g. "m"() String baseExprText = baseExpr.getText(); if (THIS_STR.equals(baseExprText) || SUPER_STR.equals(baseExprText)) { // e.g. this(...), super(...) // class declaration is not allowed in the closure, @@ -2242,7 +2230,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { if (baseExpr instanceof VariableExpression // e.g. m { } || baseExpr instanceof GStringExpression // e.g. "$m" { } - || (baseExpr instanceof ConstantExpression && this.isTrue(baseExpr, IS_STRING))) { // e.g. "m" { } + || (baseExpr instanceof ConstantExpression && isTrue(baseExpr, IS_STRING))) { // e.g. "m" { } MethodCallExpression methodCallExpression = this.createMethodCallExpression( baseExpr, @@ -2275,7 +2263,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { return configureAST(new AttributeExpression(baseExpr, namePartExpr, safe), ctx); } else { // e.g. obj.p OR obj?.p PropertyExpression propertyExpression = new PropertyExpression(baseExpr, namePartExpr, safe); - propertyExpression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_GENERICS_TYPES, genericsTypes); + if (genericsTypes != null) propertyExpression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_GENERICS_TYPES, genericsTypes); return configureAST(propertyExpression, ctx); } } @@ -2721,7 +2709,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { @Override public Expression visitConditionalExprAlt(final ConditionalExprAltContext ctx) { - ctx.fb.putNodeMetaData(IS_INSIDE_CONDITIONAL_EXPRESSION, true); + ctx.fb.putNodeMetaData(IS_INSIDE_CONDITIONAL_EXPRESSION, Boolean.TRUE); if (asBoolean(ctx.ELVIS())) { // e.g. a == 6 ?: 0 return configureAST( @@ -2729,7 +2717,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { ctx); } - ctx.tb.putNodeMetaData(IS_INSIDE_CONDITIONAL_EXPRESSION, true); + ctx.tb.putNodeMetaData(IS_INSIDE_CONDITIONAL_EXPRESSION, Boolean.TRUE); return configureAST( new TernaryExpression( @@ -3604,7 +3592,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { ClassNode classNode = null; if (asBoolean(ctx.classOrInterfaceType())) { - ctx.classOrInterfaceType().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, ctx.getNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR)); + if (isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) + ctx.classOrInterfaceType().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, Boolean.TRUE); classNode = this.visitClassOrInterfaceType(ctx.classOrInterfaceType()); } else if (asBoolean(ctx.primitiveType())) { classNode = this.visitPrimitiveType(ctx.primitiveType()); @@ -3631,10 +3620,12 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { public ClassNode visitClassOrInterfaceType(final ClassOrInterfaceTypeContext ctx) { ClassNode classNode; if (asBoolean(ctx.qualifiedClassName())) { - ctx.qualifiedClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, ctx.getNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR)); + if (isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) + ctx.qualifiedClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, Boolean.TRUE); classNode = this.visitQualifiedClassName(ctx.qualifiedClassName()); } else { - ctx.qualifiedStandardClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, ctx.getNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR)); + if (isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) + ctx.qualifiedStandardClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, Boolean.TRUE); classNode = this.visitQualifiedStandardClassName(ctx.qualifiedStandardClassName()); } @@ -3933,11 +3924,11 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { private ClassNode createClassNode(final GroovyParserRuleContext ctx) { ClassNode result = ClassHelper.make(ctx.getText()); - - if (!isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) { // type in the "instanceof" expression should not have proxy to redirect to it + if (isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) { + // type in the "instanceof" expression shouldn't have redirect + } else { result = this.proxyClassNode(result); } - return configureAST(result, ctx); } @@ -3948,7 +3939,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { ClassNode cn = ClassHelper.makeWithoutCaching(classNode.getName()); cn.setRedirect(classNode); - return cn; } @@ -4054,7 +4044,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { boolean isSafeChain = isTrue((Expression) r, PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN); if (isSafeChain) { - expression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN, true); + expression.putNodeMetaData(PATH_EXPRESSION_BASE_EXPR_SAFE_CHAIN, Boolean.TRUE); } return expression; @@ -4239,18 +4229,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> { return lexer.getInputStream().getText(Interval.of(context.getStart().getStartIndex(), context.getStop().getStopIndex())); } - private boolean isTrue(final NodeMetaDataHandler nodeMetaDataHandler, final String key) { - Object nmd = nodeMetaDataHandler.getNodeMetaData(key); - - if (null == nmd) { - return false; - } - - if (!(nmd instanceof Boolean)) { - throw new GroovyBugError(nodeMetaDataHandler + " node meta data[" + key + "] is not an instance of Boolean"); - } - - return (Boolean) nmd; + private static boolean isTrue(final NodeMetaDataHandler obj, final String key) { + return Boolean.TRUE.equals(obj.getNodeMetaData(key)); } private CompilationFailedException createParsingFailedException(final String msg, final GroovyParserRuleContext ctx) {