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)
}
}