invoke method

  1. @override
Object? invoke(
  1. String memberName,
  2. List positionalArguments, [
  3. Map<Symbol, dynamic>? namedArguments
])
inherited

Invokes the function or method memberName, and returns the result.

Let o be the object reflected by this mirror, let f be the simple name of the member denoted by memberName, let a1, ..., an be the elements of positionalArguments let k1, ..., km be the identifiers denoted by the elements of namedArguments.keys and let v1, ..., vm be the elements of namedArguments.values. Then this method will perform the method invocation o.f(a1, ..., an, k1: v1, ..., km: vm) in a scope that has access to the private members of o (if o is a class or library) or the private members of the class of o (otherwise). If the invocation returns a result r, this method returns the result r. If the invocation causes a compilation error the effect is the same as if a non-reflective compilation error had been encountered. If the invocation throws an exception e (that it does not catch) this method throws e.

Note that the return type of the corresponding method in dart:mirrors is InstanceMirror.

Required capabilities: invoke on an instance mirror requires a matching InstanceInvokeCapability or InstanceInvokeMetaCapability; invoke on a class mirror requires a matching StaticInvokeCapability or StaticInvokeMetaCapability; and invoke on a top-level function requires a matching TopLevelInvokeCapability or TopLevelInvokeMetaCapability.

Implementation

@override
Object? invoke(
  String memberName,
  List positionalArguments, [
  Map<Symbol, dynamic>? namedArguments,
]) {
  Never fail() {
    throw reflectionNoSuchMethodError(
      hasReflectedType ? reflectedType : null,
      memberName,
      positionalArguments,
      namedArguments,
    );
  }

  StaticGetter? getter = _getters[memberName];
  if (getter == null) fail();
  if (!_checkStaticParameterListShape(
    memberName,
    positionalArguments.length,
    namedArguments?.keys,
  )) {
    fail();
  }
  return Function.apply(
    getter() as Function,
    positionalArguments,
    namedArguments,
  );
}