[2.x] refactor: Add tailrec annotation (#9591)

This commit is contained in:
kenji yoshida 2026-08-14 02:48:02 +09:00 committed by GitHub
parent 354dbf515b
commit d9f60b6cfd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 8 additions and 1 deletions

View File

@ -10,6 +10,7 @@ package sbt
import java.io.File
import java.nio.file.Path as NioPath
import java.net.URI
import scala.annotation.tailrec
// import Project._
import Keys.{
stateBuildStructure,
@ -616,6 +617,7 @@ trait ProjectExtra extends Scoped.Syntax:
projectRef: ProjectRef
): Seq[ProjectRef] = {
def dependencies(map: Map[ProjectRef, Seq[ProjectRef]], id: ProjectRef): Set[ProjectRef] = {
@tailrec
def helper(map: Map[ProjectRef, Seq[ProjectRef]], acc: Set[ProjectRef]): Set[ProjectRef] =
if (acc.exists(map.contains)) {
val (kept, rem) = map.partition { case (k, _) => acc(k) }

View File

@ -20,6 +20,7 @@ import java.io.File
import java.net.URI
import java.nio.file.{ Files, Paths }
import java.util.concurrent.TimeoutException
import scala.annotation.tailrec
import scala.concurrent.duration.*
import scala.util.{ Failure, Success }
@ -303,6 +304,7 @@ class BuildServerTest extends AbstractServerTest {
"diagnostics for Diagnostics.scala after a failed compile (#9345)"
)
@tailrec
def drainQueuedNotificationsAndFailOnForbiddenReset(): Unit =
svr.session.waitForNotificationMsg(Duration.Zero)(_ => true) match {
case Success(n) =>

View File

@ -32,7 +32,7 @@ import sbt.nio.file.{ **, FileTreeView }
import sbt.nio.file.syntax.*
import sbt.util.CacheImplicits
import scala.reflect.ClassTag
import scala.annotation.{ meta, StaticAnnotation }
import scala.annotation.{ meta, tailrec, StaticAnnotation }
import scala.collection.mutable
import scala.util.control.NonFatal
import sjsonnew.{ HashWriter, JsonFormat }
@ -329,6 +329,7 @@ object ActionCache:
)
/** Walks `t`'s cause chain for a `NoSuchFileException`, returning the missing file's path. */
@tailrec
private[sbt] def findMissingFile(t: Throwable): Option[String] =
t match
case null => None

View File

@ -11,6 +11,7 @@ package sbt.internal.util
import org.scalacheck.*
import Prop.*
import scala.annotation.tailrec
import scala.collection.mutable.HashSet
object DagSpecification extends Properties("Dag") {
@ -41,6 +42,7 @@ object DagSpecification extends Properties("Dag") {
private def isSet[T](c: Seq[T]) = Set(c*).size == c.size
private def dependenciesPrecedeNodes(sort: List[TestDag]) = {
val seen = new HashSet[TestDag]
@tailrec
def iterate(remaining: List[TestDag]): Boolean = {
remaining match {
case Nil => true