| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| part of '../expression.dart'; | |
| /// Represents invoking [target] as a method with arguments. | |
| class InvokeExpression extends Expression { | |
| /// Target of the method invocation. | |
| final Expression target; | |
| /// Optional; type of invocation. | |
| @Deprecated('Use isConst instead') | |
| final InvokeExpressionType? type; | |
| @override | |
| final bool isConst; | |
| final List<Expression> positionalArguments; | |
| final Map<String, Expression> namedArguments; | |
| final List<Reference> typeArguments; | |
| final String? name; | |
| const InvokeExpression._( | |
| this.target, | |
| this.positionalArguments, | |
| this.namedArguments, | |
| this.typeArguments, | |
| ) : name = null, | |
| type = null, | |
| isConst = false; | |
| const InvokeExpression.newOf( | |
| this.target, | |
| this.positionalArguments, [ | |
| this.namedArguments = const {}, | |
| this.typeArguments = const [], | |
| this.name, | |
| ]) : type = InvokeExpressionType.newInstance, | |
| isConst = false; | |
| const InvokeExpression.constOf( | |
| this.target, | |
| this.positionalArguments, [ | |
| this.namedArguments = const {}, | |
| this.typeArguments = const [], | |
| this.name, | |
| ]) : type = InvokeExpressionType.constInstance, | |
| isConst = true; | |
| @override | |
| R accept<R>(ExpressionVisitor<R> visitor, [R? context]) => | |
| visitor.visitInvokeExpression(this, context); | |
| @override | |
| String toString() => | |
| '${type ?? ''} $target($positionalArguments, $namedArguments)'; | |
| } | |
| enum InvokeExpressionType { newInstance, constInstance } |