Search in sources :

Example 76 with ListExpression

use of org.codehaus.groovy.ast.expr.ListExpression in project groovy by apache.

the class AsmClassGenerator method visitListExpression.

@Override
public void visitListExpression(final ListExpression expression) {
    onLineNumber(expression, "ListExpression");
    int size = expression.getExpressions().size();
    boolean containsSpreadExpression = containsSpreadExpression(expression);
    boolean containsOnlyConstants = !containsSpreadExpression && containsOnlyConstants(expression);
    OperandStack operandStack = controller.getOperandStack();
    if (!containsSpreadExpression) {
        MethodVisitor mv = controller.getMethodVisitor();
        BytecodeHelper.pushConstant(mv, size);
        mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
        int maxInit = 1000;
        if (size < maxInit || !containsOnlyConstants) {
            for (int i = 0; i < size; i += 1) {
                mv.visitInsn(DUP);
                BytecodeHelper.pushConstant(mv, i);
                expression.getExpression(i).visit(this);
                operandStack.box();
                mv.visitInsn(AASTORE);
            }
            operandStack.remove(size);
        } else {
            List<Expression> expressions = expression.getExpressions();
            List<String> methods = new ArrayList<>();
            MethodVisitor oldMv = mv;
            int index = 0;
            while (index < size) {
                String methodName = "$createListEntry_" + controller.getNextHelperMethodIndex();
                methods.add(methodName);
                mv = controller.getClassVisitor().visitMethod(ACC_PRIVATE + ACC_STATIC + ACC_SYNTHETIC, methodName, "([Ljava/lang/Object;)V", null, null);
                controller.setMethodVisitor(mv);
                mv.visitCode();
                int methodBlockSize = Math.min(size - index, maxInit);
                int methodBlockEnd = index + methodBlockSize;
                for (; index < methodBlockEnd; index += 1) {
                    mv.visitVarInsn(ALOAD, 0);
                    mv.visitLdcInsn(index);
                    expressions.get(index).visit(this);
                    operandStack.box();
                    mv.visitInsn(AASTORE);
                }
                operandStack.remove(methodBlockSize);
                mv.visitInsn(RETURN);
                mv.visitMaxs(0, 0);
                mv.visitEnd();
            }
            mv = oldMv;
            controller.setMethodVisitor(mv);
            for (String methodName : methods) {
                mv.visitInsn(DUP);
                mv.visitMethodInsn(INVOKESTATIC, controller.getInternalClassName(), methodName, "([Ljava/lang/Object;)V", false);
            }
        }
    } else {
        despreadList(expression.getExpressions(), false);
    }
    createListMethod.call(controller.getMethodVisitor());
    operandStack.push(ClassHelper.LIST_TYPE);
}
Also used : OperandStack(org.codehaus.groovy.classgen.asm.OperandStack) UnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression) ClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) MethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression) TernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) PrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression) PostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression) Expression(org.codehaus.groovy.ast.expr.Expression) UnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) BitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) NotExpression(org.codehaus.groovy.ast.expr.NotExpression) FieldExpression(org.codehaus.groovy.ast.expr.FieldExpression) EmptyExpression(org.codehaus.groovy.ast.expr.EmptyExpression) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) TupleExpression(org.codehaus.groovy.ast.expr.TupleExpression) MethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) CastExpression(org.codehaus.groovy.ast.expr.CastExpression) BooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression) StaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression) LambdaExpression(org.codehaus.groovy.ast.expr.LambdaExpression) GStringExpression(org.codehaus.groovy.ast.expr.GStringExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) RangeExpression(org.codehaus.groovy.ast.expr.RangeExpression) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression) AttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression) ArrayList(java.util.ArrayList) TraceMethodVisitor(org.objectweb.asm.util.TraceMethodVisitor) MethodVisitor(org.objectweb.asm.MethodVisitor)

Example 77 with ListExpression

use of org.codehaus.groovy.ast.expr.ListExpression in project groovy by apache.

the class ExtendedVerifier method processDuplicateAnnotationContainers.

private void processDuplicateAnnotationContainers(AnnotatedNode node, Map<String, List<AnnotationNode>> nonSourceAnnotations) {
    for (Map.Entry<String, List<AnnotationNode>> next : nonSourceAnnotations.entrySet()) {
        if (next.getValue().size() > 1) {
            ClassNode repeatable = null;
            AnnotationNode repeatee = next.getValue().get(0);
            for (AnnotationNode anno : repeatee.getClassNode().getAnnotations()) {
                if (anno.getClassNode().getName().equals("java.lang.annotation.Repeatable")) {
                    Expression value = anno.getMember("value");
                    if (value instanceof ClassExpression && value.getType().isAnnotationDefinition()) {
                        repeatable = value.getType();
                        break;
                    }
                }
            }
            if (repeatable != null) {
                if (nonSourceAnnotations.containsKey(repeatable.getName())) {
                    addError("Cannot specify duplicate annotation on the same member. Explicit " + repeatable.getName() + " found when creating implicit container for " + next.getKey(), node);
                }
                AnnotationNode collector = new AnnotationNode(repeatable);
                if (repeatee.hasRuntimeRetention()) {
                    collector.setRuntimeRetention(true);
                } else if (repeatable.isResolved()) {
                    Class<?> repeatableType = repeatable.getTypeClass();
                    Retention retention = repeatableType.getAnnotation(Retention.class);
                    collector.setRuntimeRetention(retention != null && retention.value().equals(RetentionPolicy.RUNTIME));
                } else {
                    for (AnnotationNode annotation : repeatable.getAnnotations()) {
                        if (annotation.getClassNode().getName().equals("java.lang.annotation.Retention")) {
                            Expression value = annotation.getMember("value");
                            assert value != null;
                            Object retention = evaluateExpression(value, source.getConfiguration());
                            collector.setRuntimeRetention(retention != null && retention.toString().equals("RUNTIME"));
                            break;
                        }
                    }
                }
                collector.addMember("value", new ListExpression(next.getValue().stream().map(AnnotationConstantExpression::new).collect(Collectors.toList())));
                node.getAnnotations().removeAll(next.getValue());
                node.addAnnotation(collector);
            }
        }
    }
}
Also used : ClassNode(org.codehaus.groovy.ast.ClassNode) AnnotationNode(org.codehaus.groovy.ast.AnnotationNode) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) StaticTypeCheckingSupport.evaluateExpression(org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.evaluateExpression) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) Expression(org.codehaus.groovy.ast.expr.Expression) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) List(java.util.List) ArrayList(java.util.ArrayList) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) Retention(java.lang.annotation.Retention) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 78 with ListExpression

use of org.codehaus.groovy.ast.expr.ListExpression in project groovy by apache.

the class EnumVisitor method addInit.

private void addInit(final ClassNode enumClass, final FieldNode minValue, final FieldNode maxValue, final FieldNode values, final boolean isAIC) {
    // constructor helper
    // This method is used instead of calling the constructor as
    // calling the constructor may require a table with MetaClass
    // selecting the constructor for each enum value. So instead we
    // use this method to have a central point for constructor selection
    // and only one table. The whole construction is needed because
    // Reflection forbids access to the enum constructor.
    // code:
    // def $INIT(Object[] para) {
    // return this(*para)
    // }
    ClassNode enumRef = enumClass.getPlainNodeReference();
    Parameter[] parameter = new Parameter[] { new Parameter(ClassHelper.OBJECT_TYPE.makeArray(), "para") };
    MethodNode initMethod = new MethodNode("$INIT", ACC_FINAL | ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, enumRef, parameter, ClassNode.EMPTY_ARRAY, null);
    initMethod.setSynthetic(true);
    ConstructorCallExpression cce = new ConstructorCallExpression(ClassNode.THIS, new ArgumentListExpression(new SpreadExpression(new VariableExpression("para"))));
    BlockStatement code = new BlockStatement();
    code.addStatement(new ReturnStatement(cce));
    initMethod.setCode(code);
    addGeneratedMethod(enumClass, initMethod);
    // static init
    List<FieldNode> fields = enumClass.getFields();
    List<Expression> arrayInit = new ArrayList<>();
    int value = -1;
    Token assign = Token.newSymbol(Types.ASSIGN, -1, -1);
    List<Statement> block = new ArrayList<>();
    FieldNode tempMin = null;
    FieldNode tempMax = null;
    for (FieldNode field : fields) {
        if (!field.isEnum())
            continue;
        value += 1;
        if (tempMin == null)
            tempMin = field;
        tempMax = field;
        ClassNode enumBase = enumClass;
        ArgumentListExpression args = new ArgumentListExpression();
        args.addExpression(new ConstantExpression(field.getName()));
        args.addExpression(new ConstantExpression(value));
        if (field.getInitialExpression() == null) {
            if (enumClass.isAbstract()) {
                addError(field, "The enum constant " + field.getName() + " must override abstract methods from " + enumBase.getName() + ".");
                continue;
            }
        } else {
            ListExpression oldArgs = (ListExpression) field.getInitialExpression();
            List<MapEntryExpression> savedMapEntries = new ArrayList<>();
            for (Expression exp : oldArgs.getExpressions()) {
                if (exp instanceof MapEntryExpression) {
                    savedMapEntries.add((MapEntryExpression) exp);
                    continue;
                }
                InnerClassNode inner = null;
                if (exp instanceof ClassExpression) {
                    ClassExpression clazzExp = (ClassExpression) exp;
                    ClassNode ref = clazzExp.getType();
                    if (ref instanceof EnumConstantClassNode) {
                        inner = (InnerClassNode) ref;
                    }
                }
                if (inner != null) {
                    List<MethodNode> baseMethods = enumBase.getMethods();
                    for (MethodNode methodNode : baseMethods) {
                        if (!methodNode.isAbstract())
                            continue;
                        MethodNode enumConstMethod = inner.getMethod(methodNode.getName(), methodNode.getParameters());
                        if (enumConstMethod == null || enumConstMethod.isAbstract()) {
                            addError(field, "Can't have an abstract method in enum constant " + field.getName() + ". Implement method '" + methodNode.getTypeDescriptor() + "'.");
                        }
                    }
                    if (inner.getVariableScope() == null) {
                        enumBase = inner;
                        /*
                             * GROOVY-3985: Remove the final modifier from $INIT method in this case
                             * so that subclasses of enum generated for enum constants (aic) can provide
                             * their own $INIT method
                             */
                        initMethod.setModifiers(initMethod.getModifiers() & ~ACC_FINAL);
                        continue;
                    }
                }
                args.addExpression(exp);
            }
            if (!savedMapEntries.isEmpty()) {
                args.getExpressions().add(2, new MapExpression(savedMapEntries));
            }
        }
        field.setInitialValueExpression(null);
        block.add(new ExpressionStatement(new BinaryExpression(new FieldExpression(field), assign, new StaticMethodCallExpression(enumBase, "$INIT", args))));
        arrayInit.add(new FieldExpression(field));
    }
    if (!isAIC) {
        if (tempMin != null) {
            block.add(new ExpressionStatement(new BinaryExpression(new FieldExpression(minValue), assign, new FieldExpression(tempMin))));
            block.add(new ExpressionStatement(new BinaryExpression(new FieldExpression(maxValue), assign, new FieldExpression(tempMax))));
            enumClass.addField(minValue);
            enumClass.addField(maxValue);
        }
        block.add(new ExpressionStatement(new BinaryExpression(new FieldExpression(values), assign, new ArrayExpression(enumClass, arrayInit))));
        enumClass.addField(values);
    }
    enumClass.addStaticInitializerStatements(block, true);
}
Also used : EnumConstantClassNode(org.codehaus.groovy.ast.EnumConstantClassNode) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) ArrayList(java.util.ArrayList) StaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) BlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement) Token(org.codehaus.groovy.syntax.Token) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) MethodNode(org.codehaus.groovy.ast.MethodNode) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) ReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) EnumConstantClassNode(org.codehaus.groovy.ast.EnumConstantClassNode) InnerClassNode(org.codehaus.groovy.ast.InnerClassNode) ClassNode(org.codehaus.groovy.ast.ClassNode) FieldNode(org.codehaus.groovy.ast.FieldNode) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) IfStatement(org.codehaus.groovy.ast.stmt.IfStatement) BlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement) Statement(org.codehaus.groovy.ast.stmt.Statement) ExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement) ReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement) EmptyStatement(org.codehaus.groovy.ast.stmt.EmptyStatement) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) InnerClassNode(org.codehaus.groovy.ast.InnerClassNode) FieldExpression(org.codehaus.groovy.ast.expr.FieldExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) FieldExpression(org.codehaus.groovy.ast.expr.FieldExpression) BooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression) StaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) Expression(org.codehaus.groovy.ast.expr.Expression) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) ExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement) Parameter(org.codehaus.groovy.ast.Parameter) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression)

Example 79 with ListExpression

use of org.codehaus.groovy.ast.expr.ListExpression in project groovy by apache.

the class Java8 method configureAnnotationNodeFromDefinition.

@Override
public void configureAnnotationNodeFromDefinition(final AnnotationNode definition, final AnnotationNode root) {
    ClassNode type = definition.getClassNode();
    final String typeName = type.getName();
    if ("java.lang.annotation.Retention".equals(typeName)) {
        Expression exp = definition.getMember("value");
        if (!(exp instanceof PropertyExpression))
            return;
        PropertyExpression pe = (PropertyExpression) exp;
        String name = pe.getPropertyAsString();
        RetentionPolicy policy = RetentionPolicy.valueOf(name);
        setRetentionPolicy(policy, root);
    } else if ("java.lang.annotation.Target".equals(typeName)) {
        Expression exp = definition.getMember("value");
        if (!(exp instanceof ListExpression))
            return;
        ListExpression le = (ListExpression) exp;
        int bitmap = 0;
        for (Expression e : le.getExpressions()) {
            if (!(e instanceof PropertyExpression))
                return;
            PropertyExpression element = (PropertyExpression) e;
            String name = element.getPropertyAsString();
            ElementType value = ElementType.valueOf(name);
            bitmap |= getElementCode(value);
        }
        root.setAllowedTargets(bitmap);
    }
}
Also used : ClassNode(org.codehaus.groovy.ast.ClassNode) ElementType(java.lang.annotation.ElementType) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) Expression(org.codehaus.groovy.ast.expr.Expression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) RetentionPolicy(java.lang.annotation.RetentionPolicy)

Example 80 with ListExpression

use of org.codehaus.groovy.ast.expr.ListExpression in project groovy by apache.

the class AstBuilder method visitPathElement.

@Override
public Expression visitPathElement(final PathElementContext ctx) {
    Expression baseExpr = ctx.getNodeMetaData(PATH_EXPRESSION_BASE_EXPR);
    Objects.requireNonNull(baseExpr, "baseExpr is required!");
    if (asBoolean(ctx.namePart())) {
        Expression namePartExpr = this.visitNamePart(ctx.namePart());
        GenericsType[] genericsTypes = this.visitNonWildcardTypeArguments(ctx.nonWildcardTypeArguments());
        if (asBoolean(ctx.DOT())) {
            boolean isSafeChain = this.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);
            return expression;
        } else if (asBoolean(ctx.METHOD_POINTER())) {
            // e.g. obj.&m
            return configureAST(new MethodPointerExpression(baseExpr, namePartExpr), ctx);
        } else if (asBoolean(ctx.METHOD_REFERENCE())) {
            // e.g. obj::m
            return configureAST(new MethodReferenceExpression(baseExpr, namePartExpr), ctx);
        } else if (asBoolean(ctx.SPREAD_DOT())) {
            if (asBoolean(ctx.AT())) {
                // e.g. obj*.@a
                AttributeExpression attributeExpression = new AttributeExpression(baseExpr, namePartExpr, true);
                attributeExpression.setSpreadSafe(true);
                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);
                propertyExpression.setSpreadSafe(true);
                return configureAST(propertyExpression, ctx);
            }
        }
    } else if (asBoolean(ctx.creator())) {
        CreatorContext creatorContext = ctx.creator();
        creatorContext.putNodeMetaData(ENCLOSING_INSTANCE_EXPRESSION, baseExpr);
        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);
        return configureAST(new BinaryExpression(baseExpr, createGroovyToken(tuple.getV1()), tuple.getV2(), isSafeChain || asBoolean(ctx.indexPropertyArgs().SAFE_INDEX())), ctx);
    } else if (asBoolean(ctx.namedPropertyArgs())) {
        // this is a special way to signify a cast, e.g. Person[name: 'Daniel.Sun', location: 'Shanghai']
        List<MapEntryExpression> mapEntryExpressionList = this.visitNamedPropertyArgs(ctx.namedPropertyArgs());
        Expression right;
        Expression firstKeyExpression;
        int mapEntryExpressionListSize = mapEntryExpressionList.size();
        if (mapEntryExpressionListSize == 0) {
            // expecting list of MapEntryExpressions later so use SpreadMap to smuggle empty MapExpression to later stages
            right = configureAST(new SpreadMapExpression(configureAST(new MapExpression(), ctx.namedPropertyArgs())), ctx.namedPropertyArgs());
        } else if (mapEntryExpressionListSize == 1 && (firstKeyExpression = mapEntryExpressionList.get(0).getKeyExpression()) instanceof SpreadMapExpression) {
            right = firstKeyExpression;
        } else {
            ListExpression listExpression = configureAST(new ListExpression(mapEntryExpressionList.stream().map(e -> {
                if (e.getKeyExpression() instanceof SpreadMapExpression) {
                    return e.getKeyExpression();
                }
                return e;
            }).collect(Collectors.toList())), ctx.namedPropertyArgs());
            listExpression.setWrapped(true);
            right = listExpression;
        }
        NamedPropertyArgsContext namedPropertyArgsContext = ctx.namedPropertyArgs();
        Token token = (namedPropertyArgsContext.LBRACK() == null ? namedPropertyArgsContext.SAFE_INDEX() : namedPropertyArgsContext.LBRACK()).getSymbol();
        return configureAST(new BinaryExpression(baseExpr, createGroovyToken(token), right), ctx);
    } else if (asBoolean(ctx.arguments())) {
        Expression argumentsExpr = this.visitArguments(ctx.arguments());
        configureAST(argumentsExpr, ctx);
        if (isInsideParentheses(baseExpr)) {
            // e.g. (obj.x)(), (obj.@x)()
            return configureAST(createCallMethodCallExpression(baseExpr, argumentsExpr), ctx);
        }
        if (baseExpr instanceof AttributeExpression) {
            // e.g. obj.@a(1, 2)
            AttributeExpression attributeExpression = (AttributeExpression) baseExpr;
            // whether attributeExpression is spread safe or not, we must reset it as false
            attributeExpression.setSpreadSafe(false);
            return configureAST(createCallMethodCallExpression(attributeExpression, argumentsExpr, true), ctx);
        }
        if (baseExpr instanceof PropertyExpression) {
            // e.g. obj.a(1, 2)
            MethodCallExpression methodCallExpression = this.createMethodCallExpression((PropertyExpression) baseExpr, argumentsExpr);
            return configureAST(methodCallExpression, ctx);
        }
        if (baseExpr instanceof VariableExpression) {
            // void and primitive type AST node must be an instance of VariableExpression
            String baseExprText = baseExpr.getText();
            if (VOID_STR.equals(baseExprText)) {
                // e.g. void()
                return configureAST(this.createCallMethodCallExpression(this.createConstantExpression(baseExpr), argumentsExpr), ctx);
            } else if (isPrimitiveType(baseExprText)) {
                // e.g. int(), long(), float(), etc.
                throw this.createParsingFailedException("Primitive type literal: " + baseExprText + " cannot be used as a method name", ctx);
            }
        }
        if (// e.g. m()
        baseExpr instanceof VariableExpression || // e.g. "$m"()
        baseExpr instanceof GStringExpression || (baseExpr instanceof ConstantExpression && this.isTrue(baseExpr, IS_STRING))) {
            // e.g. "m"()
            String baseExprText = baseExpr.getText();
            if (THIS_STR.equals(baseExprText) || SUPER_STR.equals(baseExprText)) {
                // @MapConstructor(pre={ super(args?.first, args?.last); args = args ?: [:] }, post = { first = first?.toUpperCase() })
                if (visitingClosureCount > 0) {
                    return configureAST(new MethodCallExpression(baseExpr, baseExprText, argumentsExpr), ctx);
                }
                return configureAST(new ConstructorCallExpression(SUPER_STR.equals(baseExprText) ? ClassNode.SUPER : ClassNode.THIS, argumentsExpr), ctx);
            }
            MethodCallExpression methodCallExpression = this.createMethodCallExpression(baseExpr, argumentsExpr);
            return configureAST(methodCallExpression, ctx);
        }
        // e.g. 1(), 1.1(), ((int) 1 / 2)(1, 2), {a, b -> a + b }(1, 2), m()()
        return configureAST(this.createCallMethodCallExpression(baseExpr, argumentsExpr), ctx);
    } else if (asBoolean(ctx.closureOrLambdaExpression())) {
        ClosureExpression closureExpression = this.visitClosureOrLambdaExpression(ctx.closureOrLambdaExpression());
        if (baseExpr instanceof MethodCallExpression) {
            MethodCallExpression methodCallExpression = (MethodCallExpression) baseExpr;
            Expression argumentsExpression = methodCallExpression.getArguments();
            if (argumentsExpression instanceof ArgumentListExpression) {
                // normal arguments, e.g. 1, 2
                ArgumentListExpression argumentListExpression = (ArgumentListExpression) argumentsExpression;
                argumentListExpression.getExpressions().add(closureExpression);
                return configureAST(methodCallExpression, ctx);
            }
            if (argumentsExpression instanceof TupleExpression) {
                // named arguments, e.g. x: 1, y: 2
                TupleExpression tupleExpression = (TupleExpression) argumentsExpression;
                NamedArgumentListExpression namedArgumentListExpression = (NamedArgumentListExpression) tupleExpression.getExpression(0);
                if (asBoolean(tupleExpression.getExpressions())) {
                    methodCallExpression.setArguments(configureAST(new ArgumentListExpression(configureAST(new MapExpression(namedArgumentListExpression.getMapEntryExpressions()), namedArgumentListExpression), closureExpression), tupleExpression));
                } else {
                    // the branch should never reach, because named arguments must not be empty
                    methodCallExpression.setArguments(configureAST(new ArgumentListExpression(closureExpression), tupleExpression));
                }
                return configureAST(methodCallExpression, ctx);
            }
        }
        if (baseExpr instanceof PropertyExpression) {
            // e.g. obj.m { }
            MethodCallExpression methodCallExpression = this.createMethodCallExpression((PropertyExpression) baseExpr, configureAST(new ArgumentListExpression(closureExpression), closureExpression));
            return configureAST(methodCallExpression, ctx);
        }
        if (// e.g. m { }
        baseExpr instanceof VariableExpression || // e.g. "$m" { }
        baseExpr instanceof GStringExpression || (baseExpr instanceof ConstantExpression && this.isTrue(baseExpr, IS_STRING))) {
            // e.g. "m" { }
            MethodCallExpression methodCallExpression = this.createMethodCallExpression(baseExpr, configureAST(new ArgumentListExpression(closureExpression), closureExpression));
            return configureAST(methodCallExpression, ctx);
        }
        // e.g. 1 { }, 1.1 { }, (1 / 2) { }, m() { }, { -> ... } { }
        MethodCallExpression methodCallExpression = this.createCallMethodCallExpression(baseExpr, configureAST(new ArgumentListExpression(closureExpression), closureExpression));
        return configureAST(methodCallExpression, ctx);
    }
    throw createParsingFailedException("Unsupported path element: " + ctx.getText(), ctx);
}
Also used : CastParExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.CastParExpressionContext) SUB(org.apache.groovy.parser.antlr4.GroovyParser.SUB) CastExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.CastExprAltContext) ConditionalExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ConditionalExprAltContext) DEFAULT(org.apache.groovy.parser.antlr4.GroovyParser.DEFAULT) IdentifierContext(org.apache.groovy.parser.antlr4.GroovyParser.IdentifierContext) SEALED(org.apache.groovy.parser.antlr4.GroovyParser.SEALED) QualifiedClassNameListContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedClassNameListContext) ModifierContext(org.apache.groovy.parser.antlr4.GroovyParser.ModifierContext) ElementValuePairsContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValuePairsContext) BlockStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockStatementContext) PathExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.PathExpressionContext) NonSealed(groovy.transform.NonSealed) EnumConstantsContext(org.apache.groovy.parser.antlr4.GroovyParser.EnumConstantsContext) Map(java.util.Map) ListContext(org.apache.groovy.parser.antlr4.GroovyParser.ListContext) Sealed(groovy.transform.Sealed) PropertyNode(org.codehaus.groovy.ast.PropertyNode) Trait(groovy.transform.Trait) TypeNamePairContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeNamePairContext) UnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression) ClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression) Recognizer(org.antlr.v4.runtime.Recognizer) QualifiedNameElementContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedNameElementContext) EnhancedStatementExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedStatementExpressionContext) EmptyDimsContext(org.apache.groovy.parser.antlr4.GroovyParser.EmptyDimsContext) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) ClosureOrLambdaExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.ClosureOrLambdaExpressionContext) CommandExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.CommandExpressionContext) CommandExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.CommandExprAltContext) GstringValueContext(org.apache.groovy.parser.antlr4.GroovyParser.GstringValueContext) ArrayInitializerContext(org.apache.groovy.parser.antlr4.GroovyParser.ArrayInitializerContext) MethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression) Stream(java.util.stream.Stream) TernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression) AssertStatement(org.codehaus.groovy.ast.stmt.AssertStatement) DefaultGroovyMethods.asBoolean(org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean) IdentifierPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.IdentifierPrmrAltContext) AndExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.AndExprAltContext) DEC(org.apache.groovy.parser.antlr4.GroovyParser.DEC) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) DEF(org.apache.groovy.parser.antlr4.GroovyParser.DEF) GeneralUtils.declS(org.codehaus.groovy.ast.tools.GeneralUtils.declS) VariableDeclaratorIdContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclaratorIdContext) YieldStatementContext(org.apache.groovy.parser.antlr4.GroovyLangParser.YieldStatementContext) LinkedHashMap(java.util.LinkedHashMap) EnhancedForControlContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedForControlContext) PrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression) SystemUtil(org.apache.groovy.util.SystemUtil) ExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement) GeneralUtils.returnS(org.codehaus.groovy.ast.tools.GeneralUtils.returnS) GroovyParserRuleContext(org.apache.groovy.parser.antlr4.GroovyParser.GroovyParserRuleContext) PowerExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.PowerExprAltContext) StandardLambdaExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.StandardLambdaExpressionContext) PostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression) StringUtils(org.apache.groovy.parser.antlr4.util.StringUtils) ElementValuePairContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValuePairContext) Expression(org.codehaus.groovy.ast.expr.Expression) AnnotationNameContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotationNameContext) FINAL(org.apache.groovy.parser.antlr4.GroovyParser.FINAL) Opcodes(org.objectweb.asm.Opcodes) CompileStatic(groovy.transform.CompileStatic) UnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression) SourceUnit(org.codehaus.groovy.control.SourceUnit) ClassNode(org.codehaus.groovy.ast.ClassNode) SwitchExpressionLabelContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchExpressionLabelContext) ForStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ForStmtAltContext) BreakStatement(org.codehaus.groovy.ast.stmt.BreakStatement) GeneralUtils.listX(org.codehaus.groovy.ast.tools.GeneralUtils.listX) GeneralUtils.localVarX(org.codehaus.groovy.ast.tools.GeneralUtils.localVarX) GenericsType(org.codehaus.groovy.ast.GenericsType) IOException(java.io.IOException) PredictionMode(org.antlr.v4.runtime.atn.PredictionMode) ForControlContext(org.apache.groovy.parser.antlr4.GroovyParser.ForControlContext) ReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) VariableModifiersContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableModifiersContext) CompilationUnitContext(org.apache.groovy.parser.antlr4.GroovyParser.CompilationUnitContext) RecognitionException(org.antlr.v4.runtime.RecognitionException) BitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression) TupleConstructor(groovy.transform.TupleConstructor) ANTLRErrorListener(org.antlr.v4.runtime.ANTLRErrorListener) IfElseStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.IfElseStatementContext) MapEntryLabelContext(org.apache.groovy.parser.antlr4.GroovyParser.MapEntryLabelContext) AS(org.apache.groovy.parser.antlr4.GroovyParser.AS) EqualityExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.EqualityExprAltContext) GeneralUtils.stmt(org.codehaus.groovy.ast.tools.GeneralUtils.stmt) Interval(org.antlr.v4.runtime.misc.Interval) IntegerLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.IntegerLiteralAltContext) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) TypeArgumentsContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeArgumentsContext) CompilePhase(org.codehaus.groovy.control.CompilePhase) TokenStream(org.antlr.v4.runtime.TokenStream) AtnManager(org.apache.groovy.parser.antlr4.internal.atnmanager.AtnManager) ExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionContext) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) ClosureUtils(org.codehaus.groovy.ast.tools.ClosureUtils) ModuleNode(org.codehaus.groovy.ast.ModuleNode) LogicalAndExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LogicalAndExprAltContext) FormalParameterContext(org.apache.groovy.parser.antlr4.GroovyParser.FormalParameterContext) EnumConstantClassNode(org.codehaus.groovy.ast.EnumConstantClassNode) BlockContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockContext) Numbers(org.codehaus.groovy.syntax.Numbers) SwitchLabelContext(org.apache.groovy.parser.antlr4.GroovyParser.SwitchLabelContext) BreakStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.BreakStatementContext) BuiltInTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.BuiltInTypeContext) MethodNameContext(org.apache.groovy.parser.antlr4.GroovyParser.MethodNameContext) CreatorContext(org.apache.groovy.parser.antlr4.GroovyParser.CreatorContext) ForStatement(org.codehaus.groovy.ast.stmt.ForStatement) INC(org.apache.groovy.parser.antlr4.GroovyParser.INC) LabeledStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LabeledStmtAltContext) MethodDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.MethodDeclarationContext) ScriptStatementsContext(org.apache.groovy.parser.antlr4.GroovyParser.ScriptStatementsContext) NamedPropertyArgsContext(org.apache.groovy.parser.antlr4.GroovyParser.NamedPropertyArgsContext) ExclusiveOrExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ExclusiveOrExprAltContext) Types(org.codehaus.groovy.syntax.Types) GeneralUtils.closureX(org.codehaus.groovy.ast.tools.GeneralUtils.closureX) DefaultGroovyMethods(org.codehaus.groovy.runtime.DefaultGroovyMethods) ThisPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ThisPrmrAltContext) SwitchBlockStatementGroupContext(org.apache.groovy.parser.antlr4.GroovyParser.SwitchBlockStatementGroupContext) StringGroovyMethods(org.codehaus.groovy.runtime.StringGroovyMethods) Collectors(java.util.stream.Collectors) NotExpression(org.codehaus.groovy.ast.expr.NotExpression) PrimitiveTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.PrimitiveTypeContext) InnerClassNode(org.codehaus.groovy.ast.InnerClassNode) Objects(java.util.Objects) ARROW(org.apache.groovy.parser.antlr4.GroovyLangParser.ARROW) IfStatement(org.codehaus.groovy.ast.stmt.IfStatement) MapContext(org.apache.groovy.parser.antlr4.GroovyParser.MapContext) NewPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.NewPrmrAltContext) EnhancedArgumentListInParContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedArgumentListInParContext) ForUpdateContext(org.apache.groovy.parser.antlr4.GroovyParser.ForUpdateContext) RegexExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.RegexExprAltContext) INSTANCEOF(org.apache.groovy.parser.antlr4.GroovyParser.INSTANCEOF) AnnotationNode(org.codehaus.groovy.ast.AnnotationNode) VariableDeclaratorContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclaratorContext) CompactConstructorDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.CompactConstructorDeclarationContext) TypeArgumentsOrDiamondContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeArgumentsOrDiamondContext) Verifier(org.codehaus.groovy.classgen.Verifier) ContinueStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.ContinueStatementContext) Maps(org.apache.groovy.util.Maps) Tuple2(groovy.lang.Tuple2) NOT_IN(org.apache.groovy.parser.antlr4.GroovyParser.NOT_IN) Tuple3(groovy.lang.Tuple3) ThrowStatement(org.codehaus.groovy.ast.stmt.ThrowStatement) VariableNamesContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableNamesContext) GeneralUtils.varX(org.codehaus.groovy.ast.tools.GeneralUtils.varX) EmptyExpression(org.codehaus.groovy.ast.expr.EmptyExpression) LinkedList(java.util.LinkedList) AnnotationContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotationContext) GstringContext(org.apache.groovy.parser.antlr4.GroovyParser.GstringContext) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) DynamicMemberNameContext(org.apache.groovy.parser.antlr4.GroovyParser.DynamicMemberNameContext) MapEntryContext(org.apache.groovy.parser.antlr4.GroovyParser.MapEntryContext) StatementContext(org.apache.groovy.parser.antlr4.GroovyParser.StatementContext) DoWhileStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.DoWhileStmtAltContext) ClassHelper(org.codehaus.groovy.ast.ClassHelper) GeneralUtils.cloneParams(org.codehaus.groovy.ast.tools.GeneralUtils.cloneParams) ShiftExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ShiftExprAltContext) ClassBodyDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassBodyDeclarationContext) DescriptiveErrorStrategy(org.apache.groovy.parser.antlr4.internal.DescriptiveErrorStrategy) TypeUtil.isPrimitiveType(org.codehaus.groovy.classgen.asm.util.TypeUtil.isPrimitiveType) SynchronizedStatement(org.codehaus.groovy.ast.stmt.SynchronizedStatement) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) ReturnTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.ReturnTypeContext) ASTNode(org.codehaus.groovy.ast.ASTNode) TupleExpression(org.codehaus.groovy.ast.expr.TupleExpression) NonWildcardTypeArgumentsContext(org.apache.groovy.parser.antlr4.GroovyParser.NonWildcardTypeArgumentsContext) ThisFormalParameterContext(org.apache.groovy.parser.antlr4.GroovyParser.ThisFormalParameterContext) TryCatchStatement(org.codehaus.groovy.ast.stmt.TryCatchStatement) RANGE_EXCLUSIVE_RIGHT(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_EXCLUSIVE_RIGHT) MethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression) BooleanLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.BooleanLiteralAltContext) ConstructorNode(org.codehaus.groovy.ast.ConstructorNode) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) ClassOrInterfaceModifierContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceModifierContext) SyntaxException(org.codehaus.groovy.syntax.SyntaxException) PRIVATE(org.apache.groovy.parser.antlr4.GroovyParser.PRIVATE) InclusiveOrExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.InclusiveOrExprAltContext) ElementValueArrayInitializerContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValueArrayInitializerContext) Arrays(java.util.Arrays) Token(org.antlr.v4.runtime.Token) CharStreams(org.antlr.v4.runtime.CharStreams) NamePartContext(org.apache.groovy.parser.antlr4.GroovyParser.NamePartContext) GE(org.apache.groovy.parser.antlr4.GroovyParser.GE) EnumConstantContext(org.apache.groovy.parser.antlr4.GroovyParser.EnumConstantContext) LocalVariableDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.LocalVariableDeclarationContext) ClassBodyContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassBodyContext) MethodBodyContext(org.apache.groovy.parser.antlr4.GroovyParser.MethodBodyContext) WhileStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.WhileStmtAltContext) CaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement) CommandArgumentContext(org.apache.groovy.parser.antlr4.GroovyParser.CommandArgumentContext) CreatedNameContext(org.apache.groovy.parser.antlr4.GroovyParser.CreatedNameContext) NOT_INSTANCEOF(org.apache.groovy.parser.antlr4.GroovyParser.NOT_INSTANCEOF) IndexPropertyArgsContext(org.apache.groovy.parser.antlr4.GroovyParser.IndexPropertyArgsContext) TypeBoundContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeBoundContext) GT(org.apache.groovy.parser.antlr4.GroovyParser.GT) ParExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.ParExpressionContext) ClosureContext(org.apache.groovy.parser.antlr4.GroovyParser.ClosureContext) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) PackageNode(org.codehaus.groovy.ast.PackageNode) ModifierNode(org.codehaus.groovy.ast.ModifierNode) AnnotatedNodeUtils(org.apache.groovy.ast.tools.AnnotatedNodeUtils) ConditionalStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.ConditionalStatementContext) EnhancedArgumentListElementContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedArgumentListElementContext) AssertStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.AssertStatementContext) ClassHelper.isPrimitiveVoid(org.codehaus.groovy.ast.ClassHelper.isPrimitiveVoid) NON_SEALED(org.apache.groovy.parser.antlr4.GroovyParser.NON_SEALED) GeneralUtils.callX(org.codehaus.groovy.ast.tools.GeneralUtils.callX) TerminalNode(org.antlr.v4.runtime.tree.TerminalNode) PositionConfigureUtils.configureAST(org.apache.groovy.parser.antlr4.util.PositionConfigureUtils.configureAST) SwitchExpressionContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchExpressionContext) CompilationFailedException(org.codehaus.groovy.control.CompilationFailedException) AnnotationsOptContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotationsOptContext) CastExpression(org.codehaus.groovy.ast.expr.CastExpression) ParserRuleContext(org.antlr.v4.runtime.ParserRuleContext) RelationalExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.RelationalExprAltContext) BooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression) BlockStatementsOptContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockStatementsOptContext) ImportDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.ImportDeclarationContext) ThrowStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ThrowStmtAltContext) FieldDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.FieldDeclarationContext) FinallyBlockContext(org.apache.groovy.parser.antlr4.GroovyParser.FinallyBlockContext) StandardLambdaParametersContext(org.apache.groovy.parser.antlr4.GroovyParser.StandardLambdaParametersContext) LambdaExpression(org.codehaus.groovy.ast.expr.LambdaExpression) LoopStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LoopStmtAltContext) WhileStatement(org.codehaus.groovy.ast.stmt.WhileStatement) ArrayList(java.util.ArrayList) StringLiteralContext(org.apache.groovy.parser.antlr4.GroovyParser.StringLiteralContext) CharStream(org.antlr.v4.runtime.CharStream) EmptyDimsOptContext(org.apache.groovy.parser.antlr4.GroovyParser.EmptyDimsOptContext) MethodNode(org.codehaus.groovy.ast.MethodNode) NullLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.NullLiteralAltContext) CatchClauseContext(org.apache.groovy.parser.antlr4.GroovyParser.CatchClauseContext) ClassDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassDeclarationContext) ParseTree(org.antlr.v4.runtime.tree.ParseTree) VariableInitializerContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableInitializerContext) MultipleAssignmentExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.MultipleAssignmentExprAltContext) RANGE_EXCLUSIVE_FULL(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_EXCLUSIVE_FULL) Parameter(org.codehaus.groovy.ast.Parameter) VariableInitializersContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableInitializersContext) FloatingPointLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.FloatingPointLiteralAltContext) SwitchExprAltContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchExprAltContext) VAR(org.apache.groovy.parser.antlr4.GroovyParser.VAR) ClassOrInterfaceModifiersContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceModifiersContext) IN(org.apache.groovy.parser.antlr4.GroovyParser.IN) ExpressionListContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionListContext) EmptyStatement(org.codehaus.groovy.ast.stmt.EmptyStatement) TypeDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeDeclarationContext) ElementValuesContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValuesContext) PackageDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.PackageDeclarationContext) GStringExpression(org.codehaus.groovy.ast.expr.GStringExpression) BufferedReader(java.io.BufferedReader) ArrayDeque(java.util.ArrayDeque) DefaultGroovyMethods.last(org.codehaus.groovy.runtime.DefaultGroovyMethods.last) ResourceContext(org.apache.groovy.parser.antlr4.GroovyParser.ResourceContext) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) SAFE_INDEX(org.apache.groovy.parser.antlr4.GroovyParser.SAFE_INDEX) TryCatchStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.TryCatchStatementContext) SynchronizedStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.SynchronizedStmtAltContext) MapEntryListContext(org.apache.groovy.parser.antlr4.GroovyParser.MapEntryListContext) ElementValueContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValueContext) VariableDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclarationContext) CommonTokenStream(org.antlr.v4.runtime.CommonTokenStream) ClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassNameContext) TypeListContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeListContext) CatchTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.CatchTypeContext) RangeExpression(org.codehaus.groovy.ast.expr.RangeExpression) UnaryNotExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.UnaryNotExprAltContext) GeneralUtils.assignX(org.codehaus.groovy.ast.tools.GeneralUtils.assignX) ModifiersOptContext(org.apache.groovy.parser.antlr4.GroovyParser.ModifiersOptContext) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) VariableModifierContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableModifierContext) SwitchBlockStatementExpressionGroupContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchBlockStatementExpressionGroupContext) PathElementContext(org.apache.groovy.parser.antlr4.GroovyParser.PathElementContext) UnaryAddExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.UnaryAddExprAltContext) TypeNamePairsContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeNamePairsContext) AnnotatedQualifiedClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotatedQualifiedClassNameContext) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression) AnonymousInnerClassDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.AnonymousInnerClassDeclarationContext) ForInitContext(org.apache.groovy.parser.antlr4.GroovyParser.ForInitContext) VariableModifiersOptContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableModifiersOptContext) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) MultiplicativeExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.MultiplicativeExprAltContext) SyntaxErrorMessage(org.codehaus.groovy.control.messages.SyntaxErrorMessage) AssignmentExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.AssignmentExprAltContext) CatchStatement(org.codehaus.groovy.ast.stmt.CatchStatement) TypeArgumentContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeArgumentContext) VariableDeclaratorsContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclaratorsContext) TypeParameterContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeParameterContext) GroovyBugError(org.codehaus.groovy.GroovyBugError) ReturnStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ReturnStmtAltContext) List(java.util.List) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) TypeParametersContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeParametersContext) ArgumentsContext(org.apache.groovy.parser.antlr4.GroovyParser.ArgumentsContext) BlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement) LE(org.apache.groovy.parser.antlr4.GroovyParser.LE) BlockStatementsContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockStatementsContext) Optional(java.util.Optional) GstringPathContext(org.apache.groovy.parser.antlr4.GroovyParser.GstringPathContext) QualifiedStandardClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedStandardClassNameContext) KeywordsContext(org.apache.groovy.parser.antlr4.GroovyParser.KeywordsContext) AdditiveExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.AdditiveExprAltContext) NodeMetaDataHandler(org.codehaus.groovy.ast.NodeMetaDataHandler) ClassicalForControlContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassicalForControlContext) Statement(org.codehaus.groovy.ast.stmt.Statement) ParseCancellationException(org.antlr.v4.runtime.misc.ParseCancellationException) CodeVisitorSupport(org.codehaus.groovy.ast.CodeVisitorSupport) ElvisOperatorExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression) STATIC(org.apache.groovy.parser.antlr4.GroovyParser.STATIC) LT(org.apache.groovy.parser.antlr4.GroovyParser.LT) Deque(java.util.Deque) ResourceListContext(org.apache.groovy.parser.antlr4.GroovyParser.ResourceListContext) SwitchStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.SwitchStatementContext) SuperPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.SuperPrmrAltContext) EnumHelper(org.codehaus.groovy.antlr.EnumHelper) FormalParametersContext(org.apache.groovy.parser.antlr4.GroovyParser.FormalParametersContext) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) DoWhileStatement(org.codehaus.groovy.ast.stmt.DoWhileStatement) ExpressionListElementContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionListElementContext) LambdaBodyContext(org.apache.groovy.parser.antlr4.GroovyParser.LambdaBodyContext) ContinueStatement(org.codehaus.groovy.ast.stmt.ContinueStatement) QualifiedNameContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedNameContext) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) ResourcesContext(org.apache.groovy.parser.antlr4.GroovyParser.ResourcesContext) YieldStmtAltContext(org.apache.groovy.parser.antlr4.GroovyLangParser.YieldStmtAltContext) ADD(org.apache.groovy.parser.antlr4.GroovyParser.ADD) PostfixExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.PostfixExpressionContext) Iterator(java.util.Iterator) CASE(org.apache.groovy.parser.antlr4.GroovyParser.CASE) ExpressionInParContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionInParContext) DimContext(org.apache.groovy.parser.antlr4.GroovyParser.DimContext) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression) TypeContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeContext) SwitchStatement(org.codehaus.groovy.ast.stmt.SwitchStatement) FormalParameterListContext(org.apache.groovy.parser.antlr4.GroovyParser.FormalParameterListContext) ImportNode(org.codehaus.groovy.ast.ImportNode) QualifiedClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedClassNameContext) LogicalOrExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LogicalOrExprAltContext) FieldNode(org.codehaus.groovy.ast.FieldNode) AttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression) RANGE_INCLUSIVE(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_INCLUSIVE) ClassOrInterfaceTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceTypeContext) Tuple.tuple(groovy.lang.Tuple.tuple) RANGE_EXCLUSIVE_LEFT(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_EXCLUSIVE_LEFT) ClassOrInterfaceModifiersOptContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceModifiersOptContext) MemberDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.MemberDeclarationContext) Collections(java.util.Collections) ModifiersContext(org.apache.groovy.parser.antlr4.GroovyParser.ModifiersContext) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) CreatorContext(org.apache.groovy.parser.antlr4.GroovyParser.CreatorContext) TupleExpression(org.codehaus.groovy.ast.expr.TupleExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) Token(org.antlr.v4.runtime.Token) GStringExpression(org.codehaus.groovy.ast.expr.GStringExpression) MethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) GenericsType(org.codehaus.groovy.ast.GenericsType) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) LinkedList(java.util.LinkedList) ArrayList(java.util.ArrayList) List(java.util.List) ClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) MethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) ClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) NamedPropertyArgsContext(org.apache.groovy.parser.antlr4.GroovyParser.NamedPropertyArgsContext) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) AttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression) UnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression) ClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) MethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression) TernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) PrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression) PostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression) Expression(org.codehaus.groovy.ast.expr.Expression) UnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) BitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) NotExpression(org.codehaus.groovy.ast.expr.NotExpression) EmptyExpression(org.codehaus.groovy.ast.expr.EmptyExpression) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) TupleExpression(org.codehaus.groovy.ast.expr.TupleExpression) MethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) CastExpression(org.codehaus.groovy.ast.expr.CastExpression) BooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression) LambdaExpression(org.codehaus.groovy.ast.expr.LambdaExpression) GStringExpression(org.codehaus.groovy.ast.expr.GStringExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) RangeExpression(org.codehaus.groovy.ast.expr.RangeExpression) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) ElvisOperatorExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression) AttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression)

Aggregations

ListExpression (org.codehaus.groovy.ast.expr.ListExpression)103 ConstantExpression (org.codehaus.groovy.ast.expr.ConstantExpression)77 Expression (org.codehaus.groovy.ast.expr.Expression)77 ClassExpression (org.codehaus.groovy.ast.expr.ClassExpression)70 VariableExpression (org.codehaus.groovy.ast.expr.VariableExpression)53 ClassNode (org.codehaus.groovy.ast.ClassNode)49 ArgumentListExpression (org.codehaus.groovy.ast.expr.ArgumentListExpression)43 PropertyExpression (org.codehaus.groovy.ast.expr.PropertyExpression)42 MapExpression (org.codehaus.groovy.ast.expr.MapExpression)38 MethodCallExpression (org.codehaus.groovy.ast.expr.MethodCallExpression)38 ArrayExpression (org.codehaus.groovy.ast.expr.ArrayExpression)37 BinaryExpression (org.codehaus.groovy.ast.expr.BinaryExpression)32 ConstructorCallExpression (org.codehaus.groovy.ast.expr.ConstructorCallExpression)32 ArrayList (java.util.ArrayList)31 ClosureExpression (org.codehaus.groovy.ast.expr.ClosureExpression)30 DeclarationExpression (org.codehaus.groovy.ast.expr.DeclarationExpression)28 AnnotationConstantExpression (org.codehaus.groovy.ast.expr.AnnotationConstantExpression)25 TupleExpression (org.codehaus.groovy.ast.expr.TupleExpression)25 MapEntryExpression (org.codehaus.groovy.ast.expr.MapEntryExpression)23 CastExpression (org.codehaus.groovy.ast.expr.CastExpression)22