in src/extension.ts [691:770]
private _updateCodeModel(folder: CMakeToolsFolder) {
const cmt: CMakeTools = folder.cmakeTools;
this._projectOutlineProvider.updateCodeModel(
cmt.workspaceContext.folder,
cmt.codeModelContent,
{
defaultTarget: cmt.defaultBuildTarget || undefined,
launchTargetName: cmt.launchTargetName
}
);
rollbar.invokeAsync(localize('update.code.model.for.cpptools', 'Update code model for cpptools'), {}, async () => {
if (vscode.workspace.getConfiguration('C_Cpp', folder.folder).get<string>('intelliSenseEngine')?.toLocaleLowerCase() === 'disabled') {
log.debug(localize('update.intellisense.disabled', 'Not updating the configuration provider because {0} is set to {1}', '"C_Cpp.intelliSenseEngine"', '"Disabled"'));
return;
}
if (!this._cppToolsAPI) {
this._cppToolsAPI = await cpt.getCppToolsApi(cpt.Version.v5);
}
if (this._cppToolsAPI && (cmt.activeKit || cmt.configurePreset)) {
const cpptools = this._cppToolsAPI;
let cache: CMakeCache;
try {
cache = await CMakeCache.fromPath(await cmt.cachePath);
} catch (e) {
rollbar.exception(localize('filed.to.open.cache.file.on.code.model.update', 'Failed to open CMake cache file on code model update'), e);
return;
}
const drv: CMakeDriver | null = await cmt.getCMakeDriverInstance();
const configureEnv = await drv?.getConfigureEnvironment();
const isMultiConfig = !!cache.get('CMAKE_CONFIGURATION_TYPES');
if (drv) {
drv.isMultiConfig = isMultiConfig;
}
const actualBuildType = await (async () => {
if (cmt.useCMakePresets) {
if (isMultiConfig) {
return cmt.buildPreset?.configuration || null;
} else {
const buildType = cache.get('CMAKE_BUILD_TYPE');
return buildType ? buildType.as<string>() : null; // Single config generators set the build type during config, not build.
}
} else {
return cmt.currentBuildType();
}
})();
const clCompilerPath = await findCLCompilerPath(configureEnv);
this._configProvider.cpptoolsVersion = cpptools.getVersion();
let codeModelContent;
if (cmt.codeModelContent) {
codeModelContent = cmt.codeModelContent;
this._configProvider.updateConfigurationData({ cache, codeModelContent, clCompilerPath, activeTarget: cmt.defaultBuildTarget, activeBuildTypeVariant: actualBuildType, folder: cmt.folder.uri.fsPath });
} else if (drv && drv.codeModelContent) {
codeModelContent = drv.codeModelContent;
this._configProvider.updateConfigurationData({ cache, codeModelContent, clCompilerPath, activeTarget: cmt.defaultBuildTarget, activeBuildTypeVariant: actualBuildType, folder: cmt.folder.uri.fsPath });
this._projectOutlineProvider.updateCodeModel(
cmt.workspaceContext.folder,
codeModelContent,
{
defaultTarget: cmt.defaultBuildTarget || undefined,
launchTargetName: cmt.launchTargetName
}
);
}
this.ensureCppToolsProviderRegistered();
if (cpptools.notifyReady && this.cpptoolsNumFoldersReady < this._folders.size) {
++this.cpptoolsNumFoldersReady;
if (this.cpptoolsNumFoldersReady === this._folders.size) {
cpptools.notifyReady(this._configProvider);
this._configProvider.markAsReady();
}
} else {
cpptools.didChangeCustomConfiguration(this._configProvider);
this._configProvider.markAsReady();
}
}
});
}