Skip to content

Commit

Permalink
[Blocked by Scala 3 Bug] Implement Scala 3 recompilation token (#1805)
Browse files Browse the repository at this point in the history
* Revert "Disable recompilation trigger functionality on Scala 3 completely due to bug scala/scala3#15976"

This reverts commit 2ab8bf4.

* use random token again. Waiting on usability fix for scala/scala3#18623 before merge

* CI workaround for scala/scala3#19745

* Due to Scala 3 bug scala/scala3#19745 remove `distage.plugins.{PluginDef,BootstrapPluginDef}` aliases on Scala 3
  • Loading branch information
neko-kai authored May 30, 2024
1 parent 1bd6caa commit 88f0860
Show file tree
Hide file tree
Showing 16 changed files with 33 additions and 68 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package izumi.distage.plugins.load

import io.github.classgraph.ClassGraph
import izumi.distage.plugins.{PluginBase, PluginConfig}
import izumi.distage.plugins.{PluginBase, PluginConfig, PluginDef}
import izumi.fundamentals.platform.cache.SyncCache
import izumi.fundamentals.reflection.TypeUtil

Expand All @@ -25,7 +25,7 @@ class PluginLoaderDefaultImpl extends PluginLoader {
val disabledPackages = config.packagesDisabled

val pluginBase = classOf[PluginBase]
val pluginDef = classOf[PluginDefType]
val pluginDef = classOf[PluginDef[?]]
val whitelistedClasses = Seq(pluginDef.getName)

def loadPkgs(pkgs: Seq[String]): Seq[PluginBase] = {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,18 @@ trait DistagePlugins {
type PluginBase = plugins.PluginBase
val PluginBase: plugins.PluginBase.type = plugins.PluginBase

type PluginDef = plugins.PluginDef
// Because of Scala 3 bug https://github.com/scala/scala3/issues/19745
// we can't use a type alias or export to alias PluginDef name anymore,
// use the longer package izumi.distage.plugins.PluginDef instead.
// type PluginDef[T] = plugins.PluginDef[T]

type BootstrapPlugin = plugins.BootstrapPlugin
val BootstrapPlugin: plugins.BootstrapPlugin.type = plugins.BootstrapPlugin

type BootstrapPluginDef = plugins.BootstrapPluginDef
// Because of Scala 3 bug https://github.com/scala/scala3/issues/19745
// we can't use a type alias or export to alias BootstrapPluginDef name anymore,
// use the longer package izumi.distage.plugins.BootstrapPluginDef instead.
// type BootstrapPluginDef[T] = plugins.BootstrapPluginDef[T]

type PluginLoader = load.PluginLoader
val PluginLoader: load.PluginLoader.type = load.PluginLoader
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,18 @@ package object plugins extends DistagePlugins {
override type PluginBase = izumi.distage.plugins.PluginBase
override val PluginBase: izumi.distage.plugins.PluginBase.type = izumi.distage.plugins.PluginBase

override type PluginDef = izumi.distage.plugins.PluginDef
// Because of Scala 3 bug https://github.com/scala/scala3/issues/19745
// we can't use a type alias or export to alias PluginDef name anymore,
// use the longer package izumi.distage.plugins.PluginDef instead.
// override type PluginDef[T] = izumi.distage.plugins.PluginDef[T]

override type BootstrapPlugin = izumi.distage.plugins.BootstrapPlugin
override val BootstrapPlugin: izumi.distage.plugins.BootstrapPlugin.type = izumi.distage.plugins.BootstrapPlugin

override type BootstrapPluginDef = izumi.distage.plugins.BootstrapPluginDef
// Because of Scala 3 bug https://github.com/scala/scala3/issues/19745
// we can't use a type alias or export to alias BootstrapPluginDef name anymore,
// use the longer package izumi.distage.plugins.BootstrapPluginDef instead.
// override type BootstrapPluginDef[T] = izumi.distage.plugins.BootstrapPluginDef[T]

override type PluginLoader = load.PluginLoader
override val PluginLoader: load.PluginLoader.type = load.PluginLoader
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ object ForcedRecompilationToken {
// TODO: research if caching typed trees optimization is possible and meaningful in Dotty
def materializeImpl[T](using quotes: Quotes): Expr[ForcedRecompilationToken[T]] = {
import quotes.reflect.*
val typeTree = ConstantType(StringConstant("abc"))
val typeTree = ConstantType(StringConstant(compilerLaunchId))
typeTree.asType.asInstanceOf[Type[T]] match {
case given Type[uuid] =>
'{ null.asInstanceOf[ForcedRecompilationToken[uuid]] }
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.github.pshirshov.test3.bootstrap

import distage.plugins.BootstrapPluginDef
import izumi.distage.config.ConfigModuleDef
import izumi.distage.model.definition.{Activation, BootstrapModule, Id}
import izumi.distage.model.provisioning.strategies.EffectStrategy
import izumi.distage.planning.solver.PlanSolver
import izumi.distage.plugins.BootstrapPluginDef

object BootstrapFixture3 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ import cats.effect.unsafe.IORuntime
import com.github.pshirshov.test.plugins.{StaticTestMainLogIO2, StaticTestRole}
import com.github.pshirshov.test3.plugins.Fixture3
import com.typesafe.config.ConfigFactory
import distage.plugins.{PluginBase, PluginDef}
import distage.{DIKey, Injector, Locator, LocatorRef}
import izumi.distage.framework.config.PlanningOptions
import izumi.distage.framework.services.RoleAppPlanner
import izumi.distage.model.PlannerInput
import izumi.distage.model.definition.{Activation, BootstrapModule, Lifecycle}
import izumi.distage.model.provisioning.IntegrationCheck
import izumi.distage.modules.DefaultModule
import izumi.distage.plugins.PluginConfig
import izumi.distage.plugins.{PluginBase, PluginConfig}
import izumi.distage.roles.DebugProperties
import izumi.distage.roles.test.fixtures.*
import izumi.distage.roles.test.fixtures.Fixture.*
Expand All @@ -39,7 +38,7 @@ class RoleAppTest extends AnyWordSpec with WithProperties {
"testservice.systemPropList.1" -> "222",
)

class XXX_TestWhiteboxProbe extends PluginDef {
class XXX_TestWhiteboxProbe extends izumi.distage.plugins.PluginDef {
val resources = new XXX_ResourceEffectsRecorder[IO]
private var locator0: LocatorRef = null
lazy val locator: Locator = locator0.get
Expand Down Expand Up @@ -90,7 +89,7 @@ class RoleAppTest extends AnyWordSpec with WithProperties {
new TestPluginCatsIO,
new AdaptedAutocloseablesCasePlugin,
probe,
new PluginDef {
new izumi.distage.plugins.PluginDef {
make[TestResource[IO]].from[IntegrationResource0[IO]]
many[TestResource[IO]]
.ref[TestResource[IO]]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package izumi.distage.testkit.autosets

import distage.plugins.{BootstrapPluginDef, PluginConfig, PluginDef}
import izumi.distage.model.planning.PlanningHook
import izumi.distage.planning.AutoSetHook
import izumi.distage.plugins.{BootstrapPluginDef, PluginConfig, PluginDef}
import izumi.distage.testkit.model.TestConfig
import izumi.distage.testkit.scalatest.Spec1
import izumi.fundamentals.platform.functional.Identity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package izumi.distage.testkit.distagesuite.generic

import distage.*
import distage.plugins.{PluginConfig, PluginDef}
import distage.plugins.PluginConfig
import izumi.distage.modules.DefaultModule
import izumi.distage.testkit.distagesuite.fixtures.*
import izumi.distage.testkit.distagesuite.generic.DistageTestExampleBase.*
Expand Down Expand Up @@ -92,7 +92,7 @@ object DistageTestExampleBase {
abstract class DistageTestExampleBase[F[_]: TagK: DefaultModule](implicit F: QuasiIO[F]) extends Spec1[F] with DistageMemoizeExample[F] {

override protected def config: TestConfig = super.config.copy(
pluginConfig = super.config.pluginConfig.enablePackage("xxx") ++ new PluginDef {
pluginConfig = super.config.pluginConfig.enablePackage("xxx") ++ new izumi.distage.plugins.PluginDef {
make[SetCounter]

make[SetElement1]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package izumi.distage.testkit.distagesuite.memoized

import distage.DIKey
import distage.plugins.PluginDef
import izumi.distage.model.definition.StandardAxis.Repo
import izumi.distage.model.providers.Functoid
import izumi.distage.testkit.distagesuite.memoized.MemoizationEnv.*
Expand Down Expand Up @@ -45,7 +44,7 @@ abstract class DistageMemoizationEnvsTest extends SpecZIO with AssertZIO {
1 -> Set(DIKey[MemoizedInstance], DIKey[MemoizedLevel1]),
2 -> Set(DIKey[MemoizedLevel2]),
),
pluginConfig = super.config.pluginConfig.enablePackage("izumi.distage.testkit.distagesuite") ++ new PluginDef {
pluginConfig = super.config.pluginConfig.enablePackage("izumi.distage.testkit.distagesuite") ++ new izumi.distage.plugins.PluginDef {
make[MemoizedInstance].from {
MemoizationEnv.makeInstance(MemoizationEnv.memoizedInstance)(MemoizationEnv.MemoizedInstance.apply)
}
Expand Down Expand Up @@ -97,7 +96,7 @@ class SameLevel_1_WithoutLastMemoizationLevel extends DistageMemoizationEnvsTest
memoizationRoots = Map(
1 -> Set(DIKey.get[MemoizedInstance], DIKey.get[MemoizedLevel1])
),
pluginConfig = super.config.pluginConfig overriddenBy new PluginDef {
pluginConfig = super.config.pluginConfig overriddenBy new izumi.distage.plugins.PluginDef {
make[MemoizedLevel2].from(MemoizedLevel2(UUID.randomUUID()))
},
activation = distage.Activation(Repo -> Repo.Prod),
Expand Down Expand Up @@ -132,7 +131,7 @@ class SameLevel_1_2_WithAdditionalLevel3 extends DistageMemoizationEnvsTest {
class SameLevel_1_WithModuleOverride extends DistageMemoizationEnvsTest {
override protected def config: TestConfig = {
super.config.copy(
pluginConfig = super.config.pluginConfig overriddenBy new PluginDef {
pluginConfig = super.config.pluginConfig overriddenBy new izumi.distage.plugins.PluginDef {
make[TestInstance].from(MemoizationEnv.anotherTestInstance)
}
)
Expand All @@ -154,7 +153,7 @@ class SameLevel_1_WithActivationsOverride extends DistageMemoizationEnvsTest {
trait DifferentLevelsWithLevel1 extends DistageMemoizationEnvsTest {
override protected def config: TestConfig = {
super.config.copy(
pluginConfig = super.config.pluginConfig overriddenBy new PluginDef {
pluginConfig = super.config.pluginConfig overriddenBy new izumi.distage.plugins.PluginDef {
make[MemoizedInstance].from(MemoizedInstance(UUID.randomUUID()))
make[MemoizedLevel1].from(MemoizedLevel1(UUID.randomUUID()))
make[MemoizedLevel2].from(MemoizedLevel2(UUID.randomUUID()))
Expand All @@ -173,7 +172,7 @@ class DifferentLevelsWithLevel1InstanceOverride1 extends DifferentLevelsWithLeve
class DifferentLevelsWithLevel1InstanceOverride2 extends DifferentLevelsWithLevel1 {
override protected def config: TestConfig = {
super.config.copy(
pluginConfig = super.config.pluginConfig overriddenBy new PluginDef {
pluginConfig = super.config.pluginConfig overriddenBy new izumi.distage.plugins.PluginDef {
make[MemoizedLevel2].from(MemoizedLevel2(UUID.randomUUID()))
}
)
Expand All @@ -187,7 +186,7 @@ class DifferentLevelsWithLevel1InstanceOverride2 extends DifferentLevelsWithLeve
class SameLevel_1_WithLevel2InstanceOverride extends DistageMemoizationEnvsTest {
override protected def config: TestConfig = {
super.config.copy(
pluginConfig = super.config.pluginConfig overriddenBy new PluginDef {
pluginConfig = super.config.pluginConfig overriddenBy new izumi.distage.plugins.PluginDef {
make[MemoizedLevel2].from(MemoizedLevel2(UUID.randomUUID()))
}
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package izumi.distage.testkit.distagesuite.tagged

import distage.DIKey
import distage.plugins.PluginDef
import izumi.distage.model.definition.StandardAxis.Repo
import izumi.distage.testkit.distagesuite.tagged.DistageTestTaggedAxesExampleBase.{DepsCounters, DummyDep, PrdDep}
import izumi.distage.testkit.model.TestConfig
Expand All @@ -15,7 +14,7 @@ abstract class DistageTestTaggedAxesExampleBase extends SpecZIO with AssertZIO {
Set(Repo.Prod) -> Set(DIKey[PrdDep]),
Set(Repo.Dummy) -> Set(DIKey[DummyDep]),
),
pluginConfig = super.config.pluginConfig.enablePackage("izumi.distage.testkit.distagesuite") ++ new PluginDef {
pluginConfig = super.config.pluginConfig.enablePackage("izumi.distage.testkit.distagesuite") ++ new izumi.distage.plugins.PluginDef {
make[PrdDep]
make[DummyDep]
make[DepsCounters]
Expand Down

0 comments on commit 88f0860

Please sign in to comment.