From ace03f4283b4f933a806cff020197a6bb0f61706 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Mon, 16 Feb 2026 19:56:59 +0100 Subject: [PATCH] Support maven.compiler.release parameter in Xtext/Xtend Maven plugins Add support for reading the maven.compiler.release parameter and grant it precedence over a maven.compiler.source or maven.compiler.target configuration (similar to the Java compiler). --- .../maven/AbstractXtendCompilerMojo.java | 20 +++++++++-- .../it/compile/simple-java21/pom.xml | 3 +- .../src/test/resources/it/pom.xml | 3 +- .../maven/AbstractXtextGeneratorMojo.java | 35 +++++++++++++------ .../it/generate/java-lang-21-bi-ref/pom.xml | 3 +- .../src/test/resources/it/generate/pom.xml | 3 +- 6 files changed, 46 insertions(+), 21 deletions(-) diff --git a/org.eclipse.xtend.maven.plugin/src/main/java/org/eclipse/xtend/maven/AbstractXtendCompilerMojo.java b/org.eclipse.xtend.maven.plugin/src/main/java/org/eclipse/xtend/maven/AbstractXtendCompilerMojo.java index 2d0846a124c..2f7b0c79644 100644 --- a/org.eclipse.xtend.maven.plugin/src/main/java/org/eclipse/xtend/maven/AbstractXtendCompilerMojo.java +++ b/org.eclipse.xtend.maven.plugin/src/main/java/org/eclipse/xtend/maven/AbstractXtendCompilerMojo.java @@ -45,11 +45,24 @@ public boolean apply(String filePath) { /** * Create Java Source Code that is compatible to this Java version. * - * Supported values: 11, 17 and so forth + * Supported values: 11, 17, 21 and so forth */ @Parameter(property="maven.compiler.source", defaultValue="11") private String javaSourceVersion; + /** + * Create Java Source Code that targets this Java release. + *

+ * If set, this implies a {@link #javaSourceVersion} of the same value and any value explicitly configured for the latter is ignored. + * Nevertheless specifying this parameter does not enforce strict Java API checks like the {@code release} option for a Java compiler + * does. Still it is possible to enforce strict Java API checks by specifying the {@code release} option for the compiler-plugin. + *

+ * + * Supported values: 11, 17, 21 and so forth + */ + @Parameter(property = "maven.compiler.release") + private String javaReleaseVersion; + /** * The current build session instance. This is used for toolchain manager API calls. */ @@ -132,8 +145,9 @@ protected void compile(String classPath, List sourcePaths, String output return; } String baseDir = project.getBasedir().getAbsolutePath(); - log.debug("Set Java Compliance Level: " + javaSourceVersion); - compiler.setJavaSourceVersion(javaSourceVersion); + String sourceVersion = javaReleaseVersion != null && !javaReleaseVersion.isBlank() ? javaReleaseVersion : javaSourceVersion; + log.debug("Set Java Compliance Level: " + sourceVersion); + compiler.setJavaSourceVersion(sourceVersion); log.debug("Set generateSyntheticSuppressWarnings: " + generateSyntheticSuppressWarnings); compiler.setGenerateSyntheticSuppressWarnings(generateSyntheticSuppressWarnings); log.debug("Set useXbaseGenerated: " + useXbaseGenerated); diff --git a/org.eclipse.xtend.maven.plugin/src/test/resources/it/compile/simple-java21/pom.xml b/org.eclipse.xtend.maven.plugin/src/test/resources/it/compile/simple-java21/pom.xml index 8dc001b7e16..4edcf1b1800 100755 --- a/org.eclipse.xtend.maven.plugin/src/test/resources/it/compile/simple-java21/pom.xml +++ b/org.eclipse.xtend.maven.plugin/src/test/resources/it/compile/simple-java21/pom.xml @@ -10,8 +10,7 @@ simple-java21 - 21 - 21 + 21 diff --git a/org.eclipse.xtend.maven.plugin/src/test/resources/it/pom.xml b/org.eclipse.xtend.maven.plugin/src/test/resources/it/pom.xml index 683b752ae9c..8b719753dd4 100644 --- a/org.eclipse.xtend.maven.plugin/src/test/resources/it/pom.xml +++ b/org.eclipse.xtend.maven.plugin/src/test/resources/it/pom.xml @@ -6,8 +6,7 @@ IT-SNAPSHOT pom - 17 - 17 + 17 @project.version@ ${xtextVersion} diff --git a/org.eclipse.xtext.maven.plugin/src/main/java/org/eclipse/xtext/maven/AbstractXtextGeneratorMojo.java b/org.eclipse.xtext.maven.plugin/src/main/java/org/eclipse/xtext/maven/AbstractXtextGeneratorMojo.java index 2de82c92557..53def48a643 100644 --- a/org.eclipse.xtext.maven.plugin/src/main/java/org/eclipse/xtext/maven/AbstractXtextGeneratorMojo.java +++ b/org.eclipse.xtext.maven.plugin/src/main/java/org/eclipse/xtext/maven/AbstractXtextGeneratorMojo.java @@ -26,7 +26,6 @@ import org.eclipse.xtext.builder.standalone.LanguageAccessFactory; import org.eclipse.xtext.builder.standalone.StandaloneBuilder; import org.eclipse.xtext.builder.standalone.compiler.CompilerConfiguration; -import org.eclipse.xtext.builder.standalone.compiler.IJavaCompiler; import org.eclipse.xtext.resource.IResourceDescription; import org.eclipse.xtext.resource.persistence.IResourceStorageFacade; import org.eclipse.xtext.resource.persistence.StorageAwareResource; @@ -101,6 +100,21 @@ public String getEncoding() { @Parameter(property = "maven.compiler.target", defaultValue = "11") private String compilerTargetLevel; + /** + * Create Java Source Code that is compatible to this Java release. + *

+ * If set, this implies a {@link #compilerSourceLevel} and + * {@link #compilerTargetLevel} of the same value and any value explicitly + * configured for the latter is ignored. Nevertheless specifying this parameter + * does not enforce strict Java API checks like the {@code release} option for a + * Java compiler does. Still it is possible to enforce strict Java API checks by + * specifying the {@code release} option for the compiler-plugin. + *

+ * + * Supported values: 11, 17, 21 and so forth + */ + @Parameter(property = "maven.compiler.release") + private String compilerReleaseLevel; @Parameter(defaultValue = "false") private boolean compilerSkipAnnotationProcessing; @@ -224,8 +238,9 @@ protected void internalExecute() throws MojoExecutionException { if (clusteringConfig != null) { builder.setClusteringConfig(clusteringConfig.convertToStandaloneConfig()); } - configureCompiler(builder.getCompiler()); - logState(); + CompilerConfiguration compilerConfiguration = builder.getCompiler().getConfiguration(); + configureCompiler(compilerConfiguration); + logState(compilerConfiguration); boolean errorDetected = !builder.launch(); if (errorDetected && failOnValidationError) { throw new MojoExecutionException("Execution failed due to a severe validation error."); @@ -236,20 +251,20 @@ protected void internalExecute() throws MojoExecutionException { protected abstract List getSourceRoots(); - private void configureCompiler(IJavaCompiler compiler) { - CompilerConfiguration conf = compiler.getConfiguration(); - conf.setSourceLevel(compilerSourceLevel); - conf.setTargetLevel(compilerTargetLevel); + private void configureCompiler(CompilerConfiguration conf) { + boolean isReleaseSet = compilerReleaseLevel != null && !compilerReleaseLevel.isBlank(); + conf.setSourceLevel(isReleaseSet ? compilerReleaseLevel : compilerSourceLevel); + conf.setTargetLevel(isReleaseSet ? compilerReleaseLevel : compilerTargetLevel); conf.setVerbose(getLog().isDebugEnabled()); conf.setSkipAnnotationProcessing(compilerSkipAnnotationProcessing); conf.setPreserveInformationAboutFormalParameters(compilerPreserveInformationAboutFormalParameters); } - private void logState() { + private void logState(CompilerConfiguration compilerConfiguration) { getLog().info( "Encoding: " + (getEncoding() == null ? "not set. Encoding provider will be used." : getEncoding())); - getLog().info("Compiler source level: " + compilerSourceLevel); - getLog().info("Compiler target level: " + compilerTargetLevel); + getLog().info("Compiler source level: " + compilerConfiguration.getSourceLevel()); + getLog().info("Compiler target level: " + compilerConfiguration.getTargetLevel()); if (getLog().isDebugEnabled()) { getLog().debug("Source dirs: " + IterableExtensions.join(getSourceRoots(), ", ")); getLog().debug("Java source dirs: " + IterableExtensions.join(javaSourceRoots, ", ")); diff --git a/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/java-lang-21-bi-ref/pom.xml b/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/java-lang-21-bi-ref/pom.xml index 0b1e26eeffc..efb8d32809b 100644 --- a/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/java-lang-21-bi-ref/pom.xml +++ b/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/java-lang-21-bi-ref/pom.xml @@ -11,8 +11,7 @@ - 21 - 21 + 21 java-lang-21-bi-ref diff --git a/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/pom.xml b/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/pom.xml index facbc50a38c..4c3387ed57b 100644 --- a/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/pom.xml +++ b/org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/pom.xml @@ -10,8 +10,7 @@ https://ci.eclipse.org/xtext UTF-8 - 17 - 17 + 17 @project.version@