diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index b9c986d2..f13a3290 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -8891,7 +8891,8 @@ BfGenericParamInstance* BfModule::GetGenericTypeParamInstance(int genericParamId if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL) { auto activeTypeDef = GetActiveTypeDef(NULL, true); - if ((activeTypeDef->mTypeDeclaration != genericTypeInst->mTypeDef->mTypeDeclaration) && (activeTypeDef->IsExtension())) + if ((activeTypeDef->mTypeDeclaration != genericTypeInst->mTypeDef->mTypeDeclaration) && (activeTypeDef->IsExtension()) && + (genericTypeInst->mTypeDef->ContainsPartial(activeTypeDef))) { BfTypeDef* lookupTypeDef = activeTypeDef; while (lookupTypeDef->mNestDepth > genericTypeInst->mTypeDef->mNestDepth) diff --git a/IDEHelper/Compiler/BfSystem.cpp b/IDEHelper/Compiler/BfSystem.cpp index b5bb427f..fd041a0d 100644 --- a/IDEHelper/Compiler/BfSystem.cpp +++ b/IDEHelper/Compiler/BfSystem.cpp @@ -986,6 +986,15 @@ void BfTypeDef::ReportMemory(MemReporter* memReporter) memReporter->AddVec(mDirectAllocNodes, false); } +bool BfTypeDef::ContainsPartial(BfTypeDef* partialTypeDef) +{ + if (partialTypeDef->mPartialIdx < 0) + return false; + if (partialTypeDef->mPartialIdx >= mPartials.mSize) + return false; + return mPartials[partialTypeDef->mPartialIdx] == partialTypeDef; +} + bool BfTypeDef::NameEquals(BfTypeDef* otherTypeDef) { if (mName != otherTypeDef->mName) diff --git a/IDEHelper/Compiler/BfSystem.h b/IDEHelper/Compiler/BfSystem.h index ba2a8246..d38d0932 100644 --- a/IDEHelper/Compiler/BfSystem.h +++ b/IDEHelper/Compiler/BfSystem.h @@ -1211,6 +1211,7 @@ public: BfMethodDef* GetMethodByName(const StringImpl& name, int paramCount = -1); BfFieldDef* GetFieldByName(const StringImpl& name); bool HasAutoProperty(BfPropertyDeclaration* propertyDeclaration); + bool ContainsPartial(BfTypeDef* partialTypeDef); String GetAutoPropertyName(BfPropertyDeclaration* propertyDeclaration); BfAstNode* GetRefNode();