diff --git a/internal/zinc-core/src/main/scala/sbt/internal/inc/Analysis.scala b/internal/zinc-core/src/main/scala/sbt/internal/inc/Analysis.scala index 7be46d9f33..4218d3297c 100644 --- a/internal/zinc-core/src/main/scala/sbt/internal/inc/Analysis.scala +++ b/internal/zinc-core/src/main/scala/sbt/internal/inc/Analysis.scala @@ -98,13 +98,20 @@ object Analysis { def empty: Analysis = Empty - def summary(a: Analysis): String = { + case class Sources(java: Set[String], scala: Set[String]) + + def sources(a: Analysis): Sources = { def sourceFileForClass(className: String): VirtualFileRef = a.relations.definesClass(className).headOption.getOrElse { sys.error(s"Can't find source file for $className") } def isJavaClass(className: String) = sourceFileForClass(className).id.endsWith(".java") val (j, s) = a.apis.allInternalClasses.partition(isJavaClass) + Sources(j.toSet, s.toSet) + } + + def summary(a: Analysis): String = { + val Sources(j, s) = sources(a) val c = a.stamps.allProducts val ext = a.apis.allExternals val jars = a.relations.allLibraryDeps.filter(_.id.endsWith(".jar")) diff --git a/internal/zinc-core/src/main/scala/sbt/internal/inc/IncrementalCommon.scala b/internal/zinc-core/src/main/scala/sbt/internal/inc/IncrementalCommon.scala index dd14826794..9803ccdd6a 100644 --- a/internal/zinc-core/src/main/scala/sbt/internal/inc/IncrementalCommon.scala +++ b/internal/zinc-core/src/main/scala/sbt/internal/inc/IncrementalCommon.scala @@ -188,8 +188,10 @@ private[inc] abstract class IncrementalCommon( val continue = nextInvalidations.nonEmpty && lookup.shouldDoIncrementalCompilation(nextInvalidations, analysis) - // If we're completing the cycle, then mergeAndInvalidate has already been called - if (!completingCycle) { + val hasScala = Analysis.sources(partialAnalysis).scala.nonEmpty + + // If we're completing the cycle and we had scala sources, then mergeAndInvalidate has already been called + if (!completingCycle || !hasScala) { registerCycle(recompiledClasses, newApiChanges, nextInvalidations, continue) } CompileCycleResult(continue, nextInvalidations, analysis)