override suspend fun onSync()

in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/sync/projectStructure/legacy/WorkspaceModuleProjectSyncHook.kt [29:66]


  override suspend fun onSync(environment: ProjectSyncHook.ProjectSyncHookEnvironment) {
    val project = environment.project
    if (!EnableWorkspaceModuleSyncHookExtension.EP.extensionList.any { it.isEnabled(environment) }) return
    val moduleEntitySource = BazelModuleEntitySource(WORKSPACE_MODULE_NAME)
    val directories = query("workspace/directories") { environment.server.workspaceDirectories() }
    val virtualFileUrlManager = project.serviceAsync<WorkspaceModel>().getVirtualFileUrlManager()
    val includedDirectories = directories.includedDirectories.map { it.uri }.map { virtualFileUrlManager.getOrCreateFromUrl(it) }
    val excludedDirectories = directories.excludedDirectories.map { it.uri }.map { virtualFileUrlManager.getOrCreateFromUrl(it) }
    val sourceRootEntities =
      includedDirectories.map { includedDirectory ->
        SourceRootEntity(
          url = includedDirectory,
          rootTypeId = SourceRootTypeId("generic-source"),
          entitySource = moduleEntitySource,
        )
      }
    val contentRootEntity =
      ContentRootEntity(
        url = project.rootDir.toVirtualFileUrl(virtualFileUrlManager),
        entitySource = moduleEntitySource,
        excludedPatterns = emptyList(),
      ) {
        this.sourceRoots = sourceRootEntities
        this.excludedUrls = excludedDirectories.map { ExcludeUrlEntity(it, moduleEntitySource) }
      }
    val moduleEntity =
      ModuleEntity(
        name = WORKSPACE_MODULE_NAME,
        dependencies = listOf(ModuleSourceDependency),
        entitySource = moduleEntitySource,
      ) {
        this.type = ModuleTypeId(ModuleTypeManager.getInstance().defaultModuleType.id)
        this.contentRoots = listOf(contentRootEntity)
      }

    environment.diff.workspaceModelDiff.mutableEntityStorage
      .addEntity(moduleEntity)
  }