project/Pre213Preprocessor.scala (23 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * license agreements; and to You under the Apache License, version 2.0: * * https://www.apache.org/licenses/LICENSE-2.0 * * This file is part of the Apache Pekko project, which was derived from Akka. */ import sbt._ import Keys._ object Pre213Preprocessor extends AutoPlugin { val pre213Files = settingKey[Seq[String]]("files that should be edited for pre213 annotation") val pattern = """(?s)@pre213.*?@since213""".r override def projectSettings: Seq[Def.Setting[_]] = { Compile / sources := { if (scalaVersion.value.startsWith("3")) { val filter: File => Boolean = f => pre213Files.value.exists(suffix => f.getAbsolutePath.replace("\\", "//").endsWith(suffix)) (Compile / sources).value.map { s => if (filter(s)) { val data = IO.read(s) val targetFile = sourceManaged.value / s.getName val newData = pattern.replaceAllIn(data, "@since213") IO.write(targetFile, newData) targetFile } else s } } else (Compile / sources).value } } }