Skip to content

Commit 9c527f3

Browse files
author
Clayton Walker
committed
Add twirl toolchain support
1 parent 3af10b4 commit 9c527f3

File tree

3 files changed

+64
-4
lines changed

3 files changed

+64
-4
lines changed

src/main/java/org/gradle/playframework/plugins/PlayTwirlPlugin.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import org.gradle.playframework.sourcesets.TwirlSourceSet;
1010
import org.gradle.playframework.sourcesets.internal.DefaultTwirlSourceSet;
1111
import org.gradle.playframework.tasks.TwirlCompile;
12+
import org.gradle.playframework.tasks.TwirlCompileExt;
1213
import org.gradle.playframework.tools.internal.twirl.TwirlCompilerFactory;
14+
import org.gradle.util.GradleVersion;
1315

1416
import java.util.List;
1517

@@ -56,7 +58,13 @@ private void declareDefaultDependencies(Project project, Configuration configura
5658
}
5759

5860
private TaskProvider<TwirlCompile> createDefaultTwirlCompileTask(Project project, TwirlSourceSet twirlSourceSet, Configuration compilerConfiguration, PlayExtension playExtension) {
59-
return project.getTasks().register(TWIRL_COMPILE_TASK_NAME, TwirlCompile.class, twirlCompile -> {
61+
Class<? extends TwirlCompile> type;
62+
if (GradleVersion.current().compareTo(GradleVersion.version("6.7")) < 0) {
63+
type = TwirlCompile.class;
64+
} else {
65+
type = TwirlCompileExt.class;
66+
}
67+
return project.getTasks().register(TWIRL_COMPILE_TASK_NAME, (Class<TwirlCompile>) type, twirlCompile -> {
6068
twirlCompile.setDescription("Compiles Twirl templates for the '" + twirlSourceSet.getTwirl().getDisplayName() + "' source set.");
6169
twirlCompile.getPlatform().set(project.provider(() -> playExtension.getPlatform()));
6270
twirlCompile.setSource(twirlSourceSet.getTwirl());

src/main/java/org/gradle/playframework/tasks/TwirlCompile.java

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

33
import org.gradle.api.Action;
44
import org.gradle.api.file.ConfigurableFileCollection;
5-
import org.gradle.api.file.Directory;
65
import org.gradle.api.file.DirectoryProperty;
76
import org.gradle.api.file.FileTree;
87
import org.gradle.api.file.FileVisitDetails;
@@ -111,6 +110,10 @@ public ConfigurableFileCollection getTwirlCompilerClasspath() {
111110
return twirlCompilerClasspath;
112111
}
113112

113+
protected String executable() {
114+
return null;
115+
}
116+
114117
@TaskAction
115118
@SuppressWarnings("Convert2Lambda")
116119
void compile() {
@@ -121,7 +124,13 @@ void compile() {
121124
if (GradleVersion.current().compareTo(GradleVersion.version("5.6")) < 0) {
122125
workerExecutor.submit(TwirlCompileRunnable.class, workerConfiguration -> {
123126
workerConfiguration.setIsolationMode(IsolationMode.PROCESS);
124-
workerConfiguration.forkOptions(options -> options.jvmArgs("-XX:MaxMetaspaceSize=256m"));
127+
workerConfiguration.forkOptions(options -> {
128+
options.jvmArgs("-XX:MaxMetaspaceSize=256m");
129+
String executable = executable();
130+
if (executable != null) {
131+
options.setExecutable(executable);
132+
}
133+
});
125134
workerConfiguration.params(spec, getCompiler());
126135
workerConfiguration.classpath(twirlCompilerClasspath);
127136
workerConfiguration.setDisplayName("Generating Scala source from Twirl templates");
@@ -130,7 +139,13 @@ void compile() {
130139
WorkQueue workQueue = workerExecutor.processIsolation(new Action<ProcessWorkerSpec>() {
131140
@Override
132141
public void execute(ProcessWorkerSpec workerSpec) {
133-
workerSpec.forkOptions(options -> options.jvmArgs("-XX:MaxMetaspaceSize=256m"));
142+
workerSpec.forkOptions(options -> {
143+
options.jvmArgs("-XX:MaxMetaspaceSize=256m");
144+
String executable = executable();
145+
if (executable != null) {
146+
options.setExecutable(executable);
147+
}
148+
});
134149
workerSpec.getClasspath().from(twirlCompilerClasspath);
135150
}
136151
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.gradle.playframework.tasks;
2+
3+
import org.gradle.api.Incubating;
4+
import org.gradle.api.provider.Property;
5+
import org.gradle.api.tasks.Internal;
6+
import org.gradle.api.tasks.Optional;
7+
import org.gradle.jvm.toolchain.JavaLauncher;
8+
import org.gradle.workers.WorkerExecutor;
9+
10+
import javax.inject.Inject;
11+
12+
public class TwirlCompileExt extends TwirlCompile {
13+
@Inject
14+
public TwirlCompileExt(WorkerExecutor workerExecutor) {
15+
super(workerExecutor);
16+
this.javaLauncher = getProject().getObjects().property(JavaLauncher.class);
17+
}
18+
19+
private final Property<JavaLauncher> javaLauncher;
20+
21+
/**
22+
* The toolchain {@link JavaLauncher} to use for executing the twirl template compiler.
23+
*
24+
* @return the java launcher property
25+
*/
26+
@Internal
27+
@Incubating
28+
@Optional
29+
public Property<JavaLauncher> getJavaLauncher() {
30+
return this.javaLauncher;
31+
}
32+
33+
@Override
34+
protected String executable() {
35+
return getJavaLauncher().map(launcher -> launcher.getExecutablePath().getAsFile().getAbsolutePath()).getOrNull();
36+
}
37+
}

0 commit comments

Comments
 (0)