1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Fixed issues autocompleting in extensions outside definition project

This commit is contained in:
Brian Fiete 2022-01-01 10:12:20 -05:00
parent 2daafa7b4c
commit 476df62a24
2 changed files with 16 additions and 15 deletions

View file

@ -1252,6 +1252,17 @@ void BfAutoComplete::AddExtensionMethods(BfTypeInstance* targetType, BfTypeInsta
}
}
BfProject* BfAutoComplete::GetActiveProject()
{
BfProject* bfProject = NULL;
auto activeTypeDef = mModule->GetActiveTypeDef();
if (activeTypeDef != NULL)
bfProject = activeTypeDef->mProject;
else
bfProject = mCompiler->mResolvePassData->mParser->mProject;
return bfProject;
}
void BfAutoComplete::AddTopLevelNamespaces(BfAstNode* identifierNode)
{
String filter;
@ -1262,11 +1273,7 @@ void BfAutoComplete::AddTopLevelNamespaces(BfAstNode* identifierNode)
mInsertEndIdx = identifierNode->GetSrcEnd();
}
BfProject* bfProject = NULL;
if (mModule->mCurTypeInstance != NULL)
bfProject = mModule->mCurTypeInstance->mTypeDef->mProject;
else
bfProject = mCompiler->mResolvePassData->mParser->mProject;
BfProject* bfProject = GetActiveProject();
auto _AddProjectNamespaces = [&](BfProject* project)
{
@ -1923,12 +1930,7 @@ bool BfAutoComplete::CheckMemberReference(BfAstNode* target, BfAstNode* dotToken
BfAtomComposite targetComposite;
bool isValid = mSystem->ParseAtomComposite(targetStr, targetComposite);
BfProject* bfProject = NULL;
if (mModule->mCurTypeInstance != NULL)
bfProject = mModule->mCurTypeInstance->mTypeDef->mProject;
else
bfProject = mCompiler->mResolvePassData->mParser->mProject;
BfProject* bfProject = GetActiveProject();
auto _CheckProject = [&](BfProject* project)
{
if ((isValid) && (project->mNamespaces.ContainsKey(targetComposite)))
@ -1946,14 +1948,12 @@ bool BfAutoComplete::CheckMemberReference(BfAstNode* target, BfAstNode* dotToken
if (!isUsingDirective)
{
BfTypeDef* curTypeDef = NULL;
if (mModule->mCurTypeInstance != NULL)
curTypeDef = mModule->mCurTypeInstance->mTypeDef;
BfProject* activeProject = GetActiveProject();
for (auto typeDef : mSystem->mTypeDefs)
{
if ((typeDef->mNamespace == targetComposite) && (typeDef->mOuterType == NULL) &&
(!typeDef->mIsPartial) &&
((curTypeDef == NULL) || (curTypeDef->mProject->ContainsReference(typeDef->mProject))))
((activeProject == NULL) || (activeProject->ContainsReference(typeDef->mProject))))
{
AddTypeDef(typeDef, filter, onlyAttribute);
}

View file

@ -207,6 +207,7 @@ public:
int mDefTypeGenericParamIdx;
public:
BfProject* GetActiveProject();
bool CheckProtection(BfProtection protection, BfTypeDef* typeDef, bool allowProtected, bool allowPrivate);
String GetFilter(BfAstNode* node);
const char* GetTypeName(BfType* type);