acceptsType method

bool acceptsType(
  1. ASTType type
)

Will return true if type can be cast to this type. Note: This is similar to Java isInstance and isAssignableFrom.

Implementation

bool acceptsType(ASTType type) {
  if (type == this) return true;

  if (type == ASTTypeGenericWildcard.instance) return true;

  if (name != type.name) {
    var typeSuperType = type.superType;
    if (typeSuperType == null) return false;

    if (!typeSuperType.acceptsType(this)) return false;
  }

  var generics = this.generics;
  var typeGenerics = type.generics;

  if (generics == null || generics.isEmpty) {
    return typeGenerics == null || typeGenerics.isEmpty;
  }

  if (typeGenerics == null || typeGenerics.isEmpty) {
    return false;
  }

  if (generics.length != typeGenerics.length) return false;

  var genericsLength = generics.length;

  for (var i = 0; i < genericsLength; ++i) {
    var g = generics[i];
    var tg = typeGenerics[i];

    if (!g.acceptsType(tg)) {
      return false;
    }
  }

  return true;
}