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:
parent
af16b5f356
commit
1b19eeb96e
1 changed files with 46 additions and 35 deletions
|
@ -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))
|
||||||
{
|
{
|
||||||
tempTypeDef = checkTempType;
|
BfTypeDef* checkActualTypeDef = _FindAcutalTypeDef(checkTempType);
|
||||||
mContext->HandleChangedTypeDef(tempTypeDef, true);
|
if ((actualTypeDef == NULL) || (checkActualTypeDef != NULL))
|
||||||
|
{
|
||||||
|
actualTypeDef = checkActualTypeDef;
|
||||||
|
tempTypeDef = checkTempType;
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue