From 54be89d8e96168a1897acb61fe09c4d32a626707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Wed, 1 Jul 2026 11:26:24 +0200 Subject: [PATCH 1/4] Add MethodImplementationDecorator --- .../monticore/cd/codegen/DecoratorConfig.java | 25 +++++++++- .../MethodImplementationDecorator.java | 46 +++++++++++++++++++ .../main/resources/cd2java/init/CD2Pojo.ftl | 6 ++- .../cd2java/init/CD2PojoNoDefaults.ftl | 5 ++ 4 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java diff --git a/cdlang/src/main/java/de/monticore/cd/codegen/DecoratorConfig.java b/cdlang/src/main/java/de/monticore/cd/codegen/DecoratorConfig.java index a578c8d89..b1f89ed27 100644 --- a/cdlang/src/main/java/de/monticore/cd/codegen/DecoratorConfig.java +++ b/cdlang/src/main/java/de/monticore/cd/codegen/DecoratorConfig.java @@ -29,9 +29,26 @@ public class DecoratorConfig { protected final Collection> decorators = new ArrayList<>(); - @SuppressWarnings("unchecked") public ChainableGenSetup withDecorator(IDecorator decorator) { - this.decorators.add(decorator); + return this.withDecorator(decorator, false); + } + + /** + * Adds a new decorator to the list of applied decorators + * and returns an easy to use, chainable configuration interface. + * + * @param decorator the decorator + * @param ignoreDuplicateDecoratorType whether the decorator should be added, if one of the same + * class is already added + * @return the easy-to-use configuration interface + */ + @SuppressWarnings("unchecked") + public ChainableGenSetup withDecorator(IDecorator decorator, + boolean ignoreDuplicateDecoratorType) { + if (ignoreDuplicateDecoratorType || this.decorators.stream().noneMatch(d -> d.getClass().equals( + decorator.getClass()))) { + this.decorators.add(decorator); + } return new ChainableGenSetup((Class>) decorator.getClass()); } @@ -75,6 +92,10 @@ public ChainableGenSetup withVisitorImplementations() { return this.withDecorator(new VisitorImplementationDecorator()); } + public ChainableGenSetup withMethodImplementations() { + return this.withDecorator(new MethodImplementationDecorator()); + } + @SuppressWarnings("unchecked") public ChainableGenSetup withDecorator(String className) { IDecorator newObj = (IDecorator) ObjectFactory.createObject(className); diff --git a/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java b/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java new file mode 100644 index 000000000..a6a5eac0a --- /dev/null +++ b/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java @@ -0,0 +1,46 @@ +/* (c) https://github.com/MontiCore/monticore */ +package de.monticore.cd.codegen.decorators; + +import de.monticore.cd.codegen.decorators.data.AbstractDecorator; +import de.monticore.cd.methodtemplates.CD4C; +import de.monticore.cd4code._visitor.CD4CodeTraverser; +import de.monticore.cd4codebasis._ast.ASTCDMethod; +import de.monticore.cd4codebasis._visitor.CD4CodeBasisVisitor2; +import de.monticore.generating.templateengine.TemplateHookPoint; +import de.se_rwth.commons.logging.Log; + +/** + * Provides method bodies of (modeled) methods from templates + * TODO: ALu - Add CI tests for this decorator (right now it is for playing around) + */ +public class MethodImplementationDecorator extends AbstractDecorator + implements CD4CodeBasisVisitor2 { + + @Override + public void visit(ASTCDMethod method) { + // Only work on classes, not interfaces, etc. + var originalParent = decoratorData.getParent(method).orElseThrow(); + // First, check if we should decorate the given object + if (decoratorData.shouldDecorate(this.getClass(), method)) { + + if (!method.getModifier().isPresentStereotype()) { + Log.error("0xTODO: The method " + method.getName() + + " is decorated with a method implementation, but does not present a stereotype.", + method.get_SourcePositionStart(), method.get_SourcePositionEnd()); + return; + } + + // TODO: ALu: Create shared get-marked value source (not only for stereotypes) + String template = method.getModifier().getStereotype().getValue("impl"); + + glexOpt.ifPresent(g -> g.replaceTemplate(CD4C.getInstance().getEmptyBodyTemplate(), + decoratorData.getAsDecorated(method), new TemplateHookPoint(template))); + } + } + + @Override + public void addToTraverser(CD4CodeTraverser traverser) { + traverser.add4CD4CodeBasis(this); + } + +} diff --git a/cdlang/src/main/resources/cd2java/init/CD2Pojo.ftl b/cdlang/src/main/resources/cd2java/init/CD2Pojo.ftl index 324c41efc..4b8a5620d 100644 --- a/cdlang/src/main/resources/cd2java/init/CD2Pojo.ftl +++ b/cdlang/src/main/resources/cd2java/init/CD2Pojo.ftl @@ -29,8 +29,8 @@ ${decConfig.withSetters().applyOnName("setter").ignoreOnName("noSetter").default <#-- And the NavigableSetters (for bidirectional assocs). --> <#-- The implementation of the NavigableSetters decorator requires that the Setter decorator has run before.--> ${decConfig.withNavigableSetters().applyOnName("setter").ignoreOnName("noSetter").defaultApply()} -<#--Method signatures will be turned into abstract methods--> -${decConfig.withAbstractMethodSignatures().applyOnName("abstractMethod").ignoreOnName("nonAbstractMethod").defaultApply()} +<#--Method signatures will be turned into abstract methods, unless the method implementations are provided via templates (impl)--> +${decConfig.withAbstractMethodSignatures().applyOnName("abstractMethod").ignoreOnName("nonAbstractMethod").ignoreOnName("impl").defaultApply()} <#--The following decorators are not applied by default, instead they have to be explicitly configured using stereos/tags/etc--> <#-- By default, the Builders decorator is NOT applied, unless an element or its parents are marked with builder --> <#-- Builders are also not applied when the element is not marked and the parent is marked with noBuilder. --> @@ -40,6 +40,8 @@ ${decConfig.withObservers().applyOnName("observable").ignoreOnName("notObservabl <#-- Similarly, the Visitor decorator is NOT applied by default, unless an element or its parents are marked with visitor --> ${decConfig.withVisitors().applyOnName("visitor").ignoreOnName("noVisitor")} ${decConfig.withVisitorImplementations().applyOnName("visitor").ignoreOnName("noVisitor").ignoreOnName("noDefaultVisitor")} +<#-- Similarly, the method implementation from templates decorator is NOT applied by default, unless an element or its parents are marked with impl --> +${decConfig.withMethodImplementations().applyOnName("impl").ignoreOnName("noImpl")} <#-- diff --git a/cdlang/src/main/resources/cd2java/init/CD2PojoNoDefaults.ftl b/cdlang/src/main/resources/cd2java/init/CD2PojoNoDefaults.ftl index 90a633aff..1dd0887f1 100644 --- a/cdlang/src/main/resources/cd2java/init/CD2PojoNoDefaults.ftl +++ b/cdlang/src/main/resources/cd2java/init/CD2PojoNoDefaults.ftl @@ -14,6 +14,11 @@ ${decConfig.withGetters().applyOnName("getter").ignoreOnName("noGetter")} ${decConfig.withDefaultsForCardinalityAttrs().applyOnName("defaultCardinality").ignoreOnName("noDefaultCardinality")} ${decConfig.withSetters().applyOnName("setter").ignoreOnName("noSetter")} ${decConfig.withNavigableSetters().applyOnName("setter").ignoreOnName("noSetter")} +${decConfig.withAbstractMethodSignatures().applyOnName("abstractMethod").ignoreOnName("nonAbstractMethod").ignoreOnName("impl")} ${decConfig.withBuilders().applyOnName("builder").ignoreOnName("noBuilder")} ${decConfig.withObservers().applyOnName("observable").ignoreOnName("notObservable")} +${decConfig.withMethodImplementations().applyOnName("impl").ignoreOnName("noImpl")} +${decConfig.withVisitors().applyOnName("visitor").ignoreOnName("noVisitor")} +${decConfig.withVisitorImplementations().applyOnName("visitor").ignoreOnName("noVisitor").ignoreOnName("noDefaultVisitor")} +${decConfig.withMethodImplementations().applyOnName("impl").ignoreOnName("noImpl")} From a169b11ef5c7a5728176549432d2df3550a55ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Wed, 1 Jul 2026 13:38:16 +0200 Subject: [PATCH 2/4] Fix comments --- .../cd/codegen/decorators/MethodImplementationDecorator.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java b/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java index a6a5eac0a..70e8ae4df 100644 --- a/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java +++ b/cdlang/src/main/java/de/monticore/cd/codegen/decorators/MethodImplementationDecorator.java @@ -18,11 +18,9 @@ public class MethodImplementationDecorator extends AbstractDecorator g.replaceTemplate(CD4C.getInstance().getEmptyBodyTemplate(), decoratorData.getAsDecorated(method), new TemplateHookPoint(template))); } From 0746bc5e574bd5804b6518c13ed978f01c2d2f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Wed, 1 Jul 2026 15:23:37 +0200 Subject: [PATCH 3/4] Cleanup Gradle Code --- .../cdgen/gradleplugin/CDGenAction.java | 19 ----- .../CDGenGradleDependenciesPlugin.java | 71 +++++++++++++++++++ .../cdgen/gradleplugin/CDGenGradlePlugin.java | 61 ++-------------- .../cdgen/gradleplugin/CDGenTask.java | 15 ++-- .../cdgen/gradleplugin/CDGenToolInvoker.java | 17 ----- 5 files changed, 86 insertions(+), 97 deletions(-) delete mode 100644 cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenAction.java create mode 100644 cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradleDependenciesPlugin.java delete mode 100644 cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenToolInvoker.java diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenAction.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenAction.java deleted file mode 100644 index 58fce1129..000000000 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenAction.java +++ /dev/null @@ -1,19 +0,0 @@ -/* (c) https://github.com/MontiCore/monticore */ -package de.monticore.cdgen.gradleplugin; - -import de.monticore.gradle.common.AToolAction; -import de.monticore.gradle.internal.isolation.CachedIsolation; - -public abstract class CDGenAction extends AToolAction { - - protected static final CachedIsolation.WithClassPath isolator = - new CachedIsolation.WithClassPath(); - - @Override - protected void doRun(String[] args) { - final String prefix = "[" + getParameters().getProgressName().get() + "] "; - isolator.executeInClassloader(CDGenToolInvoker.class.getName(), "run", args, prefix, - getParameters().getExtraClasspathElements()); - } - -} diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradleDependenciesPlugin.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradleDependenciesPlugin.java new file mode 100644 index 000000000..16ededb51 --- /dev/null +++ b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradleDependenciesPlugin.java @@ -0,0 +1,71 @@ +/* (c) https://github.com/MontiCore/monticore */ +package de.monticore.cdgen.gradleplugin; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaLibraryPlugin; + +import java.io.IOException; +import java.util.Properties; + +@SuppressWarnings("unused") +public class CDGenGradleDependenciesPlugin implements Plugin { + + /** + * Configuration containing the classpath of the generator tool. + */ + public static final String CONFIG_TOOL = "cdTool"; + + /** + * Configuration containing the classpath of the target. + * it will be added to the api configuration & passed as a symbol path for class2mc + */ + public static final String CONFIG_TARGET_RUNTIME = "cdToolTargetRuntime"; + + @Override + public void apply(Project project) { + project.getPluginManager().apply(JavaLibraryPlugin.class); + + // Setup cdTool dependency + var properties = loadProperties(); + String version = properties.getProperty("version"); + + Configuration toolConfig = project.getConfigurations().maybeCreate(CONFIG_TOOL); + toolConfig.setCanBeResolved(true); + Configuration toolRuntimeConfig = project.getConfigurations().maybeCreate( + CONFIG_TARGET_RUNTIME); + toolRuntimeConfig.setCanBeResolved(true); + + toolConfig.defaultDependencies(dependencies -> { + dependencies.add(project.getDependencies().create("de.monticore.lang:cd4analysis:" + + version)); + }); + + toolRuntimeConfig.defaultDependencies(dependencies -> { + dependencies.add(project.getDependencies().create("de.monticore.lang:cd-runtime:" + version + + ":cd-runtime")); + }); + + project.getTasks().withType(CDGenTask.class).configureEach(t -> t.getExtraClasspathElements() + .from(toolConfig)); + + project.getTasks().withType(CDGenTask.class).configureEach(t -> t.getTargetSymbolPath().from( + toolRuntimeConfig)); + + project.getConfigurations().named("api").configure(api -> api.extendsFrom(toolRuntimeConfig)); + + } + + public Properties loadProperties() { + Properties properties = new Properties(); + try { + properties.load(this.getClass().getClassLoader().getResourceAsStream("buildInfo.properties")); + } + catch (IOException e) { + throw new RuntimeException(e); + } + return properties; + } + +} diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java index 3b92307e5..16a93ae78 100644 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java +++ b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java @@ -1,18 +1,16 @@ /* (c) https://github.com/MontiCore/monticore */ package de.monticore.cdgen.gradleplugin; -import java.io.IOException; -import java.util.Properties; import java.util.stream.Collectors; + +import de.monticore.gradle.queue.CachedQueueServicePlugin; import org.gradle.api.Plugin; import org.gradle.api.Project; -import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.Directory; import org.gradle.api.file.FileCollection; import org.gradle.api.file.SourceDirectorySet; import org.gradle.api.internal.lambdas.SerializableLambdas; import org.gradle.api.model.ObjectFactory; -import org.gradle.api.plugins.JavaLibraryPlugin; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.SourceSet; @@ -22,11 +20,6 @@ @SuppressWarnings("unused") public class CDGenGradlePlugin implements Plugin { - /** - * Configuration containing the classpath of the generator tool. - */ - public static final String CONFIG_TOOL = "cdTool"; - private final ObjectFactory objectFactory; @Inject @@ -34,43 +27,14 @@ public CDGenGradlePlugin(ObjectFactory objectFactory) { this.objectFactory = objectFactory; } - /** - * Configuration containing the classpath of the target. - * it will be added to the api configuration & passed as a symbol path for class2mc - */ - public static final String CONFIG_TARGET_RUNTIME = "cdToolTargetRuntime"; - @Override public void apply(Project project) { - project.getPluginManager().apply(JavaLibraryPlugin.class); - - // Setup cdTool dependency - var properties = loadProperties(); - String version = properties.getProperty("version"); + // Set up the improved work-queue + project.getPluginManager().apply(CachedQueueServicePlugin.class); - Configuration toolConfig = project.getConfigurations().maybeCreate(CONFIG_TOOL); - toolConfig.setCanBeResolved(true); - Configuration toolRuntimeConfig = project.getConfigurations().maybeCreate( - CONFIG_TARGET_RUNTIME); - toolRuntimeConfig.setCanBeResolved(true); - - toolConfig.defaultDependencies(dependencies -> { - dependencies.add(project.getDependencies().create("de.monticore.lang:cd4analysis:" - + version)); - }); - - toolRuntimeConfig.defaultDependencies(dependencies -> { - dependencies.add(project.getDependencies().create("de.monticore.lang:cd-runtime:" + version - + ":cd-runtime")); - }); - - project.getTasks().withType(CDGenTask.class).configureEach(t -> t.getExtraClasspathElements() - .from(toolConfig)); - - project.getTasks().withType(CDGenTask.class).configureEach(t -> t.getTargetSymbolPath().from( - toolRuntimeConfig)); - - project.getConfigurations().named("api").configure(api -> api.extendsFrom(toolRuntimeConfig)); + // Populate the "cdTool" configuration with the generator itself and + // Populate the "cdToolTargetRuntime" configuration with the runtime + project.getPluginManager().apply(CDGenGradleDependenciesPlugin.class); // Set up source-Sets project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().all(sourceSet -> { @@ -100,17 +64,6 @@ public void apply(Project project) { }); } - public Properties loadProperties() { - Properties properties = new Properties(); - try { - properties.load(this.getClass().getClassLoader().getResourceAsStream("buildInfo.properties")); - } - catch (IOException e) { - throw new RuntimeException(e); - } - return properties; - } - /** Adds the "cd" extension to every source set */ protected CDSourceDirectorySet addSourceSetExtension(SourceSet sourceSet, Project project) { SourceDirectorySet vanillaSrcDirSet = project.getObjects().sourceDirectorySet( diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java index f0ecd7493..39d8d4b34 100644 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java +++ b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java @@ -1,14 +1,13 @@ /* (c) https://github.com/MontiCore/monticore */ package de.monticore.cdgen.gradleplugin; -import de.monticore.gradle.common.AToolAction; import de.monticore.gradle.common.MCAllFilesTask; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; import java.util.function.Function; +import de.monticore.gradle.queue.ICachedQueueTask; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.provider.ListProperty; @@ -21,10 +20,11 @@ * B.cd is allowed */ @CacheableTask -public abstract class CDGenTask extends MCAllFilesTask { +public abstract class CDGenTask extends MCAllFilesTask implements ICachedQueueTask { public CDGenTask() { super("CDGenTask", null); + getMainClass().convention("de.monticore.cdgen.CDGenTool"); } @Optional @@ -113,9 +113,10 @@ public void startGeneration(List args, String progressName) { } @Override - protected Class getToolAction() { return CDGenAction.class; } - - @Override - protected Consumer getRunMethod() { return CDGenToolInvoker::run; } + protected void prepareWorkQueue() { + // Use the improved shared-isolated-work-queue of se-commons + this.workQueue = doGetSharedQueueService().newWorkQueue(getWorkerExecutor(), + getExtraClasspathElements()); + } } diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenToolInvoker.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenToolInvoker.java deleted file mode 100644 index ef9fc77e2..000000000 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenToolInvoker.java +++ /dev/null @@ -1,17 +0,0 @@ -/* (c) https://github.com/MontiCore/monticore */ -package de.monticore.cdgen.gradleplugin; - -import de.monticore.gradle.common.GradleLog; -import de.se_rwth.commons.logging.Log; -import java.util.Arrays; - -public class CDGenToolInvoker { - - public static void run(String[] args) { - GradleLog.init(); - Log.info("Starting CDGenTool: \n" + "\t java -jar CDGenTool.jar " + Arrays.toString(args), - CDGenToolInvoker.class.getName()); - de.monticore.cdgen.CDGenTool.gradleMain(args); - } - -} From 467aef490a75aeef32d1d0b28234508a915aa552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Mon, 6 Jul 2026 11:23:28 +0200 Subject: [PATCH 4/4] Cleanup Gradle Code --- cdtool/cdgradle/build.gradle | 41 ++++++------------- .../cdgen/gradleplugin/CDGenGradlePlugin.java | 5 +-- 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/cdtool/cdgradle/build.gradle b/cdtool/cdgradle/build.gradle index 58e3c8b95..f8d4e963d 100644 --- a/cdtool/cdgradle/build.gradle +++ b/cdtool/cdgradle/build.gradle @@ -1,20 +1,18 @@ /* (c) https://github.com/MontiCore/monticore */ +buildscript { + dependencies { + classpath "de.se_rwth.commons:se-commons-gradle:$mc_version" + } +} plugins { id 'java-library' id 'java-gradle-plugin' id 'maven-publish' } - -configurations { - cdTool -} - - dependencies { implementation "de.se_rwth.commons:se-commons-gradle:$mc_version" - cdTool "de.monticore.lang:cd4analysis:$mc_version" - compileOnly(project(":cdlang")) // As the main/cdtool dependency does not have an api dependency to cdlang +// compileOnly(project(":cdlang")) // As the main/cdtool dependency does not have an api dependency to cdlang testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version" @@ -25,12 +23,6 @@ dependencies { } -sourceSets { - main.compileClasspath += configurations.cdTool - test.compileClasspath += configurations.cdTool -} - - gradlePlugin { plugins { cdplugin { @@ -55,29 +47,20 @@ test.dependsOn(project(":cdlang").tasks.jar) test.inputs.files(project(":cdlang").tasks.jar) // Write the version to the jar -def buildInfoVersion = project.version.toString() - -tasks.register('generateResources') { - ext { - propFile = layout.buildDirectory.file("generated/buildInfo.properties") - } - outputs.file propFile - doLast { - File f = propFile.get().asFile - f.parentFile.mkdirs() - f.text = "version=$buildInfoVersion" - } +import de.monticore.gradle.common.MCBuildInfoTask; +tasks.register("writeMCBuildInfo", MCBuildInfoTask.class){ + getVersion().set(project.provider(() -> project.getVersion().toString())); } + processResources { - from files(generateResources) - dependsOn generateResources + dependsOn tasks.named("writeMCBuildInfo") } tasks.withType(Test).configureEach { useJUnitPlatform() dependsOn project.tasks.getByPath(":cdlang:jar") dependsOn project.tasks.getByPath(":cd-runtime:jar") - dependsOn generateResources + dependsOn tasks.named("writeMCBuildInfo") // For the MontiVerse systemProperty "maven.repo.local", System.getProperty("maven.repo.local") diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java index 16a93ae78..a034859f0 100644 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java +++ b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenGradlePlugin.java @@ -36,7 +36,7 @@ public void apply(Project project) { // Populate the "cdToolTargetRuntime" configuration with the runtime project.getPluginManager().apply(CDGenGradleDependenciesPlugin.class); - // Set up source-Sets + // Set up source-(directory)-Sets project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().all(sourceSet -> { var cdSrcDirSet = addSourceSetExtension(sourceSet, project); @@ -89,8 +89,7 @@ protected CDSourceDirectorySet addSourceSetExtension(SourceSet sourceSet, Projec cdSrcDirSet.getFilter().include("**/*.cd"); // Casting the SrcDirSet to a FileCollection seems to be necessary due to compatibility reasons - // with the - // configuration cache. + // with the configuration cache. // See // https://github.com/gradle/gradle/blob/d36380f26658d5cf0bf1bfb3180b9eee6d1b65a5/subprojects/scala/src/main/java/org/gradle/api/plugins/scala/ScalaBasePlugin.java#L194 FileCollection mcSrcSetCast = cdSrcDirSet;