From 6b95fbe5addbdff087fd144b0bb565dee6574d64 Mon Sep 17 00:00:00 2001 From: Tom Beadman Date: Fri, 21 Jun 2024 16:31:24 +0100 Subject: [PATCH] Adding the ability to bypass reconciliation and compilation phases. --- CHANGELOG.md | 6 ++++++ execute-generators/README.md | 5 +++++ .../itemis/mps/gradle/generate/GenerateArgs.kt | 2 ++ .../de/itemis/mps/gradle/generate/Helper.kt | 17 +++++++++++++---- gradle.properties | 2 +- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01fd73a..1222f44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 1.16.0 + +### Added + +* `execute-generators`: added `--skip-reconciliation` and `--skip-compilation` options to reduce the total build time for certain large model use cases. + ## 1.15.1 ### Changed diff --git a/execute-generators/README.md b/execute-generators/README.md index eddf288..10a3983 100644 --- a/execute-generators/README.md +++ b/execute-generators/README.md @@ -63,6 +63,11 @@ optional arguments: --parallel-generation-threads THREADS Number of threads to use for parallel generation. Value of 0 means that parallel generation is disabled. Default: 0 + + --skip-reconciliation skips the Make.reconcile target. + + --skip-compilation skips the Javacompile.compile target. + ``` ## Error exit codes diff --git a/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/GenerateArgs.kt b/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/GenerateArgs.kt index 8fb356f..97c1970 100644 --- a/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/GenerateArgs.kt +++ b/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/GenerateArgs.kt @@ -10,6 +10,8 @@ class GenerateArgs(parser: ArgParser) : Args(parser) { val modules by parser.adding("--module", help = "list of modules to generate") val excludeModels by parser.adding("--exclude-model", help = "list of models to exclude from generation") val excludeModules by parser.adding("--exclude-module", help = "list of modules to exclude from generation") + val skipReconciliation by parser.flagging("--skip-reconciliation", help = "skips the Make.reconcile target") + val skipCompilation by parser.flagging("--skip-compilation", help = "skips the JavaCompile.compile target") val noStrictMode by parser.flagging( "--no-strict-mode", help = "Disable strict generation mode. Strict mode places additional limitations on generators, but is required for parallel generation" diff --git a/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/Helper.kt b/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/Helper.kt index 63f6247..3ffaac4 100644 --- a/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/Helper.kt +++ b/execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/Helper.kt @@ -5,14 +5,16 @@ import com.intellij.openapi.util.IconLoader import de.itemis.mps.gradle.logging.detectLogging import de.itemis.mps.gradle.project.loader.EnvironmentKind import de.itemis.mps.gradle.project.loader.ModuleAndModelMatcher -import jetbrains.mps.generator.GenerationOptions import jetbrains.mps.generator.GenerationSettingsProvider import jetbrains.mps.generator.runtime.TemplateModule +import jetbrains.mps.internal.make.cfg.JavaCompileFacetInitializer +import jetbrains.mps.internal.make.cfg.MakeFacetInitializer import jetbrains.mps.make.MakeSession import jetbrains.mps.make.facet.FacetRegistry import jetbrains.mps.make.facet.IFacet import jetbrains.mps.make.facet.ITarget import jetbrains.mps.make.script.IScript +import jetbrains.mps.make.script.IScriptController import jetbrains.mps.make.script.ScriptBuilder import jetbrains.mps.messages.IMessage import jetbrains.mps.messages.IMessageHandler @@ -163,7 +165,7 @@ private fun getFacetsForLanguages(facetRegistry: FacetRegistry, languages: Set): Iterable = facetRegistry.javaClass.getMethod("getFacetsForLanguages", java.lang.Iterable::class.java).invoke(facetRegistry, allUsedLanguages) as Iterable -private fun makeModels(proj: Project, models: List): GenerationResult { +private fun makeModels(proj: Project, models: List, bypassReconcile: Boolean = false, bypassCompilation: Boolean = false): GenerationResult { val session = MakeSession(proj, MsgHandler(), true) val res = ModelsToResources(models).resources().toList() val makeService = BuildMakeService() @@ -173,7 +175,14 @@ private fun makeModels(proj: Project, models: List): GenerationResult { return GenerationResult.NothingToGenerate } logger.info("starting generation") - val future = makeService.make(session, res, createScript(proj, models)) + + val scriptController = IScriptController.Stub2(session, + MakeFacetInitializer().skipReconcile(bypassReconcile), + JavaCompileFacetInitializer().skipCompilation(bypassCompilation) + ) + + val future = makeService.make(session, res, createScript(proj, models), scriptController) + try { val result = future.get() logger.info("generation finished") @@ -233,5 +242,5 @@ fun generateProject(parsed: GenerateArgs, project: Project): GenerationResult { IconLoader.activate() } - return makeModels(project, modelsToGenerate) + return makeModels(project, modelsToGenerate, parsed.skipReconciliation, parsed.skipCompilation) } diff --git a/gradle.properties b/gradle.properties index 8d7a64b..c7b2ec9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version.backend=1.15.1 +version.backend=1.16.0 version.project-loader=2.3.0