bool matches()

in lib/mirror_matchers.dart [27:54]


  bool matches(Object? item, Map matchState) {
    var mirror = reflect(item);
    var classMirror = mirror.type;
    var symbol = Symbol(_name);
    var candidate = classMirror.declarations[symbol];
    if (candidate == null) {
      addStateInfo(matchState, {'reason': 'has no property named "$_name"'});
      return false;
    }
    var isInstanceField = candidate is VariableMirror && !candidate.isStatic;
    var isInstanceGetter =
        candidate is MethodMirror && candidate.isGetter && !candidate.isStatic;
    if (!(isInstanceField || isInstanceGetter)) {
      addStateInfo(matchState, {
        'reason':
            'has a member named "$_name", but it is not an instance property'
      });
      return false;
    }
    var matcher = _matcher;
    if (matcher == null) return true;
    var result = mirror.getField(symbol);
    var resultMatches = matcher.matches(result.reflectee, matchState);
    if (!resultMatches) {
      addStateInfo(matchState, {'value': result.reflectee});
    }
    return resultMatches;
  }