ensureProjectForOpenFiles() {
    this.logger.info("Before ensureProjectForOpenFiles:");
    this.printProjects();
    this.openFiles.forEach((projectRootPath, path) => {
      const info = this.getScriptInfoForPath(path);
      if (info.isOrphan()) {
        this.assignOrphanScriptInfoToInferredProject(info, projectRootPath);
      } else {
        this.removeRootOfInferredProjectIfNowPartOfOtherProject(info);
      }
    });
    this.pendingEnsureProjectForOpenFiles = false;
    this.inferredProjects.forEach(updateProjectIfDirty);
    this.logger.info("After ensureProjectForOpenFiles:");
    this.printProjects();
  }
This function is to update the project structure for every inferred project.
It is called on the premise that all the configured projects are
up to date.
This will go through open files and assign them to inferred project if open file is not part of any other project
After that all the inferred project graphs are updated