Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions backend/src/main/scala/bloop/BloopClassFileManager.scala
Original file line number Diff line number Diff line change
Expand Up @@ -180,14 +180,21 @@ final class BloopClassFileManager(
// invalidations can happen in both paths, no-op if missing
allInvalidatedClassFilesForProject.-=(generatedClassFile)
allInvalidatedClassFilesForProject.-=(rebasedClassFile)
supportedCompileProducts.foreach { supportedProductSuffix =>
val productName = rebasedClassFile

def productFile(classFile: File, supportedProductSuffix: String) = {
val productName = classFile
.getName()
.stripSuffix(".class") + supportedProductSuffix
val productAssociatedToClassFile =
new File(rebasedClassFile.getParentFile, productName)
if (productAssociatedToClassFile.exists())
allInvalidatedExtraCompileProducts.-=(productAssociatedToClassFile)
new File(classFile.getParentFile, productName)
}
supportedCompileProducts.foreach { supportedProductSuffix =>
val generatedProductName = productFile(generatedClassFile, supportedProductSuffix)
val rebasedProductName = productFile(rebasedClassFile, supportedProductSuffix)

if (generatedProductName.exists() || rebasedProductName.exists()) {
allInvalidatedExtraCompileProducts.-=(generatedProductName)
allInvalidatedExtraCompileProducts.-=(rebasedProductName)
}
}
}

Expand Down
32 changes: 32 additions & 0 deletions frontend/src/test/scala/bloop/BaseCompileSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,38 @@ abstract class BaseCompileSpec extends bloop.testing.BaseSuite {
}
}

test(s"compile scala 3 build incrementally") {
TestUtil.withinWorkspace { workspace =>
object Sources {
val `A.scala` =
"""/A.scala
|class A { def a = 1 }
""".stripMargin

val `A2.scala` =
"""/A.scala
|class A { def a = 2 }
""".stripMargin
}

val logger = new RecordingLogger(ansiCodesSupported = false)
val `A` = TestProject(workspace, "a", List(Sources.`A.scala`), scalaVersion = Some("3.1.1"))
val projects = List(`A`)
val state = loadState(workspace, projects, logger)
val compiledState = state.compile(`A`)
assertExitStatus(compiledState, ExitStatus.Ok)
assertValidCompilationState(compiledState, projects)

assertIsFile(writeFile(`A`.srcFor("A.scala"), Sources.`A2.scala`))

val secondCompiledState = compiledState.compile(`A`)
assertExitStatus(secondCompiledState, ExitStatus.Ok)
assertSuccessfulCompilation(secondCompiledState, projects, isNoOp = false)
assertValidCompilationState(secondCompiledState, projects)
assertSameExternalClassesDirs(compiledState, secondCompiledState, projects)
}
}

test("compile project / clean / compile it again") {
TestUtil.withinWorkspace { workspace =>
val sources = List(
Expand Down
1 change: 0 additions & 1 deletion frontend/src/test/scala/bloop/testing/BaseSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,6 @@ abstract class BaseSuite extends TestSuite with BloopHelpers {
val stamps = analysis.readStamps
assert(stamps.getAllProductStamps.asScala.nonEmpty)
assert(stamps.getAllSourceStamps.asScala.nonEmpty)
//assert(stamps.getAllBinaryStamps.asScala.nonEmpty)

assert(takeDirectorySnapshot(latestResult.classesDir).nonEmpty)
val projectClassesDir =
Expand Down
7 changes: 6 additions & 1 deletion frontend/src/test/scala/bloop/util/TestProject.scala
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,12 @@ abstract class BaseTestProject {
val version = scalaVersion.getOrElse(Properties.versionNumberString)

val finalScalaOrg = scalaOrg.getOrElse("org.scala-lang")
val finalScalaCompiler = scalaCompiler.getOrElse("scala-compiler")
val finalScalaCompiler = scalaCompiler.getOrElse {
if (version.startsWith("3."))
"scala3-compiler_3"
else
"scala-compiler"
}
val instance =
mkScalaInstance(finalScalaOrg, finalScalaCompiler, scalaVersion, jars.toList, NoopLogger)

Expand Down