diff --git a/IDEHelper/Compiler/BfAutoComplete.cpp b/IDEHelper/Compiler/BfAutoComplete.cpp index 5561e8ce..4ff48e51 100644 --- a/IDEHelper/Compiler/BfAutoComplete.cpp +++ b/IDEHelper/Compiler/BfAutoComplete.cpp @@ -1911,6 +1911,8 @@ bool BfAutoComplete::CheckExplicitInterface(BfTypeInstance* interfaceType, BfAst else return false; + mModule->PopulateType(interfaceType, BfPopulateType_DataAndMethods); + String filter; if (isAutocompletingName) filter = GetFilter(memberName); @@ -2544,7 +2546,7 @@ void BfAutoComplete::CheckProperty(BfPropertyDeclaration* propertyDeclaration) { BfTypeInstance* typeInst = NULL; - auto type = mModule->ResolveTypeRef(propertyDeclaration->mExplicitInterface, BfPopulateType_DataAndMethods); + auto type = mModule->ResolveTypeRef(propertyDeclaration->mExplicitInterface, BfPopulateType_Identity); if (type != NULL) typeInst = type->ToTypeInstance(); diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 12f06464..97171a1c 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -6860,13 +6860,18 @@ BfType* BfModule::ResolveTypeDef(BfTypeDef* typeDef, BfPopulateType populateType return resolvedtypeDefType; } -// Get BaseClass even when we haven't populated the type yet2 +// Get BaseClass even when we haven't populated the type yet BfTypeInstance* BfModule::GetBaseType(BfTypeInstance* typeInst) { - if ((mContext->mCurTypeState != NULL) && (mContext->mCurTypeState->mTypeInstance == typeInst)) + if (typeInst->mBaseType == NULL) { - if (typeInst->mBaseType == NULL) - return NULL; + auto checkTypeState = mContext->mCurTypeState; + while (checkTypeState != NULL) + { + if (checkTypeState->mTypeInstance == typeInst) + return NULL; + checkTypeState = checkTypeState->mPrevState; + } } if ((typeInst->mBaseType == NULL) && (typeInst != mContext->mBfObjectType))