isMatch static method

bool isMatch(
  1. DartType? dartType,
  2. Type type
)

Returns true if dartType represents the type type.

Implementation

static bool isMatch(DartType? dartType, Type type) {
  if (dartType == null) return false;
  if (resolveType(dartType) == type) return true;
  if (type == dynamic) {
    return dartType is DynamicType ? true : false;
  }
  // Dart:mirrors must not be used with type `dynamic`.
  final checker = _checkers[type] ?? TypeChecker.fromRuntime(type);
  if (checker.isExactlyType(dartType)) {
    final dartTypeArgs = (dartType is ParameterizedType)
        ? dartType.typeArguments
        : <DartType>[];
    final typeMirror = reflectType(type);
    final typeArgs = typeMirror.typeArguments;
    // Match type arguments
    if (dartTypeArgs.length != typeArgs.length) return false;
    for (var i = 0; i < typeArgs.length; i++) {
      if (!isMatch(
        dartTypeArgs[i],
        typeArgs[i].reflectedType,
      )) return false;
    }
    // Store fully resolved types.
    _resolvedTypes[dartType] = type;
    return true;
  } else if (checker.isAssignableFromType(dartType)) {
    return true;
  } else {
    return false;
  }
}