public static boolean isAssignable(BType sourceType, BType targetType, List<TypePair> unresolvedTypes) {
if (isSameOrAnyType(sourceType, targetType)) {
return true;
}
if (targetType.getTag() == TypeTags.UNION_TAG) {
return checkUnionAssignable(sourceType, targetType, unresolvedTypes);
}
if (targetType.getTag() == TypeTags.JSON_TAG && sourceType.getTag() == TypeTags.JSON_TAG) {
return true;
}
if (targetType.getTag() == TypeTags.ARRAY_TAG && sourceType.getTag() == TypeTags.ARRAY_TAG) {
if (((BArrayType) sourceType).getState() == BArrayState.CLOSED_SEALED
&& ((BArrayType) targetType).getState() == BArrayState.CLOSED_SEALED
&& ((BArrayType) sourceType).getSize() != ((BArrayType) targetType).getSize()) {
return false;
}
return checkArrayCast(((BArrayType) sourceType).getElementType(),
((BArrayType) targetType).getElementType(), unresolvedTypes);
}
if (sourceType.getTag() == TypeTags.TUPLE_TAG && targetType.getTag() == TypeTags.TUPLE_TAG) {
return checkTupleAssignable(sourceType, targetType, unresolvedTypes);
}
return checkCastByType(sourceType, targetType, unresolvedTypes);
}