diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 2df0c22d..a5d91e26 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -3910,14 +3910,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy { if (!resolvedFieldType->IsValuelessType()) { - if (isCRepr) - { - dataFieldVec.push_back(fieldInstance); - } - else - { - dataFieldVec.push_back(fieldInstance); - } + dataFieldVec.push_back(fieldInstance); } } else @@ -7158,6 +7151,18 @@ BfType* BfModule::ResolveGenericType(BfType* unspecializedType, BfTypeVector* ty return CreatePointerType(elementType); } + if (unspecializedType->IsConcreteInterfaceType()) + { + auto concreteType = (BfConcreteInterfaceType*)unspecializedType; + auto elementType = ResolveGenericType(concreteType->GetUnderlyingType(), typeGenericArguments, methodGenericArguments, allowFail); + if (elementType == NULL) + return NULL; + auto elementTypeInstance = elementType->ToTypeInstance(); + if (elementTypeInstance == NULL) + return unspecializedType; + return CreateConcreteInterfaceType(elementTypeInstance); + } + if (unspecializedType->IsArray()) { auto arrayType = (BfArrayType*)unspecializedType; diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.h b/IDEHelper/Compiler/BfResolvedTypeUtils.h index 905e4291..f6a7f424 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.h +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.h @@ -2182,6 +2182,8 @@ public: virtual bool IsConcreteInterfaceType() override { return true; } virtual bool IsDependentOnUnderlyingType() override { return true; } virtual BfType* GetUnderlyingType() override { return mInterface; } + virtual bool IsUnspecializedType() override { return mInterface->IsUnspecializedType(); } + virtual bool IsUnspecializedTypeVariation() override { return mInterface->IsUnspecializedTypeVariation(); } }; class BfPointerType : public BfType