Skip to content

Commit 0d2ff7a

Browse files
committed
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).
1 parent 99a5c22 commit 0d2ff7a

6 files changed

Lines changed: 46 additions & 21 deletions

File tree

org.eclipse.xtend.maven.plugin/src/main/java/org/eclipse/xtend/maven/AbstractXtendCompilerMojo.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,24 @@ public boolean apply(String filePath) {
4545
/**
4646
* Create Java Source Code that is compatible to this Java version.
4747
*
48-
* Supported values: 11, 17 and so forth
48+
* Supported values: 11, 17, 21 and so forth
4949
*/
5050
@Parameter(property="maven.compiler.source", defaultValue="11")
5151
private String javaSourceVersion;
5252

53+
/**
54+
* Create Java Source Code that targets this Java release.
55+
* <p>
56+
* If set, this implies a {@link #javaSourceVersion} of the same value and any value explicitly configured for the latter is ignored.
57+
* Nevertheless specifying this parameter does not enforce strict Java API checks like the {@code release} option for a Java compiler
58+
* does. Still it is possible to enforce strict Java API checks by specifying the {@code release} option for the compiler-plugin.
59+
* </p>
60+
*
61+
* Supported values: 11, 17, 21 and so forth
62+
*/
63+
@Parameter(property = "maven.compiler.release", defaultValue = "11")
64+
private String javaReleaseVersion;
65+
5366
/**
5467
* The current build session instance. This is used for toolchain manager API calls.
5568
*/
@@ -132,8 +145,9 @@ protected void compile(String classPath, List<String> sourcePaths, String output
132145
return;
133146
}
134147
String baseDir = project.getBasedir().getAbsolutePath();
135-
log.debug("Set Java Compliance Level: " + javaSourceVersion);
136-
compiler.setJavaSourceVersion(javaSourceVersion);
148+
String sourceVersion = javaReleaseVersion != null && !javaReleaseVersion.isBlank() ? javaReleaseVersion : javaSourceVersion;
149+
log.debug("Set Java Compliance Level: " + sourceVersion);
150+
compiler.setJavaSourceVersion(sourceVersion);
137151
log.debug("Set generateSyntheticSuppressWarnings: " + generateSyntheticSuppressWarnings);
138152
compiler.setGenerateSyntheticSuppressWarnings(generateSyntheticSuppressWarnings);
139153
log.debug("Set useXbaseGenerated: " + useXbaseGenerated);

org.eclipse.xtend.maven.plugin/src/test/resources/it/compile/simple-java21/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
</parent>
1111
<artifactId>simple-java21</artifactId>
1212
<properties>
13-
<maven.compiler.source>21</maven.compiler.source>
14-
<maven.compiler.target>21</maven.compiler.target>
13+
<maven.compiler.release>21</maven.compiler.release>
1514
</properties>
1615
<build>
1716
<plugins>

org.eclipse.xtend.maven.plugin/src/test/resources/it/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
<version>IT-SNAPSHOT</version>
77
<packaging>pom</packaging>
88
<properties>
9-
<maven.compiler.source>17</maven.compiler.source>
10-
<maven.compiler.target>17</maven.compiler.target>
9+
<maven.compiler.release>17</maven.compiler.release>
1110
<xtextVersion>@project.version@</xtextVersion>
1211
<xtextBOMVersion>${xtextVersion}</xtextBOMVersion>
1312
</properties>

org.eclipse.xtext.maven.plugin/src/main/java/org/eclipse/xtext/maven/AbstractXtextGeneratorMojo.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.eclipse.xtext.builder.standalone.LanguageAccessFactory;
2727
import org.eclipse.xtext.builder.standalone.StandaloneBuilder;
2828
import org.eclipse.xtext.builder.standalone.compiler.CompilerConfiguration;
29-
import org.eclipse.xtext.builder.standalone.compiler.IJavaCompiler;
3029
import org.eclipse.xtext.resource.IResourceDescription;
3130
import org.eclipse.xtext.resource.persistence.IResourceStorageFacade;
3231
import org.eclipse.xtext.resource.persistence.StorageAwareResource;
@@ -101,6 +100,21 @@ public String getEncoding() {
101100

102101
@Parameter(property = "maven.compiler.target", defaultValue = "11")
103102
private String compilerTargetLevel;
103+
/**
104+
* Create Java Source Code that is compatible to this Java release.
105+
* <p>
106+
* If set, this implies a {@link #compilerSourceLevel} and
107+
* {@link #compilerTargetLevel} of the same value and any value explicitly
108+
* configured for the latter is ignored. Nevertheless specifying this parameter
109+
* does not enforce strict Java API checks like the {@code release} option for a
110+
* Java compiler does. Still it is possible to enforce strict Java API checks by
111+
* specifying the {@code release} option for the compiler-plugin.
112+
* </p>
113+
*
114+
* Supported values: 11, 17, 21 and so forth
115+
*/
116+
@Parameter(property = "maven.compiler.release", defaultValue = "11")
117+
private String compilerReleaseLevel;
104118

105119
@Parameter(defaultValue = "false")
106120
private boolean compilerSkipAnnotationProcessing;
@@ -224,8 +238,9 @@ protected void internalExecute() throws MojoExecutionException {
224238
if (clusteringConfig != null) {
225239
builder.setClusteringConfig(clusteringConfig.convertToStandaloneConfig());
226240
}
227-
configureCompiler(builder.getCompiler());
228-
logState();
241+
CompilerConfiguration compilerConfiguration = builder.getCompiler().getConfiguration();
242+
configureCompiler(compilerConfiguration);
243+
logState(compilerConfiguration);
229244
boolean errorDetected = !builder.launch();
230245
if (errorDetected && failOnValidationError) {
231246
throw new MojoExecutionException("Execution failed due to a severe validation error.");
@@ -236,20 +251,20 @@ protected void internalExecute() throws MojoExecutionException {
236251

237252
protected abstract List<String> getSourceRoots();
238253

239-
private void configureCompiler(IJavaCompiler compiler) {
240-
CompilerConfiguration conf = compiler.getConfiguration();
241-
conf.setSourceLevel(compilerSourceLevel);
242-
conf.setTargetLevel(compilerTargetLevel);
254+
private void configureCompiler(CompilerConfiguration conf) {
255+
boolean isReleaseSet = compilerReleaseLevel != null && !compilerReleaseLevel.isBlank();
256+
conf.setSourceLevel(isReleaseSet ? compilerReleaseLevel : compilerSourceLevel);
257+
conf.setTargetLevel(isReleaseSet ? compilerReleaseLevel : compilerTargetLevel);
243258
conf.setVerbose(getLog().isDebugEnabled());
244259
conf.setSkipAnnotationProcessing(compilerSkipAnnotationProcessing);
245260
conf.setPreserveInformationAboutFormalParameters(compilerPreserveInformationAboutFormalParameters);
246261
}
247262

248-
private void logState() {
263+
private void logState(CompilerConfiguration compilerConfiguration) {
249264
getLog().info(
250265
"Encoding: " + (getEncoding() == null ? "not set. Encoding provider will be used." : getEncoding()));
251-
getLog().info("Compiler source level: " + compilerSourceLevel);
252-
getLog().info("Compiler target level: " + compilerTargetLevel);
266+
getLog().info("Compiler source level: " + compilerConfiguration.getSourceLevel());
267+
getLog().info("Compiler target level: " + compilerConfiguration.getTargetLevel());
253268
if (getLog().isDebugEnabled()) {
254269
getLog().debug("Source dirs: " + IterableExtensions.join(getSourceRoots(), ", "));
255270
getLog().debug("Java source dirs: " + IterableExtensions.join(javaSourceRoots, ", "));

org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/java-lang-21-bi-ref/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
</parent>
1212

1313
<properties>
14-
<maven.compiler.source>21</maven.compiler.source>
15-
<maven.compiler.target>21</maven.compiler.target>
14+
<maven.compiler.release>21</maven.compiler.release>
1615
</properties>
1716

1817
<artifactId>java-lang-21-bi-ref</artifactId>

org.eclipse.xtext.maven.plugin/src/test/resources/it/generate/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
<properties>
1111
<JENKINS_URL>https://ci.eclipse.org/xtext</JENKINS_URL>
1212
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13-
<maven.compiler.source>17</maven.compiler.source>
14-
<maven.compiler.target>17</maven.compiler.target>
13+
<maven.compiler.release>17</maven.compiler.release>
1514
<!-- The @...@ will be replaced during resource filtering with
1615
the current version of our project -->
1716
<xtext-version>@project.version@</xtext-version>

0 commit comments

Comments
 (0)