diff --git a/IDE/src/ui/SourceViewPanel.bf b/IDE/src/ui/SourceViewPanel.bf index 4653f8e7..dc3df107 100644 --- a/IDE/src/ui/SourceViewPanel.bf +++ b/IDE/src/ui/SourceViewPanel.bf @@ -2182,12 +2182,14 @@ namespace IDE.ui for (var emitEmbedData in resolveParams.mEmitEmbeds) { var data = resolvePassData.GetEmitEmbedData(emitEmbedData.mTypeName, var srcLength, var revision); - if (srcLength < 0) + if ((srcLength < 0) && (resolveType == .ClassifyFullRefresh)) srcLength = 0; - - emitEmbedData.mCharData = new EditWidgetContent.CharData[srcLength+1] (?); - emitEmbedData.mCharData[srcLength] = default; - Internal.MemCpy(emitEmbedData.mCharData.Ptr, data, srcLength * strideof(EditWidgetContent.CharData)); + if (srcLength >= 0) + { + emitEmbedData.mCharData = new EditWidgetContent.CharData[srcLength+1] (?); + emitEmbedData.mCharData[srcLength] = default; + Internal.MemCpy(emitEmbedData.mCharData.Ptr, data, srcLength * strideof(EditWidgetContent.CharData)); + } } } } diff --git a/IDEHelper/Compiler/BfAutoComplete.cpp b/IDEHelper/Compiler/BfAutoComplete.cpp index d34b5118..4b286374 100644 --- a/IDEHelper/Compiler/BfAutoComplete.cpp +++ b/IDEHelper/Compiler/BfAutoComplete.cpp @@ -227,9 +227,18 @@ BfAutoComplete::~BfAutoComplete() void BfAutoComplete::SetModule(BfModule* module) { - mModule = module; - mCompiler = mModule->mCompiler; - mSystem = mCompiler->mSystem; + if (module != NULL) + { + mModule = module; + mCompiler = mModule->mCompiler; + mSystem = mCompiler->mSystem; + } + else + { + mModule = NULL; + mCompiler = NULL; + mSystem = NULL; + } } void BfAutoComplete::Clear() @@ -293,6 +302,8 @@ int BfAutoComplete::GetCursorIdx(BfAstNode* node) bool BfAutoComplete::IsAutocompleteNode(BfAstNode* node, int lengthAdd, int startAdd) { + if (mModule == NULL) + return false; if (node == NULL) return false; @@ -1297,6 +1308,9 @@ BfProject* BfAutoComplete::GetActiveProject() bool BfAutoComplete::WantsEntries() { + if (mModule == NULL) + return false; + return (mResolveType == BfResolveType_Autocomplete) || (mResolveType == BfResolveType_Autocomplete_HighPri) || (mResolveType == BfResolveType_GetSymbolInfo) || diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 0da56eed..0c3bcac9 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -4279,6 +4279,7 @@ void BfCompiler::ProcessAutocompleteTempType() { if ((autoComplete != NULL) && (autoComplete->mResolveType == BfResolveType_GoToDefinition)) { + autoComplete->SetModule(NULL); for (auto& kv : mResolvePassData->mEmitEmbedEntries) { String typeName = kv.mKey; @@ -4296,6 +4297,7 @@ void BfCompiler::ProcessAutocompleteTempType() } DoWorkLoop(); + autoComplete->SetModule(mContext->mScratchModule); } GenerateAutocompleteInfo(); diff --git a/IDEHelper/Compiler/BfContext.cpp b/IDEHelper/Compiler/BfContext.cpp index 07717c5a..a7a2ea2d 100644 --- a/IDEHelper/Compiler/BfContext.cpp +++ b/IDEHelper/Compiler/BfContext.cpp @@ -571,7 +571,16 @@ bool BfContext::ProcessWorkList(bool onlyReifiedTypes, bool onlyReifiedMethods) { if (!mCompiler->mIsResolveOnly) BF_ASSERT(!methodInstance->mIsReified || methodInstance->mDeclModule->mIsModuleMutable); - ProcessMethod(methodInstance); + + auto autoComplete = mCompiler->GetAutoComplete(); + if ((autoComplete != NULL) && (autoComplete->mModule == NULL)) + { + autoComplete->mModule = methodInstance->mDeclModule; + ProcessMethod(methodInstance); + autoComplete->mModule = NULL; + } + else + ProcessMethod(methodInstance); } }