diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlCompile.java b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlCompile.java index 71eff915..ed38d79c 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlCompile.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlCompile.java @@ -26,6 +26,7 @@ import org.gradle.workers.WorkerExecutor; import play.twirl.gradle.internal.TwirlCompileAction; +/** Gradle task for compiling Twirl templates into Scala code. */ public abstract class TwirlCompile extends SourceTask { @InputFiles diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlExtension.java b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlExtension.java index a4728193..77de6893 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlExtension.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlExtension.java @@ -5,7 +5,20 @@ import org.gradle.api.provider.Property; +/** + * The extension of the plugin allowing for configuring the target Scala version used for the + * application. + */ public abstract class TwirlExtension { + /** + * Scala version used for compilation Twirl templates. + * + *
{@code
+   * twirl {
+   *   scalaVersion.set("3")
+   * }
+   * }
+ */ public abstract Property getScalaVersion(); } diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java index 96b5befe..5e7215f6 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlPlugin.java @@ -23,7 +23,7 @@ import play.twirl.gradle.internal.DefaultTwirlSourceDirectorySet; import play.twirl.gradle.internal.Gradle7TwirlSourceDirectorySet; -/** A simple 'hello world' plugin. */ +/** A Gradle plugin to compile Twirl templates. */ public class TwirlPlugin implements Plugin { static final String DEFAULT_SCALA_VERSION = "2.13"; @@ -58,7 +58,7 @@ public void apply(final Project project) { configureSourceSetDefaults(project, twirlConfiguration); } - /** Get Twirl version from Gradle Plugin MANIFEST.MF */ + /** Get Twirl compiler version from Gradle Plugin MANIFEST.MF */ private String getDefaultTwirlVersion() { return System.getProperty("twirl.version", getClass().getPackage().getImplementationVersion()); } @@ -140,25 +140,24 @@ private TaskProvider createTwirlCompileTask( }); } + @SuppressWarnings("deprecation") private TwirlSourceDirectorySet getTwirlSourceDirectorySet(SourceSet sourceSet) { String displayName = ((DefaultSourceSet) sourceSet).getDisplayName(); - TwirlSourceDirectorySet twirlSourceDirectorySet; - if (GradleVersion.current().compareTo(GradleVersion.version("8.0")) < 0) { // Gradle < 8.0 - twirlSourceDirectorySet = - objectFactory.newInstance( - Gradle7TwirlSourceDirectorySet.class, - objectFactory.sourceDirectorySet("twirl", displayName + " Twirl source")); - } else { // Gradle 8+ - twirlSourceDirectorySet = - objectFactory.newInstance( - DefaultTwirlSourceDirectorySet.class, - objectFactory.sourceDirectorySet("twirl", displayName + " Twirl source")); - } + TwirlSourceDirectorySet twirlSourceDirectorySet = + objectFactory.newInstance( + isGradleVersionLessThan("8.0") + ? Gradle7TwirlSourceDirectorySet.class + : DefaultTwirlSourceDirectorySet.class, + objectFactory.sourceDirectorySet("twirl", displayName + " Twirl source")); twirlSourceDirectorySet.getFilter().include("**/*.scala.*"); twirlSourceDirectorySet.getTemplateFormats().convention(DEFAULT_TEMPLATE_FORMATS); return twirlSourceDirectorySet; } + static boolean isGradleVersionLessThan(String gradleVersion) { + return GradleVersion.current().compareTo(GradleVersion.version(gradleVersion)) < 0; + } + static JavaPluginExtension javaPluginExtension(Project project) { return extensionOf(project, JavaPluginExtension.class); } diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlSourceDirectorySet.java b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlSourceDirectorySet.java index b767bd98..b7959f48 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/TwirlSourceDirectorySet.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/TwirlSourceDirectorySet.java @@ -15,11 +15,63 @@ */ public interface TwirlSourceDirectorySet extends SourceDirectorySet { + /** + * Custom template formats configured for this source directory set. + * + *
{@code
+   * sourceSets {
+   *   main {
+   *     twirl {
+   *       templateFormats.put("csv", "play.twirl.api.TxtFormat")
+   *     }
+   *   }
+   * }
+   * }
+ */ MapProperty getTemplateFormats(); + /** + * Imports that should be added to generated source files. + * + *
{@code
+   * sourceSets {
+   *   main {
+   *     twirl {
+   *       templateImports.add("org.example._")
+   *     }
+   *   }
+   * }
+   * }
+ */ SetProperty getTemplateImports(); + /** + * Annotations added to constructors in injectable templates. + * + *
{@code
+   * sourceSets {
+   *   main {
+   *     twirl {
+   *       constructorAnnotations.add("@org.example.MyAnnotation()")
+   *     }
+   *   }
+   * }
+   * }
+ */ ListProperty getConstructorAnnotations(); + /** + * Source encoding for template files and generated scala files. + * + *
{@code
+   * sourceSets {
+   *   main {
+   *     twirl {
+   *       sourceEncoding.set("")
+   *     }
+   *   }
+   * }
+   * }
+ */ Property getSourceEncoding(); } diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/internal/DefaultTwirlSourceDirectorySet.java b/gradle-twirl/src/main/java/play/twirl/gradle/internal/DefaultTwirlSourceDirectorySet.java index 553a7145..3b775e23 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/internal/DefaultTwirlSourceDirectorySet.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/internal/DefaultTwirlSourceDirectorySet.java @@ -16,6 +16,7 @@ import org.gradle.api.provider.SetProperty; import play.twirl.gradle.TwirlSourceDirectorySet; +/** Default implementation of {@link TwirlSourceDirectorySet}. */ public class DefaultTwirlSourceDirectorySet extends DefaultSourceDirectorySet implements TwirlSourceDirectorySet { diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/internal/Gradle7TwirlSourceDirectorySet.java b/gradle-twirl/src/main/java/play/twirl/gradle/internal/Gradle7TwirlSourceDirectorySet.java index f79330e6..8bb083d8 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/internal/Gradle7TwirlSourceDirectorySet.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/internal/Gradle7TwirlSourceDirectorySet.java @@ -6,8 +6,15 @@ import javax.inject.Inject; import org.gradle.api.file.SourceDirectorySet; import org.gradle.api.model.ObjectFactory; +import play.twirl.gradle.TwirlSourceDirectorySet; +/** + * Implementation of {@link TwirlSourceDirectorySet} is needed to support Gradle 7. + * + * @deprecated + */ @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public class Gradle7TwirlSourceDirectorySet extends DefaultTwirlSourceDirectorySet { @Inject diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileAction.java b/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileAction.java index 7ba573ea..1fd642fe 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileAction.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileAction.java @@ -12,6 +12,7 @@ import play.japi.twirl.compiler.TwirlCompiler; import scala.io.Codec; +/** Gradle work action that compile one Twirl template. */ public abstract class TwirlCompileAction implements WorkAction { private static final Logger LOGGER = Logging.getLogger(TwirlCompileAction.class); diff --git a/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileParams.java b/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileParams.java index a3b1b973..d52911a5 100644 --- a/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileParams.java +++ b/gradle-twirl/src/main/java/play/twirl/gradle/internal/TwirlCompileParams.java @@ -10,6 +10,7 @@ import org.gradle.api.provider.SetProperty; import org.gradle.workers.WorkParameters; +/** Parameters of compilation work action. */ public interface TwirlCompileParams extends WorkParameters { RegularFileProperty getSourceFile();