void () { for (ExternalSystemManager<?, ?, ?, ?, ?> manager : ExternalSystemManager.EP_NAME.getIterable()) { ProjectSystemId systemId = manager.getSystemId(); AbstractExternalSystemLocalSettings<?> settings = manager.getLocalSettingsProvider().fun(myProject); Map<ExternalProjectPojo, Collection<ExternalProjectPojo>> availableProjects = settings.getAvailableProjects(); for (Map.Entry<ExternalProjectPojo, Collection<ExternalProjectPojo>> entry : availableProjects.entrySet()) { ExternalProjectPojo projectPojo = entry.getKey(); String externalProjectPath = projectPojo.getPath(); Pair<ProjectSystemId, File> key = Pair.create(systemId, new File(externalProjectPath)); InternalExternalProjectInfo externalProjectInfo = myExternalRootProjects.get(key); if (externalProjectInfo == null) { externalProjectInfo = myExternalRootProjects.computeIfAbsent(key, pair -> { DataNode<ProjectData> dataNode = convert(systemId, projectPojo, entry.getValue()); return new InternalExternalProjectInfo(systemId, externalProjectPath, dataNode); }); ExternalProjectsManager.getInstance(myProject).getExternalProjectsWatcher().markDirty(externalProjectPath); markAsChangedAndScheduleSave(); } // restore linked project sub-modules ExternalProjectSettings linkedProjectSettings = manager.getSettingsProvider().fun(myProject).getLinkedProjectSettings(externalProjectPath); if (linkedProjectSettings != null && ContainerUtil.isEmpty(linkedProjectSettings.getModules())) { final Set<String> modulePaths = ContainerUtil.map2Set( ExternalSystemApiUtil.findAllRecursively(externalProjectInfo.getExternalProjectStructure(), MODULE), node -> node.getData().getLinkedExternalProjectPath()); linkedProjectSettings.setModules(modulePaths); } } } }