blob: f54dc0ecd00ef56a68c7116e311fd25e927e54ba [file] [log] [blame]
// 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.
// ignore_for_file: deprecated_member_use_from_same_package
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,
}