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