private _updateCodeModel()

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();
                }
            }
        });
    }