mirror of https://github.com/sbt/sbt.git
Merge pull request #2637 from eed3si9n/wip/recompile_on_macro_log
Inform the build user about macro recompilation
This commit is contained in:
commit
18568dd6a9
|
|
@ -23,7 +23,11 @@ object Incremental {
|
||||||
class PrefixingLogger(val prefix: String)(orig: Logger) extends Logger {
|
class PrefixingLogger(val prefix: String)(orig: Logger) extends Logger {
|
||||||
def trace(t: => Throwable): Unit = orig.trace(t)
|
def trace(t: => Throwable): Unit = orig.trace(t)
|
||||||
def success(message: => String): Unit = orig.success(message)
|
def success(message: => String): Unit = orig.success(message)
|
||||||
def log(level: sbt.Level.Value, message: => String): Unit = orig.log(level, message.replaceAll("(?m)^", prefix))
|
def log(level: sbt.Level.Value, message: => String): Unit =
|
||||||
|
level match {
|
||||||
|
case Level.Debug => orig.log(level, message.replaceAll("(?m)^", prefix))
|
||||||
|
case _ => orig.log(level, message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ import xsbt.api.APIUtil
|
||||||
private[inc] class MemberRefInvalidator(log: Logger) {
|
private[inc] class MemberRefInvalidator(log: Logger) {
|
||||||
def get[T](memberRef: Relation[File, T], usedNames: Relation[File, String], apiChange: APIChange[_]): T => Set[File] = apiChange match {
|
def get[T](memberRef: Relation[File, T], usedNames: Relation[File, String], apiChange: APIChange[_]): T => Set[File] = apiChange match {
|
||||||
case _: APIChangeDueToMacroDefinition[_] =>
|
case _: APIChangeDueToMacroDefinition[_] =>
|
||||||
new InvalidateUnconditionally(memberRef)
|
new InvalidateDueToMacroDefinition(memberRef)
|
||||||
case NamesChange(_, modifiedNames) if modifiedNames.implicitNames.nonEmpty =>
|
case NamesChange(_, modifiedNames) if modifiedNames.implicitNames.nonEmpty =>
|
||||||
new InvalidateUnconditionally(memberRef)
|
new InvalidateUnconditionally(memberRef)
|
||||||
case NamesChange(modifiedSrcFile, modifiedNames) =>
|
case NamesChange(modifiedSrcFile, modifiedNames) =>
|
||||||
|
|
@ -79,18 +79,31 @@ private[inc] class MemberRefInvalidator(log: Logger) {
|
||||||
"MemberReferenceInvalidator.get should be called when name hashing is enabled " +
|
"MemberReferenceInvalidator.get should be called when name hashing is enabled " +
|
||||||
"and in that case we shouldn't have SourceAPIChange as an api change."
|
"and in that case we shouldn't have SourceAPIChange as an api change."
|
||||||
|
|
||||||
|
private class InvalidateDueToMacroDefinition[T](memberRef: Relation[File, T]) extends (T => Set[File]) {
|
||||||
|
def apply(from: T): Set[File] = {
|
||||||
|
val invalidated = memberRef.reverse(from)
|
||||||
|
if (invalidated.nonEmpty) {
|
||||||
|
log.info(s"Because $from contains a macro definition, the following dependencies are invalidated unconditionally:\n" +
|
||||||
|
formatInvalidated(invalidated))
|
||||||
|
}
|
||||||
|
invalidated
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class InvalidateUnconditionally[T](memberRef: Relation[File, T]) extends (T => Set[File]) {
|
private class InvalidateUnconditionally[T](memberRef: Relation[File, T]) extends (T => Set[File]) {
|
||||||
def apply(from: T): Set[File] = {
|
def apply(from: T): Set[File] = {
|
||||||
val invalidated = memberRef.reverse(from)
|
val invalidated = memberRef.reverse(from)
|
||||||
if (invalidated.nonEmpty)
|
if (invalidated.nonEmpty) {
|
||||||
log.debug(s"The following member ref dependencies of $from are invalidated:\n" +
|
log.debug(s"The following member ref dependencies of $from are invalidated:\n" +
|
||||||
formatInvalidated(invalidated))
|
formatInvalidated(invalidated))
|
||||||
|
}
|
||||||
invalidated
|
invalidated
|
||||||
}
|
}
|
||||||
private def formatInvalidated(invalidated: Set[File]): String = {
|
}
|
||||||
val sortedFiles = invalidated.toSeq.sortBy(_.getAbsolutePath)
|
|
||||||
sortedFiles.map(file => "\t" + file).mkString("\n")
|
private def formatInvalidated(invalidated: Set[File]): String = {
|
||||||
}
|
val sortedFiles = invalidated.toSeq.sortBy(_.getAbsolutePath)
|
||||||
|
sortedFiles.map(file => "\t" + file).mkString("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
private class NameHashFilteredInvalidator[T](
|
private class NameHashFilteredInvalidator[T](
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue