| 8972 | int checkIdx = 0; |
| 8973 | |
| 8974 | BfTypeDef* BfModule::ResolveGenericInstanceDef(BfGenericInstanceTypeRef* genericTypeRef, BfType** outType, BfResolveTypeRefFlags resolveFlags) |
| 8975 | { |
| 8976 | if (outType != NULL) |
| 8977 | *outType = NULL; |
| 8978 | |
| 8979 | BfTypeReference* typeRef = genericTypeRef->mElementType; |
| 8980 | int numGenericParams = genericTypeRef->GetGenericArgCount(); |
| 8981 | |
| 8982 | BfTypeDef* curTypeDef = NULL; |
| 8983 | if (mCurTypeInstance != NULL) |
| 8984 | curTypeDef = mCurTypeInstance->mTypeDef->GetDefinition(); |
| 8985 | |
| 8986 | if (auto directTypeDef = BfNodeDynCast<BfDirectTypeReference>(typeRef)) |
| 8987 | { |
| 8988 | auto typeInst = directTypeDef->mType->ToTypeInstance(); |
| 8989 | return typeInst->mTypeDef->GetDefinition(); |
| 8990 | } |
| 8991 | |
| 8992 | auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(typeRef); |
| 8993 | auto directStrTypeDef = BfNodeDynCastExact<BfDirectStrTypeReference>(typeRef); |
| 8994 | if ((namedTypeRef != NULL) || (directStrTypeDef != NULL)) |
| 8995 | { |
| 8996 | BfTypeLookupError error; |
| 8997 | error.mRefNode = typeRef; |
| 8998 | BfTypeDef* typeDef = FindTypeDef(typeRef, NULL, &error, numGenericParams, resolveFlags); |
| 8999 | if (typeDef != NULL) |
| 9000 | { |
| 9001 | BfAutoComplete* autoComplete = NULL; |
| 9002 | if (mCompiler->IsAutocomplete()) |
| 9003 | autoComplete = mCompiler->mResolvePassData->mAutoComplete; |
| 9004 | |
| 9005 | if ((autoComplete != NULL) && (autoComplete->mIsGetDefinition) && (autoComplete->IsAutocompleteNode(typeRef))) |
| 9006 | { |
| 9007 | if ((autoComplete->mDefMethod == NULL) && (autoComplete->mDefField == NULL) && |
| 9008 | (autoComplete->mDefProp == NULL) && (typeDef->mTypeDeclaration != NULL)) |
| 9009 | { |
| 9010 | autoComplete->mDefType = typeDef; |
| 9011 | autoComplete->SetDefinitionLocation(typeDef->mTypeDeclaration->mNameNode); |
| 9012 | } |
| 9013 | } |
| 9014 | |
| 9015 | if (mCompiler->mResolvePassData != NULL) |
| 9016 | mCompiler->mResolvePassData->HandleTypeReference(typeRef, typeDef); |
| 9017 | |
| 9018 | return typeDef; |
| 9019 | } |
| 9020 | |
| 9021 | if (mCurTypeInstance != NULL) |
| 9022 | { |
| 9023 | bool wasGenericParam = false; |
| 9024 | |
| 9025 | // Check generics first |
| 9026 | if (typeRef->IsA<BfNamedTypeReference>()) |
| 9027 | { |
| 9028 | String findName = typeRef->ToString(); |
| 9029 | if ((resolveFlags & BfResolveTypeRefFlag_Attribute) != 0) |
| 9030 | findName += "Attribute"; |
| 9031 | if ((mCurTypeInstance != NULL) && (mCurTypeInstance->IsGenericTypeInstance())) |
no test coverage detected