updateGraph() {
    var _a2, _b, _c;
    (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Session, "updateGraph", { name: this.projectName, kind: ProjectKind[this.projectKind] });
    perfLogger.logStartUpdateGraph();
    this.resolutionCache.startRecordingFilesWithChangedResolutions();
    const hasNewProgram = this.updateGraphWorker();
    const hasAddedorRemovedFiles = this.hasAddedorRemovedFiles;
    this.hasAddedorRemovedFiles = false;
    this.hasAddedOrRemovedSymlinks = false;
    const changedFiles = this.resolutionCache.finishRecordingFilesWithChangedResolutions() || emptyArray2;
    for (const file of changedFiles) {
      this.cachedUnresolvedImportsPerFile.delete(file);
    }
    if (this.languageServiceEnabled && this.projectService.serverMode === 0 /* Semantic */) {
      if (hasNewProgram || changedFiles.length) {
        this.lastCachedUnresolvedImportsList = getUnresolvedImports(this.program, this.cachedUnresolvedImportsPerFile);
      }
      this.projectService.typingsCache.enqueueInstallTypingsForProject(this, this.lastCachedUnresolvedImportsList, hasAddedorRemovedFiles);
    } else {
      this.lastCachedUnresolvedImportsList = void 0;
    }
    const isFirstProgramLoad = this.projectProgramVersion === 0 && hasNewProgram;
    if (hasNewProgram) {
      this.projectProgramVersion++;
    }
    if (hasAddedorRemovedFiles) {
      if (!this.autoImportProviderHost)
        this.autoImportProviderHost = void 0;
      (_b = this.autoImportProviderHost) == null ? void 0 : _b.markAsDirty();
    }
    if (isFirstProgramLoad) {
      this.getPackageJsonAutoImportProvider();
    }
    perfLogger.logStopUpdateGraph();
    (_c = tracing) == null ? void 0 : _c.pop();
    return !hasNewProgram;
  }
Updates set of files that contribute to this project
@returns: true if set of files in the project stays the same and false - otherwise.