pekko/project/ProjectFileIgnoreSupport.scala
Andrea Peruffo da70e0ccd4
Scala 3 cross compatible akka-actor / akka-testkit / akka-actor-tests (#29956)
* Remove @switch when it doesn't take effect
* Use ActorRef.noSender
* Minor tweaks to SchedulerSpec
* Disambiguate TypedActor for Scala 3
* Bump ScalaTest to a version compatible with Scala 3
* Bump ScalaCheck
* Disambiguate Event in SupervisorHierarchySpec
* Scala 3 compatible EventBusSpec
* Prevent private unused variables to be erased by Scala 3
* Bump mockito
* Explicit actorRef2Scala import
* restore original .scalafix.conf
* Scala 3 compatible tailrec
* Reminder to re add switch annotation in case
* Move to nowarn instead of silencer
* Bump to Scala 2.12.13
* Cross compatible annotations
* fix docs generation
* adapt the build for Scala 3
* fix errors but bus
* remove more SerialVersion from trait
* scalacheck only from scalatest
* cross-compile akka-actor-tests
* restore cross-compilation
* early initializers workaround
* scalacheck switch
* cross compatible FSM.State class
* cross compatible LARS spec
* Change results to pass LineNumberSpec
* fix stackoverflow in AsyncDnsResolverIntegrationSpec
* FSM.State unapply
* fix Scala 2.13 mima
* SerialVersionRemover compiler plugin
* removed unused nowarns
2021-02-01 16:38:29 +01:00

90 lines
2.9 KiB
Scala

/*
* Copyright (C) 2019-2021 Lightbend Inc. <https://www.lightbend.com>
*/
package akka
import java.io.File
import com.typesafe.config.ConfigFactory
import sbt.internal.sbtscalafix.Compat
class ProjectFileIgnoreSupport(ignoreConfigFile: File, descriptor: String) {
private val stdoutLogger = Compat.ConsoleLogger(System.out)
private val javaSourceDirectories = Set("java", Jdk9.JAVA_SOURCE_DIRECTORY, Jdk9.JAVA_TEST_SOURCE_DIRECTORY)
private val scalaSourceDirectories = Set("scala", Jdk9.SCALA_SOURCE_DIRECTORY, Jdk9.SCALA_TEST_SOURCE_DIRECTORY)
private lazy val ignoreConfig = {
require(
ignoreConfigFile.exists(),
s"Expected ignore configuration for $descriptor at ${ignoreConfigFile.getAbsolutePath} but was missing")
ConfigFactory.parseFile(ignoreConfigFile)
}
private lazy val ignoredFiles: Set[String] = {
import scala.collection.JavaConverters._
stdoutLogger.debug(s"Loading ignored-files from $ignoreConfigFile:[${ignoreConfig.origin().url().toURI.getPath}]")
ignoreConfig.getStringList("ignored-files").asScala.toSet
}
private lazy val ignoredPackages: Set[String] = {
import scala.collection.JavaConverters._
stdoutLogger.debug(
s"Loading ignored-packages from $ignoreConfigFile:[${ignoreConfig.origin().url().toURI.getPath}]")
ignoreConfig.getStringList("ignored-packages").asScala.toSet
}
def isIgnoredByFileOrPackages(file: File): Boolean =
isIgnoredByFile(file) || isIgnoredByPackages(file)
private def isIgnoredByFile(file: File): Boolean = {
val ignoredByFile = ignoredFiles(file.getName)
if (ignoredByFile) {
stdoutLogger.debug(s"$descriptor ignored file with file name:${file.getName} file:[${file.toPath}]")
}
ignoredByFile
}
private def isIgnoredByPackages(file: File): Boolean = {
val ignoredByPackages = ignoredPackages.exists(pkg => {
getPackageName(file.toURI.toString) match {
case Some(packageName) =>
val ignored = packageName.startsWith(pkg)
if (ignored) {
stdoutLogger.debug(
s"$descriptor ignored file with pkg:$pkg for package:$packageName file:[${file.toPath}] ")
}
ignored
case None => false
}
})
ignoredByPackages
}
private def getPackageName(fileName: String): Option[String] = {
def getPackageName0(sourceDirectories: Set[String]): String = {
import java.io.{ File => JFile }
val packageName = fileName
.split(JFile.separatorChar)
.dropWhile(part => !sourceDirectories(part))
.drop(1)
.dropRight(1)
.mkString(".")
packageName
}
fileName.split('.').lastOption match {
case Some(fileType) =>
fileType match {
case "java" =>
Option(getPackageName0(javaSourceDirectories))
case "scala" =>
Option(getPackageName0(scalaSourceDirectories))
case _ => None
}
case None => None
}
}
}