| 4102 | } |
| 4103 | |
| 4104 | void BfCompiler::ProcessAutocompleteTempType() |
| 4105 | { |
| 4106 | BP_ZONE_F("BfCompiler::ProcessAutocompleteTempType %d", mResolvePassData->mResolveType); |
| 4107 | |
| 4108 | String& autoCompleteResultString = *gTLStrReturn.Get(); |
| 4109 | autoCompleteResultString.clear(); |
| 4110 | |
| 4111 | if (mContext->mBfObjectType == NULL) |
| 4112 | return; // Not initialized yet |
| 4113 | auto module = mContext->mScratchModule; |
| 4114 | |
| 4115 | auto autoComplete = mResolvePassData->mAutoComplete; |
| 4116 | BfLogSysM("ProcessAutocompleteTempType %d\n", autoComplete->mResolveType); |
| 4117 | |
| 4118 | SetAndRestoreValue<bool> prevCanceling(mCanceling, false); |
| 4119 | |
| 4120 | BF_ASSERT(mResolvePassData->mAutoComplete->mDefMethod == NULL); |
| 4121 | |
| 4122 | if (autoComplete->mResolveType == BfResolveType_GetNavigationData) |
| 4123 | { |
| 4124 | for (auto parser : mResolvePassData->mParsers) |
| 4125 | { |
| 4126 | for (auto node : parser->mSidechannelRootNode->mChildArr) |
| 4127 | { |
| 4128 | if (auto preprocNode = BfNodeDynCast<BfPreprocessorNode>(node)) |
| 4129 | { |
| 4130 | if (preprocNode->mCommand->Equals("region")) |
| 4131 | { |
| 4132 | if (!autoCompleteResultString.empty()) |
| 4133 | autoCompleteResultString += "\n"; |
| 4134 | autoCompleteResultString += "#"; |
| 4135 | preprocNode->mArgument->ToString(autoCompleteResultString); |
| 4136 | mContext->mScratchModule->UpdateSrcPos(preprocNode, (BfSrcPosFlags)(BfSrcPosFlag_NoSetDebugLoc | BfSrcPosFlag_Force)); |
| 4137 | autoCompleteResultString += StrFormat("\tregion\t%d\t%d", module->mCurFilePosition.mCurLine, module->mCurFilePosition.mCurColumn); |
| 4138 | } |
| 4139 | } |
| 4140 | } |
| 4141 | } |
| 4142 | |
| 4143 | for (auto tempTypeDef : mResolvePassData->mAutoCompleteTempTypes) |
| 4144 | { |
| 4145 | String typeName = tempTypeDef->ToString(); |
| 4146 | |
| 4147 | BfLogSysM("BfResolveType_GetNavigationData TypeDef:%p %s\n", tempTypeDef, typeName.c_str()); |
| 4148 | |
| 4149 | auto refNode = tempTypeDef->GetRefNode(); |
| 4150 | if ((refNode != NULL) && (!tempTypeDef->IsGlobalsContainer())) |
| 4151 | { |
| 4152 | if (!autoCompleteResultString.empty()) |
| 4153 | autoCompleteResultString += "\n"; |
| 4154 | |
| 4155 | String typeName = BfTypeUtils::TypeToString(tempTypeDef, BfTypeNameFlag_OmitNamespace); |
| 4156 | |
| 4157 | module->UpdateSrcPos(refNode, (BfSrcPosFlags)(BfSrcPosFlag_NoSetDebugLoc | BfSrcPosFlag_Force)); |
| 4158 | autoCompleteResultString += typeName; |
| 4159 | if (tempTypeDef->mTypeCode == BfTypeCode_Object) |
| 4160 | autoCompleteResultString += "\tclass"; |
| 4161 | else if (tempTypeDef->mTypeCode == BfTypeCode_Enum) |
no test coverage detected