diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 01a53ea2..ea9e539e 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -756,10 +756,10 @@ void BfModule::CheckMemberNames(BfTypeInstance* typeInst) if (memberMap.TryGetValue(memberRef.mName, &prevMemberRef)) { //auto& prevMemberRef = itr->second; - + MemberRef* firstMemberRef = &memberRef; MemberRef* secondMemberRef = prevMemberRef; - bool showPrevious = false; + bool showPrevious = false; BfError* error = NULL; if (prevMemberRef->mTypeInst != typeInst) @@ -801,6 +801,20 @@ void BfModule::CheckMemberNames(BfTypeInstance* typeInst) { std::swap(firstMemberRef, secondMemberRef); } + + if (typeInst->mTypeDef->mIsCombinedPartial) + { + if ((firstMemberRef->mKindName == "property") && (secondMemberRef->mKindName == "property")) + { + auto firstPropertyDef = (BfPropertyDef*)firstMemberRef->mMemberDef; + auto secondPropertyDef = (BfPropertyDef*)secondMemberRef->mMemberDef; + if (auto secondPropertyDeclaration = BfNodeDynCast(secondPropertyDef->mFieldDeclaration)) + { + if ((secondPropertyDeclaration->mVirtualSpecifier != NULL) && (secondPropertyDeclaration->mVirtualSpecifier->mToken == BfToken_Override)) + continue; + } + } + } if (secondMemberRef->mNameNode != NULL) error = Fail(StrFormat("A %s named '%s' has already been declared.", secondMemberRef->mKindName.c_str(), memberRef.mName.c_str()), secondMemberRef->mNameNode, true);