Skip to content

Commit 5bcbb71

Browse files
committed
Make plugin compatible with Java 8
1 parent bdf717a commit 5bcbb71

File tree

8 files changed

+82
-46
lines changed

8 files changed

+82
-46
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
build/
44
*.iml
55
out/
6+
/test-project/gradle.properties

build.gradle

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ group = 'org.openjfx'
88
version = '0.1.1-SNAPSHOT'
99

1010
java {
11-
toolchain.languageVersion = JavaLanguageVersion.of(11)
11+
toolchain.languageVersion = JavaLanguageVersion.of(8)
1212
}
1313

1414
repositories {
@@ -26,6 +26,15 @@ dependencies {
2626

2727
tasks.named('test', Test) {
2828
useJUnitPlatform()
29+
30+
def java11Home = javaToolchains
31+
.launcherFor { languageVersion.set(JavaLanguageVersion.of(11)) }
32+
.get()
33+
.metadata
34+
.installationPath
35+
.asFile
36+
.absolutePath
37+
systemProperty("java11Home", java11Home)
2938
}
3039

3140
gradlePlugin {

src/main/java/org/openjfx/gradle/JavaFXModule.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
import org.gradle.api.GradleException;
3333

34+
import java.util.Arrays;
3435
import java.util.List;
3536
import java.util.Locale;
3637
import java.util.Optional;
@@ -55,7 +56,7 @@ public enum JavaFXModule {
5556
private final List<JavaFXModule> dependentModules;
5657

5758
JavaFXModule(JavaFXModule...dependentModules) {
58-
this.dependentModules = List.of(dependentModules);
59+
this.dependentModules = Arrays.asList(dependentModules);
5960
}
6061

6162
public static Optional<JavaFXModule> fromModuleName(String moduleName) {
@@ -86,13 +87,14 @@ public static Set<JavaFXModule> getJavaFXModules(List<String> moduleNames) {
8687

8788
return moduleNames.stream()
8889
.map(JavaFXModule::fromModuleName)
89-
.flatMap(Optional::stream)
90+
.filter(Optional::isPresent)
91+
.map(Optional::get)
9092
.collect(Collectors.toSet());
9193
}
9294

9395
public static void validateModules(List<String> moduleNames) {
94-
var invalidModules = moduleNames.stream()
95-
.filter(module -> JavaFXModule.fromModuleName(module).isEmpty())
96+
List<String> invalidModules = moduleNames.stream()
97+
.filter(module -> !JavaFXModule.fromModuleName(module).isPresent())
9698
.collect(Collectors.toList());
9799

98100
if (! invalidModules.isEmpty()) {

src/main/java/org/openjfx/gradle/JavaFXOptions.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import javax.inject.Inject;
4444
import java.io.File;
4545
import java.util.ArrayList;
46+
import java.util.Arrays;
4647
import java.util.HashMap;
4748
import java.util.HashSet;
4849
import java.util.List;
@@ -177,20 +178,20 @@ public void setModules(List<String> modules) {
177178
}
178179

179180
public void modules(String...moduleNames) {
180-
setModules(List.of(moduleNames));
181+
setModules(Arrays.asList(moduleNames));
181182
}
182183

183184
private void declareFXDependencies(String conf) {
184185
// Use 'withDependencies' to declare the dependencies late (i.e., right before dependency resolution starts).
185186
// This allows users to make multiple modifications to the 'configurations' list at arbitrary times during
186187
// build configuration.
187188
getConfigurationContainer().getByName(conf).withDependencies(dependencySet -> {
188-
if (!List.of(configurations).contains(conf)) {
189+
if (!Arrays.asList(configurations).contains(conf)) {
189190
// configuration was removed: do nothing
190191
return;
191192
}
192193

193-
var javaFXModules = JavaFXModule.getJavaFXModules(this.modules);
194+
Set<JavaFXModule> javaFXModules = JavaFXModule.getJavaFXModules(this.modules);
194195
if (customSDKArtifactRepository == null) {
195196
javaFXModules.stream()
196197
.sorted()
@@ -203,16 +204,18 @@ private void declareFXDependencies(String conf) {
203204
// Use the list of dependencies of each module to also add direct dependencies for those.
204205
// This is needed, because there is no information about transitive dependencies in the metadata
205206
// of the modules (as there is no such metadata in the local sdk).
206-
var javaFXModulesWithTransitives = Stream.concat(
207+
Stream<JavaFXModule> javaFXModulesWithTransitives = Stream.concat(
207208
javaFXModules.stream(),
208209
javaFXModules.stream()
209210
.flatMap(m -> m.getDependentModules().stream()))
210211
.distinct()
211212
.sorted();
212213

213-
javaFXModulesWithTransitives.forEach(javaFXModule ->
214-
dependencySet.add(getDependencies().create(
215-
Map.of("name", javaFXModule.getModuleName()))));
214+
javaFXModulesWithTransitives.forEach(javaFXModule -> {
215+
Map<String, String> dependencyNotation = new HashMap<>();
216+
dependencyNotation.put("name", javaFXModule.getModuleName());
217+
dependencySet.add(getDependencies().create(dependencyNotation));
218+
});
216219
}
217220
});
218221
}

src/main/java/org/openjfx/gradle/JavaFXPlugin.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545

4646
import java.io.File;
4747
import java.util.Arrays;
48-
import java.util.List;
4948

5049
import static org.openjfx.gradle.JavaFXOptions.MAVEN_JAVAFX_ARTIFACT_GROUP_ID;
5150

@@ -111,9 +110,9 @@ private static void putJavaFXJarsOnModulePathForClasspathApplication(JavaExec ex
111110
FileCollection classpath = execTask.getClasspath();
112111

113112
execTask.setClasspath(classpath.filter(jar -> !isJavaFXJar(jar, javaFXOptions.getPlatform())));
114-
var modulePath = classpath.filter(jar -> isJavaFXJar(jar, javaFXOptions.getPlatform()));
113+
FileCollection modulePath = classpath.filter(jar -> isJavaFXJar(jar, javaFXOptions.getPlatform()));
115114

116-
execTask.getJvmArgumentProviders().add(() -> List.of(
115+
execTask.getJvmArgumentProviders().add(() -> Arrays.asList(
117116
"--module-path", modulePath.getAsPath(),
118117
"--add-modules", String.join(",", javaFXOptions.getModules())
119118
));

src/main/java/org/openjfx/gradle/metadatarule/JavaFXComponentMetadataRule.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ abstract public class JavaFXComponentMetadataRule implements ComponentMetadataRu
5656

5757
@Override
5858
public void execute(ComponentMetadataContext context) {
59-
var details = context.getDetails();
59+
ComponentMetadataDetails details = context.getDetails();
6060

6161
for (JavaFXPlatform javaFXPlatform : JavaFXPlatform.values()) {
6262
addJavaFXPlatformVariant(javaFXPlatform, details, "Compile", "compile");
@@ -65,8 +65,8 @@ public void execute(ComponentMetadataContext context) {
6565
}
6666

6767
private void addJavaFXPlatformVariant(JavaFXPlatform javaFXPlatform, ComponentMetadataDetails details, String nameSuffix, String baseVariant) {
68-
var name = details.getId().getName();
69-
var version = details.getId().getVersion();
68+
String name = details.getId().getName();
69+
String version = details.getId().getVersion();
7070

7171
// Use 'maybeAddVariant'. As long as the metadata is sourced from POM, 'compile' and 'runtime' exist.
7272
// These are used as base for the additional variants so that those variants have the same dependencies.

src/test/java/org/openjfx/gradle/JavaFXModuleTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@
3232
import org.gradle.api.GradleException;
3333
import org.junit.jupiter.api.Test;
3434

35+
import java.util.Arrays;
3536
import java.util.List;
3637
import java.util.Optional;
3738

3839
import static org.junit.jupiter.api.Assertions.assertEquals;
40+
import static org.junit.jupiter.api.Assertions.assertFalse;
3941
import static org.junit.jupiter.api.Assertions.assertTrue;
4042
import static org.junit.jupiter.api.Assertions.fail;
4143

@@ -50,7 +52,7 @@ void existingModuleName() {
5052

5153
@Test
5254
void nonExistingModuleName() {
53-
assertTrue(JavaFXModule.fromModuleName("javafx.unknown").isEmpty());
55+
assertFalse(JavaFXModule.fromModuleName("javafx.unknown").isPresent());
5456
}
5557

5658
@Test
@@ -65,14 +67,14 @@ void getArtifactName() {
6567

6668
@Test
6769
void validateWithValidModules() {
68-
var moduleNames = List.of(JavaFXModule.CONTROLS.getModuleName(), JavaFXModule.WEB.getModuleName());
70+
List<String> moduleNames = Arrays.asList(JavaFXModule.CONTROLS.getModuleName(), JavaFXModule.WEB.getModuleName());
6971

7072
JavaFXModule.validateModules(moduleNames);
7173
}
7274

7375
@Test
7476
void validateWithInvalidModules() {
75-
var moduleNames = List.of("javafx.unknown", JavaFXModule.CONTROLS.getModuleName(), JavaFXModule.WEB.getModuleName());
77+
List<String> moduleNames = Arrays.asList("javafx.unknown", JavaFXModule.CONTROLS.getModuleName(), JavaFXModule.WEB.getModuleName());
7678

7779
try {
7880
JavaFXModule.validateModules(moduleNames);

src/test/java/org/openjfx/gradle/JavaFXPluginSmokeTest.java

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,21 @@
2929
*/
3030
package org.openjfx.gradle;
3131

32+
import org.gradle.api.Project;
3233
import org.gradle.testfixtures.ProjectBuilder;
3334
import org.gradle.testkit.runner.BuildResult;
3435
import org.gradle.testkit.runner.GradleRunner;
3536
import org.gradle.testkit.runner.TaskOutcome;
3637
import org.junit.jupiter.api.Test;
3738

3839
import java.io.File;
40+
import java.io.FileOutputStream;
41+
import java.io.IOException;
42+
import java.io.OutputStream;
3943
import java.lang.management.ManagementFactory;
4044
import java.util.Arrays;
4145
import java.util.List;
46+
import java.util.Properties;
4247
import java.util.stream.Collectors;
4348

4449
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -48,7 +53,7 @@ abstract class JavaFXPluginSmokeTest {
4853
private static final String classifier;
4954

5055
static {
51-
var p = ProjectBuilder.builder().build();
56+
Project p = ProjectBuilder.builder().build();
5257
p.getPlugins().apply(JavaFXPlugin.class);
5358
classifier = p.getExtensions().getByType(JavaFXOptions.class).getPlatform().getClassifier();
5459
}
@@ -61,60 +66,60 @@ protected String modularApplicationRuntime() {
6166

6267
@Test
6368
void smokeTestModular() {
64-
var result = build(":modular:run");
69+
BuildResult result = buildWithJava11(":modular:run");
6570

6671
assertEquals(TaskOutcome.SUCCESS, result.task(":modular:run").getOutcome());
6772

68-
assertEquals(List.of("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar"), modulePath(result).get(0));
69-
assertEquals(List.of("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", "modular.jar"), modulePath(result).get(1));
73+
assertEquals(Arrays.asList("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar"), modulePath(result).get(0));
74+
assertEquals(Arrays.asList("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", "modular.jar"), modulePath(result).get(1));
7075

71-
assertEquals(List.of(), compileClassPath(result));
72-
assertEquals(List.of(), runtimeClassPath(result));
76+
assertEquals(Arrays.asList(), compileClassPath(result));
77+
assertEquals(Arrays.asList(), runtimeClassPath(result));
7378
}
7479

7580
@Test
7681
void smokeTestModularWithModularityPlugin() {
77-
var result = build(":modular-with-modularity-plugin:run");
82+
BuildResult result = buildWithJava11(":modular-with-modularity-plugin:run");
7883

7984
assertEquals(TaskOutcome.SUCCESS, result.task(":modular-with-modularity-plugin:run").getOutcome());
8085

81-
assertEquals(List.of("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar"), modulePath(result).get(0));
82-
assertEquals(List.of("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", modularApplicationRuntime()), modulePath(result).get(1));
86+
assertEquals(Arrays.asList("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar"), modulePath(result).get(0));
87+
assertEquals(Arrays.asList("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", modularApplicationRuntime()), modulePath(result).get(1));
8388

84-
assertEquals(List.of(), compileClassPath(result));
85-
assertEquals(List.of(), runtimeClassPath(result));
89+
assertEquals(Arrays.asList(), compileClassPath(result));
90+
assertEquals(Arrays.asList(), runtimeClassPath(result));
8691
}
8792

8893
@Test
8994
void smokeTestNonModular() {
90-
var result = build(":non-modular:run");
95+
BuildResult result = buildWithJava11(":non-modular:run");
9196

9297
assertEquals(TaskOutcome.SUCCESS, result.task(":non-modular:run").getOutcome());
9398

94-
assertEquals(List.of("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", "javafx-media-17-" + classifier + ".jar", "javafx-web-17-" + classifier + ".jar"), compileClassPath(result).get(0));
95-
assertEquals(List.of("main", "main"), runtimeClassPath(result).get(0));
96-
assertEquals(List.of("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", "javafx-media-17-" + classifier + ".jar", "javafx-web-17-" + classifier + ".jar"), modulePath(result).get(0));
99+
assertEquals(Arrays.asList("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", "javafx-media-17-" + classifier + ".jar", "javafx-web-17-" + classifier + ".jar"), compileClassPath(result).get(0));
100+
assertEquals(Arrays.asList("main", "main"), runtimeClassPath(result).get(0));
101+
assertEquals(Arrays.asList("javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar", "javafx-media-17-" + classifier + ".jar", "javafx-web-17-" + classifier + ".jar"), modulePath(result).get(0));
97102
}
98103

99104
@Test
100105
void smokeTestTransitive() {
101-
var result = build(":transitive:run");
106+
BuildResult result = buildWithJava11(":transitive:run");
102107

103108
assertEquals(TaskOutcome.SUCCESS, result.task(":transitive:run").getOutcome());
104109

105-
assertEquals(List.of("charts-17.1.41.jar", "javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar"), compileClassPath(result).get(0));
106-
assertEquals(List.of("charts-17.1.41.jar", "countries-17.0.29.jar", "heatmap-17.0.17.jar", "logback-classic-1.2.6.jar", "logback-core-1.2.6.jar", "main", "main", "slf4j-api-1.7.32.jar", "toolbox-17.0.45.jar", "toolboxfx-17.0.37.jar"), runtimeClassPath(result).get(0));
107-
assertEquals(List.of("javafx-base-17.0.6-" + classifier + ".jar", "javafx-controls-17.0.6-" + classifier + ".jar", "javafx-graphics-17.0.6-" + classifier + ".jar", "javafx-swing-17.0.6-" + classifier + ".jar"), modulePath(result).get(0));
110+
assertEquals(Arrays.asList("charts-17.1.41.jar", "javafx-base-17-" + classifier + ".jar", "javafx-controls-17-" + classifier + ".jar", "javafx-graphics-17-" + classifier + ".jar"), compileClassPath(result).get(0));
111+
assertEquals(Arrays.asList("charts-17.1.41.jar", "countries-17.0.29.jar", "heatmap-17.0.17.jar", "logback-classic-1.2.6.jar", "logback-core-1.2.6.jar", "main", "main", "slf4j-api-1.7.32.jar", "toolbox-17.0.45.jar", "toolboxfx-17.0.37.jar"), runtimeClassPath(result).get(0));
112+
assertEquals(Arrays.asList("javafx-base-17.0.6-" + classifier + ".jar", "javafx-controls-17.0.6-" + classifier + ".jar", "javafx-graphics-17.0.6-" + classifier + ".jar", "javafx-swing-17.0.6-" + classifier + ".jar"), modulePath(result).get(0));
108113
}
109114

110115
@Test
111116
void smokeTestLocalSdk() {
112-
var result = build(":local-sdk:build"); // do not ':run', as it won't run on any platform
117+
BuildResult result = buildWithJava11(":local-sdk:build"); // do not ':run', as it won't run on any platform
113118

114119
assertEquals(TaskOutcome.SUCCESS, result.task(":local-sdk:build").getOutcome());
115120

116-
assertEquals(List.of("javafx.base.jar", "javafx.controls.jar", "javafx.graphics.jar"), compileClassPath(result).get(0));
117-
assertEquals(List.of(), modulePath(result));
121+
assertEquals(Arrays.asList("javafx.base.jar", "javafx.controls.jar", "javafx.graphics.jar"), compileClassPath(result).get(0));
122+
assertEquals(Arrays.asList(), modulePath(result));
118123
}
119124

120125
private static List<List<String>> modulePath(BuildResult result) {
@@ -132,18 +137,33 @@ private static List<List<String>> runtimeClassPath(BuildResult result) {
132137
private static List<List<String>> path(BuildResult result, String pathArg) {
133138
// Parse classpath or module path from Gradle's '--debug' output.
134139
// The :compileJava and :run tasks log them on that logging level.
135-
return result.getOutput().lines().filter(l -> l.contains(pathArg)).map(l -> {
140+
return Arrays.stream(result.getOutput().split("\r?\n|\r")).filter(l -> l.contains(pathArg)).map(l -> {
136141
int pathArgIndex = l.indexOf(pathArg) + pathArg.length();
137142
String pathString = l.substring(pathArgIndex, l.indexOf(" ", pathArgIndex));
138-
if (pathString.isBlank()) {
139-
return List.<String>of();
143+
if (pathString.trim().isEmpty()) {
144+
return Arrays.<String>asList();
140145
}
141146
String[] path = pathString.split(System.getProperty("path.separator"));
142147
return Arrays.stream(path).map(jar -> new File(jar).getName()).sorted().collect(Collectors.toList());
143148
}).filter(p -> !p.isEmpty()).collect(Collectors.toList());
144149
}
145150

146151
private BuildResult build(String task) {
152+
return build(task, new Properties());
153+
}
154+
155+
private BuildResult buildWithJava11(String task) {
156+
Properties gradleProperties = new Properties();
157+
gradleProperties.setProperty("org.gradle.java.home", System.getProperty("java11Home"));
158+
return build(task, gradleProperties);
159+
}
160+
161+
private BuildResult build(String task, Properties gradleProperties) {
162+
try (OutputStream out = new FileOutputStream("test-project/gradle.properties")) {
163+
gradleProperties.store(out, null);
164+
} catch (IOException ioe) {
165+
throw new RuntimeException(ioe);
166+
}
147167
return GradleRunner.create()
148168
.withProjectDir(new File("test-project"))
149169
.withGradleVersion(getGradleVersion())

0 commit comments

Comments
 (0)