| 10826 | } |
| 10827 | |
| 10828 | bool BfModule::ValidateTypeWildcard(BfAstNode* typeRef, bool isAttributeRef) |
| 10829 | { |
| 10830 | if (typeRef == NULL) |
| 10831 | return false; |
| 10832 | |
| 10833 | if (auto wildcardTypeRef = BfNodeDynCast<BfWildcardTypeReference>(typeRef)) |
| 10834 | return true; |
| 10835 | |
| 10836 | StringT<128> nameStr; |
| 10837 | typeRef->ToString(nameStr); |
| 10838 | if (isAttributeRef) |
| 10839 | nameStr.Append("Attribute"); |
| 10840 | auto typeDef = mSystem->FindTypeDef(nameStr, (BfProject*)NULL); |
| 10841 | if ((typeDef != NULL) && (typeDef->mGenericParamDefs.IsEmpty())) |
| 10842 | return true; |
| 10843 | |
| 10844 | if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef)) |
| 10845 | { |
| 10846 | if (qualifiedTypeRef->mLeft == NULL) |
| 10847 | return false; |
| 10848 | |
| 10849 | if (auto wildcardTypeRef = BfNodeDynCast<BfWildcardTypeReference>(qualifiedTypeRef->mRight)) |
| 10850 | { |
| 10851 | StringT<128> leftNameStr; |
| 10852 | |
| 10853 | BfType* leftType = NULL; |
| 10854 | BfAtomCompositeT<16> leftComposite; |
| 10855 | |
| 10856 | qualifiedTypeRef->mLeft->ToString(leftNameStr); |
| 10857 | if (!mSystem->ParseAtomComposite(leftNameStr, leftComposite)) |
| 10858 | return false; |
| 10859 | |
| 10860 | if (mSystem->ContainsNamespace(leftComposite, NULL)) |
| 10861 | return true; |
| 10862 | |
| 10863 | return ValidateTypeWildcard(qualifiedTypeRef->mLeft, false); |
| 10864 | } |
| 10865 | } |
| 10866 | |
| 10867 | if (!BfNodeIsA<BfGenericInstanceTypeRef>(typeRef)) |
| 10868 | { |
| 10869 | if (auto elementedTypeRef = BfNodeDynCast<BfElementedTypeRef>(typeRef)) |
| 10870 | { |
| 10871 | return ValidateTypeWildcard(elementedTypeRef->mElementType, false); |
| 10872 | } |
| 10873 | } |
| 10874 | |
| 10875 | BfAstNode* origTypeRef = typeRef; |
| 10876 | |
| 10877 | String name; |
| 10878 | String nameEx; |
| 10879 | int genericCount = 0; |
| 10880 | std::function<bool(BfAstNode*, bool)> _ToString = [&](BfAstNode* typeRef, bool isLast) |
| 10881 | { |
| 10882 | if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef)) |
| 10883 | { |
| 10884 | _ToString(qualifiedTypeRef->mLeft, false); |
| 10885 | name.Append("."); |
no test coverage detected