From 3190e1ea0cb1110954f47c9d8eaaf019d05ec45e Mon Sep 17 00:00:00 2001 From: Alex Henning Johannessen Date: Fri, 23 Feb 2024 09:58:16 +0000 Subject: [PATCH] fix mima warnings --- .../japi/twirl/compiler/TwirlCompiler.java | 2 +- .../play/twirl/compiler/TwirlCompiler.scala | 137 ++++++++++++++++-- .../play/twirl/compiler/test/Helper.scala | 8 +- .../play/twirl/compiler/test/Helper.scala | 8 +- .../play/twirl/sbt/TemplateCompiler.scala | 2 +- 5 files changed, 141 insertions(+), 16 deletions(-) diff --git a/compiler/src/main/java/play/japi/twirl/compiler/TwirlCompiler.java b/compiler/src/main/java/play/japi/twirl/compiler/TwirlCompiler.java index e5cdbfdc..1f67f030 100644 --- a/compiler/src/main/java/play/japi/twirl/compiler/TwirlCompiler.java +++ b/compiler/src/main/java/play/japi/twirl/compiler/TwirlCompiler.java @@ -66,7 +66,7 @@ public static Optional compile( sourceDirectory, generatedDirectory, formatterType, - scalaVersion, + scala.Option.apply(scalaVersion), scalaAdditionalImports, scalaConstructorAnnotations, codec, diff --git a/compiler/src/main/scala/play/twirl/compiler/TwirlCompiler.scala b/compiler/src/main/scala/play/twirl/compiler/TwirlCompiler.scala index dc4d276d..c9c3969e 100644 --- a/compiler/src/main/scala/play/twirl/compiler/TwirlCompiler.scala +++ b/compiler/src/main/scala/play/twirl/compiler/TwirlCompiler.scala @@ -162,15 +162,15 @@ case class GeneratedSourceVirtual(path: String) extends AbstractGeneratedSource object TwirlCompiler { - // For constants that depends on the Scala 2 or 3 mode. + // For constants that depend on Scala 2 or 3 mode. private[compiler] class ScalaCompat(emitScala3Sources: Boolean) { val varargSplicesSyntax: String = if (emitScala3Sources) "*" else ": _*" } private[compiler] object ScalaCompat { - def apply(scalaVersion: String): ScalaCompat = - new ScalaCompat(scalaVersion.startsWith("3.")) + def apply(scalaVersion: Option[String]): ScalaCompat = + new ScalaCompat(scalaVersion.exists(_.startsWith("3."))) } def defaultImports(scalaVersion: String) = { @@ -206,12 +206,34 @@ object TwirlCompiler { sourceDirectory: File, generatedDirectory: File, formatterType: String, - scalaVersion: String, additionalImports: collection.Seq[String] = Nil, constructorAnnotations: collection.Seq[String] = Nil, codec: Codec = TwirlIO.defaultCodec, inclusiveDot: Boolean = false - ) = { + ): Option[File] = + compile( + source, + sourceDirectory, + generatedDirectory, + formatterType, + None, + additionalImports, + constructorAnnotations, + codec, + inclusiveDot + ) + + def compile( + source: File, + sourceDirectory: File, + generatedDirectory: File, + formatterType: String, + scalaVersion: Option[String], + additionalImports: collection.Seq[String], + constructorAnnotations: collection.Seq[String], + codec: Codec, + inclusiveDot: Boolean + ): Option[File] = { val resultType = formatterType + ".Appendable" val (templateName, generatedSource) = generatedFile(source, codec, sourceDirectory, generatedDirectory, inclusiveDot) @@ -241,12 +263,36 @@ object TwirlCompiler { sourceDirectory: File, resultType: String, formatterType: String, - scalaVersion: String, additionalImports: collection.Seq[String] = Nil, constructorAnnotations: collection.Seq[String] = Nil, codec: Codec = TwirlIO.defaultCodec, inclusiveDot: Boolean = false - ) = { + ): GeneratedSourceVirtual = + compileVirtual( + content, + source, + sourceDirectory, + resultType, + formatterType, + None, + additionalImports, + constructorAnnotations, + codec, + inclusiveDot + ) + + def compileVirtual( + content: String, + source: File, + sourceDirectory: File, + resultType: String, + formatterType: String, + scalaVersion: Option[String], + additionalImports: collection.Seq[String], + constructorAnnotations: collection.Seq[String], + codec: Codec, + inclusiveDot: Boolean + ): GeneratedSourceVirtual = { val (templateName, generatedSource) = generatedFileVirtual(source, sourceDirectory, inclusiveDot) val generated = parseAndGenerateCode( @@ -268,6 +314,29 @@ object TwirlCompiler { private def relativePath(file: File): String = new File(".").toURI.relativize(file.toURI).getPath + def parseAndGenerateCode( + templateName: Array[String], + content: Array[Byte], + codec: Codec, + relativePath: String, + resultType: String, + formatterType: String, + additionalImports: collection.Seq[String], + constructorAnnotations: collection.Seq[String], + inclusiveDot: Boolean + ): String = parseAndGenerateCode( + templateName, + content, + codec, + relativePath, + resultType, + formatterType, + None, + additionalImports, + constructorAnnotations, + inclusiveDot + ) + private def parseAndGenerateCode( templateName: Array[String], content: Array[Byte], @@ -275,11 +344,11 @@ object TwirlCompiler { relativePath: String, resultType: String, formatterType: String, - scalaVersion: String, + scalaVersion: Option[String], additionalImports: collection.Seq[String], constructorAnnotations: collection.Seq[String], inclusiveDot: Boolean - ) = { + ): String = { val templateParser = new TwirlParser(inclusiveDot) templateParser.parse(new String(content, codec.charSet)) match { case templateParser.Success(parsed: Template, rest) if rest.atEnd() => { @@ -459,6 +528,25 @@ object TwirlCompiler { } def generateCode( + packageName: String, + name: String, + root: Template, + resultType: String, + formatterType: String, + additionalImports: collection.Seq[String], + constructorAnnotations: collection.Seq[String] + ): collection.Seq[Any] = generateCode( + packageName, + name, + root, + resultType, + formatterType, + ScalaCompat(None), + additionalImports, + constructorAnnotations + ) + + private def generateCode( packageName: String, name: String, root: Template, @@ -519,7 +607,30 @@ package """ :+ packageName :+ """ templateImports.map(_.replace("%format%", extension)) } - private[compiler] def generateFinalTemplate( + def generateFinalTemplate( + relativePath: String, + contents: Array[Byte], + packageName: String, + name: String, + root: Template, + resultType: String, + formatterType: String, + additionalImports: collection.Seq[String], + constructorAnnotations: collection.Seq[String] + ): String = generateFinalTemplate( + relativePath, + contents, + packageName, + name, + root, + resultType, + formatterType, + ScalaCompat(None), + additionalImports, + constructorAnnotations + ) + + private def generateFinalTemplate( relativePath: String, contents: Array[Byte], packageName: String, @@ -561,6 +672,12 @@ package """ :+ packageName :+ """ } } + def getFunctionMapping( + signature: String, + returnType: String, + ): (String, String, String) = + getFunctionMapping(signature, returnType, ScalaCompat(None)) + private[compiler] def getFunctionMapping( signature: String, returnType: String, diff --git a/compiler/src/test/scala-2/play/twirl/compiler/test/Helper.scala b/compiler/src/test/scala-2/play/twirl/compiler/test/Helper.scala index c61b53d0..afd70e0f 100644 --- a/compiler/src/test/scala-2/play/twirl/compiler/test/Helper.scala +++ b/compiler/src/test/scala-2/play/twirl/compiler/test/Helper.scala @@ -6,6 +6,7 @@ package play.twirl.compiler package test import java.io._ +import play.twirl.parser.TwirlIO object Helper { case class CompilationError(message: String, line: Int, column: Int) extends RuntimeException(message) @@ -99,8 +100,11 @@ object Helper { sourceDir, generatedDir, "play.twirl.api.HtmlFormat", - scalaVersion, - additionalImports = TwirlCompiler.defaultImports(scalaVersion) ++ additionalImports + Option(scalaVersion), + additionalImports = TwirlCompiler.defaultImports(scalaVersion) ++ additionalImports, + constructorAnnotations = Nil, + codec = TwirlIO.defaultCodec, + inclusiveDot = false ) val mapper = GeneratedSource(generated) diff --git a/compiler/src/test/scala-3/play/twirl/compiler/test/Helper.scala b/compiler/src/test/scala-3/play/twirl/compiler/test/Helper.scala index 63d65117..75c96178 100644 --- a/compiler/src/test/scala-3/play/twirl/compiler/test/Helper.scala +++ b/compiler/src/test/scala-3/play/twirl/compiler/test/Helper.scala @@ -20,6 +20,7 @@ import dotty.tools.io.PlainDirectory import dotty.tools.io.Directory import dotty.tools.io.ClassPath import scala.jdk.CollectionConverters._ +import play.twirl.parser.TwirlIO object Helper { case class CompilationError(message: String, line: Int, column: Int) extends RuntimeException(message) @@ -65,8 +66,11 @@ object Helper { sourceDir, generatedDir, "play.twirl.api.HtmlFormat", - scalaVersion, - additionalImports = TwirlCompiler.defaultImports(scalaVersion) ++ additionalImports + Option(scalaVersion), + additionalImports = TwirlCompiler.defaultImports(scalaVersion) ++ additionalImports, + constructorAnnotations = Nil, + codec = TwirlIO.defaultCodec, + inclusiveDot = false ) val generated = generatedOpt.getOrElse { diff --git a/sbt-twirl/src/main/scala/play/twirl/sbt/TemplateCompiler.scala b/sbt-twirl/src/main/scala/play/twirl/sbt/TemplateCompiler.scala index 26155385..467d34ca 100644 --- a/sbt-twirl/src/main/scala/play/twirl/sbt/TemplateCompiler.scala +++ b/sbt-twirl/src/main/scala/play/twirl/sbt/TemplateCompiler.scala @@ -33,7 +33,7 @@ object TemplateCompiler { sourceDirectory, targetDirectory, format, - scalaVersion, + Some(scalaVersion), imports, constructorAnnotations, codec,