diff --git a/.bazelci/clion.yml b/.bazelci/clion.yml index d5f760478d9..a7a81cdd087 100644 --- a/.bazelci/clion.yml +++ b/.bazelci/clion.yml @@ -1,43 +1,5 @@ --- tasks: - CLion-internal-stable: - name: CLion Internal Stable - platform: ubuntu2204 - build_flags: - - --define=ij_product=clion-latest - build_targets: - - //clwb/... - test_flags: - - --define=ij_product=clion-latest - - --test_output=errors - test_targets: - - //:clwb_tests - CLion-internal-beta: - name: CLion Internal Beta - platform: ubuntu2204 - build_flags: - - --define=ij_product=clion-beta - build_targets: - - //clwb/... - test_flags: - - --define=ij_product=clion-beta - - --test_output=errors - test_targets: - - //:clwb_tests - CLion-internal-under-dev: - name: CLion Internal Under Development - platform: ubuntu2204 - build_flags: - - --define=ij_product=clion-under-dev - build_targets: - - //clwb/... - test_flags: - - --define=ij_product=clion-under-dev - - --test_output=errors - test_targets: - - //:clwb_tests - soft_fail: - - exit_status: 1 CLion-OSS-oldest-stable: name: CLion OSS Oldest Stable platform: ubuntu2204 diff --git a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java index 83d20b1512e..f4cb8321d1f 100644 --- a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java +++ b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java @@ -15,6 +15,7 @@ */ package com.google.idea.blaze.base.sync.aspects.strategy; +import com.google.common.collect.ImmutableSet; import com.google.idea.blaze.base.model.primitives.LanguageClass; import com.google.idea.blaze.base.scope.BlazeContext; import com.google.idea.blaze.base.sync.SyncListener; @@ -23,11 +24,13 @@ import com.google.idea.blaze.base.sync.data.BlazeProjectDataManager; import com.google.idea.blaze.base.util.TemplateWriter; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Map; +import java.util.Optional; public class SyncAspectTemplateProvider implements SyncListener { private final Map supportedLanguageAspectTemplate = Map.of( @@ -37,76 +40,43 @@ public class SyncAspectTemplateProvider implements SyncListener { @Override public void onSyncStart(Project project, BlazeContext context, SyncMode syncMode) throws SyncFailedException { - copyProjectAspects(project); prepareProjectAspect(project); } - private void copyProjectAspects(Project project) throws SyncFailedException { - final var projectAspects = AspectRepositoryProvider.getProjectAspectDirectory(project).orElse(null); - if (projectAspects == null) { - throw new SyncFailedException("Missing project aspect directory"); - } - - // only copy project aspect once, TODO: do we need versioning here? - if (projectAspects.exists()) return; - - final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory().orElse(null); - if (templateAspects == null || !templateAspects.isDirectory()) { - throw new SyncFailedException("Missing aspect template directory"); - } + private void prepareProjectAspect(Project project) throws SyncFailedException { + var manager = BlazeProjectDataManager.getInstance(project); + if (manager == null) return; + var realizedAspectsPath = AspectRepositoryProvider + .getProjectAspectDirectory(project) + .map(File::toPath) + .orElseThrow(() -> new SyncFailedException("Couldn't find project aspect directory")); try { - copyFileTree(templateAspects.toPath(), projectAspects.toPath()); + Files.createDirectories(realizedAspectsPath); + Files.writeString(realizedAspectsPath.resolve("WORKSPACE"), ""); + Files.writeString(realizedAspectsPath.resolve("BUILD"), ""); } catch (IOException e) { - throw new SyncFailedException("Could not copy aspect templates", e); + throw new SyncFailedException("Couldn't create realized aspects", e); } - } - private void copyFileTree(Path source, Path destination) throws IOException { - try (final var fileStream = Files.walk(source)) { - final var fileIterator = fileStream.iterator(); - while (fileIterator.hasNext()) { - copyUsingRelativePath(source, fileIterator.next(), destination); - } + final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory() + .orElseThrow(() -> new SyncFailedException("Couldn't find aspect template directory")); + var javaTemplate = "java_info.template.bzl"; + var realizedFile = realizedAspectsPath.resolve("java_info.bzl"); + var templateWriter = new TemplateWriter(templateAspects.toPath()); + var templateVariableMap = getStringStringMap(manager); + if (!templateWriter.writeToFile(javaTemplate, realizedFile, templateVariableMap)) { + throw new SyncFailedException("Could not create template for: "); } } - private void copyUsingRelativePath(Path sourcePrefix, Path source, Path destination) throws IOException { - // only interested in bzl files that are templates - if (source.endsWith(".bzl") && !source.endsWith("template.bzl")) return; - - final var sourceRelativePath = sourcePrefix.relativize(source).toString(); - final var destinationAbsolutePath = Paths.get(destination.toString(), sourceRelativePath); - Files.copy(source, destinationAbsolutePath); - } - - private void prepareProjectAspect(Project project) throws SyncFailedException { - var manager = BlazeProjectDataManager.getInstance(project); - if (manager == null) return; - - var projectData = manager.getBlazeProjectData(); - if (projectData == null) return; - var optionalAspectTemplateDir = AspectRepositoryProvider.getProjectAspectDirectory(project); - if (optionalAspectTemplateDir.isEmpty()) return; - var aspectTemplateDir = optionalAspectTemplateDir.get().toPath(); - var templateWriter = new TemplateWriter(aspectTemplateDir); - var activeLanguages = projectData.getWorkspaceLanguageSettings().getActiveLanguages(); - var isAtLeastBazel8 = projectData.getBlazeVersionData().bazelIsAtLeastVersion(8, 0, 0); - var templateVariableMap = Map.of( - "bazel8OrAbove", isAtLeastBazel8 ? "true" : "false", - "isJavaEnabled", activeLanguages.contains(LanguageClass.JAVA) || activeLanguages.contains(LanguageClass.GENERIC) ? "true" : "false" - ); - - for (final var language : activeLanguages) { - var templateFileName = supportedLanguageAspectTemplate.get(language); - if (templateFileName == null) continue; - - var realizedFileName = templateFileName.replace(".template.bzl", ".bzl"); - var realizedFile = aspectTemplateDir.resolve(realizedFileName); - - if (!templateWriter.writeToFile(templateFileName, realizedFile, templateVariableMap)) { - throw new SyncFailedException("Could not create template for: " + language); - } - } + private static @NotNull Map getStringStringMap(BlazeProjectDataManager manager) { + var projectData = Optional.ofNullable(manager.getBlazeProjectData()); // It can be empty on intial sync. Fall back to no lauguage support + var activeLanguages = projectData.map(it -> it.getWorkspaceLanguageSettings().getActiveLanguages()).orElse(ImmutableSet.of()); + var isAtLeastBazel8 = projectData.map(it -> it.getBlazeVersionData().bazelIsAtLeastVersion(8, 0, 0)).orElse(false); + return Map.of( + "bazel8OrAbove", isAtLeastBazel8 ? "true" : "false", + "isJavaEnabled", activeLanguages.contains(LanguageClass.JAVA) || activeLanguages.contains(LanguageClass.GENERIC) ? "true" : "false" + ); } } \ No newline at end of file