override fun isAssignableTo()

in compiler/ast/src/main/kotlin/motif/ast/compiler/CompilerType.kt [51:81]


  override fun isAssignableTo(type: IrType): Boolean {
    val baseMirror = (type as CompilerType).mirror

    if (!env.typeUtils.isAssignable(mirror, baseMirror)) {
      return false
    }

    if (env.typeUtils.isSameType(mirror, baseMirror)) {
      return true
    }

    if (!mirror.isDeclaredType() || !baseMirror.isDeclaredType()) {
      return env.typeUtils.isAssignable(mirror, baseMirror)
    }

    val matchingType = getMatchingSuperType(baseMirror, mirror) ?: return false

    if (baseMirror.typeArguments.isEmpty()) {
      return true
    }

    if (matchingType.typeArguments.size != baseMirror.typeArguments.size) {
      return false
    }

    return if (matchingType.typeArguments.isEmpty() && baseMirror.typeArguments.isEmpty()) {
      env.typeUtils.isAssignable(matchingType, baseMirror)
    } else {
      matchingType.rawType.isAssignableFrom(baseMirror.rawType)
    }
  }