1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Fix outer type inheritance list flashing when typing type name

This commit is contained in:
Brian Fiete 2020-11-30 10:50:19 -08:00
parent af16b5f356
commit 1b19eeb96e

View file

@ -3972,13 +3972,51 @@ void BfCompiler::ProcessAutocompleteTempType()
namespaceVisitor.Visit(mResolvePassData->mParser->mRootNode); namespaceVisitor.Visit(mResolvePassData->mParser->mRootNode);
} }
auto _FindAcutalTypeDef = [&](BfTypeDef* tempTypeDef)
{
auto typeName = tempTypeDef->mFullName;
int wantNumGenericParams = (int)tempTypeDef->mGenericParamDefs.size();
auto actualTypeDefItr = mSystem->mTypeDefs.TryGet(typeName);
while (actualTypeDefItr)
{
auto checkTypeDef = *actualTypeDefItr;
if ((!checkTypeDef->mIsPartial) /*&& (checkTypeDef->mTypeCode != BfTypeCode_Extension)*/ &&
((checkTypeDef->mTypeCode == tempTypeDef->mTypeCode) || (tempTypeDef->mTypeCode == BfTypeCode_Extension)))
{
if ((checkTypeDef->NameEquals(tempTypeDef)) && (checkTypeDef->mIsCombinedPartial) &&
(checkTypeDef->mGenericParamDefs.size() == tempTypeDef->mGenericParamDefs.size()) &&
(tempTypeDef->mProject->ContainsReference(checkTypeDef->mProject)))
{
return mSystem->FilterDeletedTypeDef(checkTypeDef);
}
if ((checkTypeDef->mGenericParamDefs.size() == wantNumGenericParams) &&
(FileNameEquals(tempTypeDef->mSource->mSourceData->ToParserData()->mFileName, checkTypeDef->mSource->mSourceData->ToParserData()->mFileName)) &&
(tempTypeDef->mProject == checkTypeDef->mProject))
{
return mSystem->FilterDeletedTypeDef(checkTypeDef);
}
}
actualTypeDefItr.MoveToNextHashMatch();
}
return (BfTypeDef*)NULL;
};
BfTypeDef* tempTypeDef = NULL; BfTypeDef* tempTypeDef = NULL;
BfTypeDef* actualTypeDef = NULL;
for (auto checkTempType : mResolvePassData->mAutoCompleteTempTypes) for (auto checkTempType : mResolvePassData->mAutoCompleteTempTypes)
{ {
if (mResolvePassData->mAutoComplete->IsAutocompleteNode(checkTempType->mTypeDeclaration)) if (mResolvePassData->mAutoComplete->IsAutocompleteNode(checkTempType->mTypeDeclaration))
{ {
BfTypeDef* checkActualTypeDef = _FindAcutalTypeDef(checkTempType);
if ((actualTypeDef == NULL) || (checkActualTypeDef != NULL))
{
actualTypeDef = checkActualTypeDef;
tempTypeDef = checkTempType; tempTypeDef = checkTempType;
mContext->HandleChangedTypeDef(tempTypeDef, true); }
mContext->HandleChangedTypeDef(checkTempType, true);
} }
BfSourceElementType elemType = BfSourceElementType_Type; BfSourceElementType elemType = BfSourceElementType_Type;
@ -4055,37 +4093,6 @@ void BfCompiler::ProcessAutocompleteTempType()
} }
} }
auto _FindAcutalTypeDef = [&](BfTypeDef* tempTypeDef)
{
auto typeName = tempTypeDef->mFullName;
int wantNumGenericParams = (int)tempTypeDef->mGenericParamDefs.size();
auto actualTypeDefItr = mSystem->mTypeDefs.TryGet(typeName);
while (actualTypeDefItr)
{
auto checkTypeDef = *actualTypeDefItr;
if ((!checkTypeDef->mIsPartial) /*&& (checkTypeDef->mTypeCode != BfTypeCode_Extension)*/ &&
((checkTypeDef->mTypeCode == tempTypeDef->mTypeCode) || (tempTypeDef->mTypeCode == BfTypeCode_Extension)))
{
if ((checkTypeDef->NameEquals(tempTypeDef)) && (checkTypeDef->mIsCombinedPartial) &&
(checkTypeDef->mGenericParamDefs.size() == tempTypeDef->mGenericParamDefs.size()) &&
(tempTypeDef->mProject->ContainsReference(checkTypeDef->mProject)))
{
return mSystem->FilterDeletedTypeDef(checkTypeDef);
}
if ((checkTypeDef->mGenericParamDefs.size() == wantNumGenericParams) &&
(FileNameEquals(tempTypeDef->mSource->mSourceData->ToParserData()->mFileName, checkTypeDef->mSource->mSourceData->ToParserData()->mFileName)) &&
(tempTypeDef->mProject == checkTypeDef->mProject))
{
return mSystem->FilterDeletedTypeDef(checkTypeDef);
}
}
actualTypeDefItr.MoveToNextHashMatch();
}
return (BfTypeDef*)NULL;
};
if (tempTypeDef->mTypeCode == BfTypeCode_Extension) if (tempTypeDef->mTypeCode == BfTypeCode_Extension)
{ {
BfTypeInstance* outerTypeInstance = NULL; BfTypeInstance* outerTypeInstance = NULL;
@ -4114,7 +4121,11 @@ void BfCompiler::ProcessAutocompleteTempType()
} }
} }
BfTypeDef* actualTypeDef = _FindAcutalTypeDef(tempTypeDef); // while (actualTypeDef == NULL)
// {
// checkT
// }
if ((actualTypeDef == NULL) || (actualTypeDef->mTypeDeclaration == NULL)) if ((actualTypeDef == NULL) || (actualTypeDef->mTypeDeclaration == NULL))
{ {
GenerateAutocompleteInfo(); GenerateAutocompleteInfo();