Skip to content

Commit 4419731

Browse files
committed
Add support for Java-25 and set up build with Java-25
- Add constants for Java-25 - Add compiler and wizard tests for Java-25. - Add Java-25 profile to xtext-dev BOM - Fix tests failing on Java-25: - java.util.Collections class is final in Java-25
1 parent d9479c5 commit 4419731

49 files changed

Lines changed: 1163 additions & 66 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/maven.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,18 @@ jobs:
1414
strategy:
1515
matrix: # 'macos-14' is arm64
1616
os: ['ubuntu-22.04', 'macos-14', 'windows-2022']
17-
java: [ 21 ]
17+
java: [ 25 ]
1818
additional-maven-args: ['']
1919
additional-label: ['']
2020
include:
2121
- os: ubuntu-22.04
2222
java: 21
2323
additional-maven-args: -Pstrict-jdk-21
2424
additional-label: -strict
25+
- os: ubuntu-22.04
26+
java: 25
27+
additional-maven-args: -Pstrict-jdk-25
28+
additional-label: -strict
2529
fail-fast: false
2630
runs-on: ${{ matrix.os }}
2731

@@ -82,7 +86,7 @@ jobs:
8286
- name: 'Set up Java'
8387
uses: actions/setup-java@v5
8488
with:
85-
java-version: 21
89+
java-version: 25
8690
distribution: 'temurin'
8791

8892
- name: 'Cache Maven packages'
@@ -100,7 +104,7 @@ jobs:
100104
clean verify
101105
-f org.eclipse.xtext.maven.releng
102106
-B -fae -PuseJenkinsSnapshots
103-
-Pstrict-jdk-21
107+
-Pstrict-jdk-25
104108
105109
- name: Archive Test Results
106110
uses: actions/upload-artifact@v6.0.0

Jenkinsfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pipeline {
88
parameters {
99
choice(name: 'TARGET_PLATFORM', choices: ['r202403', 'r202406', 'r202409', 'r202412', 'r202503', 'r202506', 'r202509', 'r202512', 'latest'], description: 'Which Target Platform should be used?')
1010
// see https://wiki.eclipse.org/Jenkins#JDK
11-
choice(name: 'JDK_VERSION', choices: [ '17', '21' ], description: 'Which JDK version should be used?')
11+
choice(name: 'JDK_VERSION', choices: [ '17', '21', '25' ], description: 'Which JDK version should be used?')
1212
}
1313

1414
triggers {
@@ -61,6 +61,7 @@ pipeline {
6161
// Set all Java version that can be discovered/selected by maven-toolchains-plugin
6262
JAVA_17_HOME = tool(type:'jdk', name:'temurin-jdk17-latest')
6363
JAVA_21_HOME = tool(type:'jdk', name:'temurin-jdk21-latest')
64+
JAVA_25_HOME = tool(type:'jdk', name:'temurin-jdk25-latest')
6465
}
6566
steps {
6667
xvnc(useXauthority: true) {
@@ -171,7 +172,10 @@ def selectedTargetPlatform() {
171172
def isUpstream = isTriggeredByUpstream()
172173
def javaVersion = javaVersion()
173174

174-
if (isTriggeredByUpstream() && javaVersion>=21) {
175+
if (isTriggeredByUpstream() && javaVersion>=25) {
176+
println("Choosing 'latest' target since this build was triggered by upstream with Java ${javaVersion}")
177+
return 'latest'
178+
} else if (isTriggeredByUpstream() && javaVersion>=21) {
175179
println("Choosing 'latest' target since this build was triggered by upstream with Java ${javaVersion}")
176180
return 'latest'
177181
} else if (isTriggeredByUpstream() && javaVersion>=17) {

org.eclipse.xtend.core.tests/src/org/eclipse/xtend/core/tests/imports/ImportOrganizerTest.xtend

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2020,21 +2020,21 @@ class ImportOrganizerTest extends AbstractXtendTestCase {
20202020
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=399519
20212021
@Test def testExtensionFeatureCallToStaticLocalFieldFromSuper() {
20222022
'''
2023-
import java.util.Collections
2023+
import java.util.ArrayList
20242024
2025-
import static extension java.util.Collections.*
2025+
import static extension java.util.List.*
20262026
2027-
class Foo extends Collections {
2027+
class Foo extends ArrayList {
20282028
def foo() {
2029-
''.singleton
2029+
''.of
20302030
}
20312031
}
20322032
'''.assertIsOrganizedTo('''
2033-
import java.util.Collections
2033+
import java.util.ArrayList
20342034
2035-
class Foo extends Collections {
2035+
class Foo extends ArrayList {
20362036
def foo() {
2037-
''.singleton
2037+
''.of
20382038
}
20392039
}
20402040
''')

org.eclipse.xtend.core.tests/xtend-gen/org/eclipse/xtend/core/tests/imports/ImportOrganizerTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3875,36 +3875,36 @@ public void testExtensionFeatureCallToStaticLocal() {
38753875
@Test
38763876
public void testExtensionFeatureCallToStaticLocalFieldFromSuper() {
38773877
StringConcatenation _builder = new StringConcatenation();
3878-
_builder.append("import java.util.Collections");
3878+
_builder.append("import java.util.ArrayList");
38793879
_builder.newLine();
38803880
_builder.newLine();
3881-
_builder.append("import static extension java.util.Collections.*");
3881+
_builder.append("import static extension java.util.List.*");
38823882
_builder.newLine();
38833883
_builder.newLine();
3884-
_builder.append("class Foo extends Collections {");
3884+
_builder.append("class Foo extends ArrayList {");
38853885
_builder.newLine();
38863886
_builder.append("\t");
38873887
_builder.append("def foo() {");
38883888
_builder.newLine();
38893889
_builder.append("\t\t");
3890-
_builder.append("\'\'.singleton");
3890+
_builder.append("\'\'.of");
38913891
_builder.newLine();
38923892
_builder.append("\t");
38933893
_builder.append("}");
38943894
_builder.newLine();
38953895
_builder.append("}");
38963896
_builder.newLine();
38973897
StringConcatenation _builder_1 = new StringConcatenation();
3898-
_builder_1.append("import java.util.Collections");
3898+
_builder_1.append("import java.util.ArrayList");
38993899
_builder_1.newLine();
39003900
_builder_1.newLine();
3901-
_builder_1.append("class Foo extends Collections {");
3901+
_builder_1.append("class Foo extends ArrayList {");
39023902
_builder_1.newLine();
39033903
_builder_1.append("\t");
39043904
_builder_1.append("def foo() {");
39053905
_builder_1.newLine();
39063906
_builder_1.append("\t\t");
3907-
_builder_1.append("\'\'.singleton");
3907+
_builder_1.append("\'\'.of");
39083908
_builder_1.newLine();
39093909
_builder_1.append("\t");
39103910
_builder_1.append("}");

org.eclipse.xtend.maven.plugin/src/test/java/org/eclipse/xtend/maven/XtendCompilerMojoIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ public void simpleJava21Project() throws Exception {
7171
verifyErrorFreeLog(ROOT + "/simple-java21");
7272
}
7373

74+
@Test
75+
public void simpleJava25Project() throws Exception {
76+
Assume.assumeTrue("Active only on Java 25 and later", JavaRuntimeVersion.isJava25OrLater());
77+
verifyErrorFreeLog(ROOT + "/simple-java21");
78+
}
79+
7480
@Test
7581
public void encoding() throws Exception {
7682
Verifier verifier = MavenVerifierUtil.newVerifier(ROOT + "/encoding");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-Djava-25
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.eclipse.xtext</groupId>
7+
<artifactId>it-tests-parent</artifactId>
8+
<version>IT-SNAPSHOT</version>
9+
<relativePath>../../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>simple-java25</artifactId>
12+
<properties>
13+
<maven.compiler.source>25</maven.compiler.source>
14+
<maven.compiler.target>25</maven.compiler.target>
15+
</properties>
16+
<build>
17+
<plugins>
18+
<plugin>
19+
<groupId>org.eclipse.xtext</groupId>
20+
<artifactId>xtend-maven-plugin</artifactId>
21+
</plugin>
22+
</plugins>
23+
</build>
24+
</project>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package test;
2+
3+
public record JavaRecord(String name) {
4+
public XtendA foo(XtendA test) {
5+
return test;
6+
}
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package test
2+
3+
class XtendA {
4+
def JavaRecord newJavaRecord() {
5+
return new JavaRecord("a test")
6+
}
7+
8+
def String aName(JavaRecord r) {
9+
r.name
10+
}
11+
}

org.eclipse.xtext.common.types.eclipse.tests/tests/org/eclipse/xtext/common/types/access/impl/AbstractTypeProviderTest.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.lang.annotation.Annotation;
1515
import java.util.Arrays;
1616
import java.util.HashMap;
17+
import java.util.HashSet;
1718
import java.util.Iterator;
1819
import java.util.List;
1920
import java.util.Map;
@@ -319,18 +320,19 @@ public void testFindTypeByName_javaLangCharSequence_01() {
319320
@Test
320321
public void testFindTypeByName_javaLangCharSequence_02() {
321322
String typeName = CharSequence.class.getName();
322-
try {
323-
Set<String> memberNames = Sets.newHashSet("length", "chars", "charAt", "codePoints", "subSequence", "toString");
324-
assertMembers(typeName, memberNames);
325-
} catch(AssertionError e) {
326-
try {
327-
Set<String> memberNamesJ11 = Sets.newHashSet("length", "chars", "charAt", "codePoints", "subSequence", "toString", "compare");
328-
assertMembers(typeName, memberNamesJ11);
329-
} catch (AssertionError e2) {
330-
Set<String> memberNamesJ15 = Sets.newHashSet("length", "chars", "charAt", "codePoints", "isEmpty", "subSequence", "toString", "compare");
331-
assertMembers(typeName, memberNamesJ15);
332-
}
323+
int javaVersion = Runtime.version().feature();
324+
Set<String> expectedMemberNames = new HashSet<>(
325+
Set.of("length", "chars", "charAt", "codePoints", "subSequence", "toString"));
326+
if (javaVersion >= 11) {
327+
expectedMemberNames.add("compare");
328+
}
329+
if (javaVersion >= 15) {
330+
expectedMemberNames.add("isEmpty");
331+
}
332+
if (javaVersion >= 25) {
333+
expectedMemberNames.add("getChars");
333334
}
335+
assertMembers(typeName, expectedMemberNames);
334336
}
335337

336338
@Test

0 commit comments

Comments
 (0)