| 5654 | } |
| 5655 | |
| 5656 | String BfTypeUtils::TypeToString(BfAstNode* typeRefNode) |
| 5657 | { |
| 5658 | if (auto identifierNode = BfNodeDynCast<BfIdentifierNode>(typeRefNode)) |
| 5659 | return identifierNode->ToString(); |
| 5660 | |
| 5661 | auto typeRef = BfNodeDynCast<BfTypeReference>(typeRefNode); |
| 5662 | if (typeRef == NULL) |
| 5663 | return ""; |
| 5664 | |
| 5665 | if (auto typeDefTypeRef = BfNodeDynCast<BfDirectTypeDefReference>(typeRef)) |
| 5666 | { |
| 5667 | if (!typeDefTypeRef->mTypeDef->mNamespace.IsEmpty()) |
| 5668 | return typeDefTypeRef->mTypeDef->mNamespace.ToString() + "." + typeDefTypeRef->mTypeDef->mName->mString; |
| 5669 | else |
| 5670 | return String(typeDefTypeRef->mTypeDef->mName->mString); |
| 5671 | } |
| 5672 | |
| 5673 | if (typeRef->IsNamedTypeReference()) |
| 5674 | { |
| 5675 | return typeRef->ToString(); |
| 5676 | } |
| 5677 | |
| 5678 | if (auto ptrType = BfNodeDynCast<BfPointerTypeRef>(typeRef)) |
| 5679 | return TypeToString(ptrType->mElementType) + "*"; |
| 5680 | if (auto ptrType = BfNodeDynCast<BfArrayTypeRef>(typeRef)) |
| 5681 | { |
| 5682 | String name = TypeToString(ptrType->mElementType) + "["; |
| 5683 | for (int i = 1; i < ptrType->mDimensions; i++) |
| 5684 | name += ","; |
| 5685 | name += "]"; |
| 5686 | return name; |
| 5687 | } |
| 5688 | if (auto genericInstanceType = BfNodeDynCast<BfGenericInstanceTypeRef>(typeRef)) |
| 5689 | { |
| 5690 | String name = TypeToString(genericInstanceType->mElementType); |
| 5691 | name += "<"; |
| 5692 | for (int i = 0; i < (int)genericInstanceType->mGenericArguments.size(); i++) |
| 5693 | { |
| 5694 | if (i > 0) |
| 5695 | name += ", "; |
| 5696 | name += TypeToString(genericInstanceType->mGenericArguments[i]); |
| 5697 | } |
| 5698 | name += ">"; |
| 5699 | return name; |
| 5700 | } |
| 5701 | if (auto genericParamTypeRef = BfNodeDynCast<BfGenericParamTypeRef>(typeRef)) |
| 5702 | { |
| 5703 | if (genericParamTypeRef->mGenericParamKind == BfGenericParamKind_Method) |
| 5704 | return StrFormat("@M%d", genericParamTypeRef->mGenericParamIdx); |
| 5705 | return StrFormat("@T%d", genericParamTypeRef->mGenericParamIdx); |
| 5706 | } |
| 5707 | if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef)) |
| 5708 | { |
| 5709 | return TypeToString(qualifiedTypeRef->mLeft) + "." + TypeToString(qualifiedTypeRef->mRight); |
| 5710 | } |
| 5711 | if (auto refTypeRef = BfNodeDynCast<BfRefTypeRef>(typeRef)) |
| 5712 | { |
| 5713 | String str = BfTokenToString(refTypeRef->mRefToken->GetToken()); |
no test coverage detected