From 88f0860c723bf9e6b9bb0075fa0dff887a56af56 Mon Sep 17 00:00:00 2001 From: Kai <450507+neko-kai@users.noreply.github.com> Date: Thu, 30 May 2024 12:00:56 +0100 Subject: [PATCH] [Blocked by Scala 3 Bug] Implement Scala 3 recompilation token (#1805) * Revert "Disable recompilation trigger functionality on Scala 3 completely due to bug https://github.com/lampepfl/dotty/issues/15976" This reverts commit 2ab8bf4f389823a67935ff3c2c39adf0647f269c. * use random token again. Waiting on usability fix for https://github.com/lampepfl/dotty/issues/18623 before merge * CI workaround for https://github.com/lampepfl/dotty/issues/19745 * Due to Scala 3 bug https://github.com/scala/scala3/issues/19745 remove `distage.plugins.{PluginDef,BootstrapPluginDef}` aliases on Scala 3 --- .../load/PluginLoaderDefaultImpl.scala | 4 +-- .../izumi/distage/plugins/load/package.scala | 5 ---- .../distage/plugins/DistagePlugins.scala | 10 +++++-- .../scala-3/distage/plugins/package.scala | 10 +++++-- .../distage/plugins/BootstrapPluginDef.scala | 7 ----- .../plugins/ForcedRecompilationToken.scala | 2 +- .../izumi/distage/plugins/PluginDef.scala | 27 ------------------- .../izumi/distage/plugins/load/package.scala | 5 ---- .../distage/plugins/BootstrapPluginDef.scala | 0 .../izumi/distage/plugins/PluginDef.scala | 0 .../test3/bootstrap/BootstrapFixture3.scala | 2 +- .../distage/roles/test/RoleAppTest.scala | 7 +++-- .../testkit/autosets/AutosetTest.scala | 2 +- .../testkit/distagesuite/generic/tests.scala | 4 +-- .../memoized/DistageMemoizationEnvsTest.scala | 13 +++++---- .../DistageTestTaggedAxesExampleBase.scala | 3 +-- 16 files changed, 33 insertions(+), 68 deletions(-) delete mode 100644 distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/load/package.scala delete mode 100644 distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/BootstrapPluginDef.scala delete mode 100644 distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/PluginDef.scala delete mode 100644 distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/load/package.scala rename distage/distage-extension-plugins/src/main/{scala-2 => scala}/izumi/distage/plugins/BootstrapPluginDef.scala (100%) rename distage/distage-extension-plugins/src/main/{scala-2 => scala}/izumi/distage/plugins/PluginDef.scala (100%) diff --git a/distage/distage-extension-plugins/.jvm/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala b/distage/distage-extension-plugins/.jvm/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala index 9ae5d73aea..0f43b30c39 100644 --- a/distage/distage-extension-plugins/.jvm/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala +++ b/distage/distage-extension-plugins/.jvm/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala @@ -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 @@ -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] = { diff --git a/distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/load/package.scala b/distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/load/package.scala deleted file mode 100644 index 3420301d71..0000000000 --- a/distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/load/package.scala +++ /dev/null @@ -1,5 +0,0 @@ -package izumi.distage.plugins - -package object load { - private[load] type PluginDefType = PluginDef[?] -} diff --git a/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/DistagePlugins.scala b/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/DistagePlugins.scala index b4b425336d..35b5db123d 100644 --- a/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/DistagePlugins.scala +++ b/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/DistagePlugins.scala @@ -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 diff --git a/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/package.scala b/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/package.scala index 8817abf072..a67bcea64c 100644 --- a/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/package.scala +++ b/distage/distage-extension-plugins/src/main/scala-3/distage/plugins/package.scala @@ -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 diff --git a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/BootstrapPluginDef.scala b/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/BootstrapPluginDef.scala deleted file mode 100644 index 82474c3c8c..0000000000 --- a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/BootstrapPluginDef.scala +++ /dev/null @@ -1,7 +0,0 @@ -package izumi.distage.plugins - -import izumi.distage.model.definition.BootstrapModuleDef -import scala.annotation.unused - -/** @see [[izumi.distage.plugins.PluginDef]] */ -abstract class BootstrapPluginDef(implicit @unused recompilationToken: ForcedRecompilationToken[?]) extends BootstrapPlugin with BootstrapModuleDef diff --git a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/ForcedRecompilationToken.scala b/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/ForcedRecompilationToken.scala index 26f78abdf8..157af5af0b 100644 --- a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/ForcedRecompilationToken.scala +++ b/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/ForcedRecompilationToken.scala @@ -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]] } diff --git a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/PluginDef.scala b/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/PluginDef.scala deleted file mode 100644 index d6794ad57c..0000000000 --- a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/PluginDef.scala +++ /dev/null @@ -1,27 +0,0 @@ -package izumi.distage.plugins - -import izumi.distage.model.definition.ModuleDef -import scala.annotation.unused - -/** - * Use it to define Plugins using [[izumi.distage.model.definition.dsl.ModuleDefDSL]] syntax - * - * {{{ - * object MyPlugin extends PluginDef { - * include(myModule[F]) - * - * make[Xa[F]].from[Xa.Impl[F]] - * } - * }}} - * - * @note Since this is an abstract class, you cannot mix it with other classes or use it as a mixin. - * Instead, you may inherit from [[PluginBase]], which is a trait – but in that case compile-time checks will not - * re-run when the class is updated in that case. Alternatively, you may use [[izumi.distage.model.definition.dsl.IncludesDSL#include]] - * to compose modules as values instead of using inheritance. - * - * @param recompilationToken Makes compile-time checks re-run when the source code of this `PluginDef` is changed, if it's used in the checked role. - * - * @see [[https://izumi.7mind.io/distage/distage-framework#plugins Plugins]] - * @see [[https://izumi.7mind.io/distage/distage-framework#compile-time-checks Compile-time checks]] - */ -abstract class PluginDef(implicit @unused recompilationToken: ForcedRecompilationToken[?]) extends PluginBase with ModuleDef diff --git a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/load/package.scala b/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/load/package.scala deleted file mode 100644 index ab2df67c79..0000000000 --- a/distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/load/package.scala +++ /dev/null @@ -1,5 +0,0 @@ -package izumi.distage.plugins - -package object load { - private[load] type PluginDefType = PluginDef -} diff --git a/distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/BootstrapPluginDef.scala b/distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/BootstrapPluginDef.scala similarity index 100% rename from distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/BootstrapPluginDef.scala rename to distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/BootstrapPluginDef.scala diff --git a/distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/PluginDef.scala b/distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/PluginDef.scala similarity index 100% rename from distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/PluginDef.scala rename to distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/PluginDef.scala diff --git a/distage/distage-framework/.jvm/src/test/scala/com/github/pshirshov/test3/bootstrap/BootstrapFixture3.scala b/distage/distage-framework/.jvm/src/test/scala/com/github/pshirshov/test3/bootstrap/BootstrapFixture3.scala index 1cbf3ac065..67cb369db5 100644 --- a/distage/distage-framework/.jvm/src/test/scala/com/github/pshirshov/test3/bootstrap/BootstrapFixture3.scala +++ b/distage/distage-framework/.jvm/src/test/scala/com/github/pshirshov/test3/bootstrap/BootstrapFixture3.scala @@ -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 { diff --git a/distage/distage-framework/.jvm/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala b/distage/distage-framework/.jvm/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala index e7f30c8e08..721fe6bb88 100644 --- a/distage/distage-framework/.jvm/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala +++ b/distage/distage-framework/.jvm/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala @@ -5,7 +5,6 @@ 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 @@ -13,7 +12,7 @@ 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.* @@ -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 @@ -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]] diff --git a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/autosets/AutosetTest.scala b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/autosets/AutosetTest.scala index 308e5e350f..5a4c5908e9 100644 --- a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/autosets/AutosetTest.scala +++ b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/autosets/AutosetTest.scala @@ -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 diff --git a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/generic/tests.scala b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/generic/tests.scala index 636cd19e8b..7bdc827c56 100644 --- a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/generic/tests.scala +++ b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/generic/tests.scala @@ -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.* @@ -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] diff --git a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/memoized/DistageMemoizationEnvsTest.scala b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/memoized/DistageMemoizationEnvsTest.scala index 685b1354a9..20b065be21 100644 --- a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/memoized/DistageMemoizationEnvsTest.scala +++ b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/memoized/DistageMemoizationEnvsTest.scala @@ -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.* @@ -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) } @@ -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), @@ -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) } ) @@ -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())) @@ -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())) } ) @@ -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())) } ) diff --git a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/tagged/DistageTestTaggedAxesExampleBase.scala b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/tagged/DistageTestTaggedAxesExampleBase.scala index e31c89765c..117c9dc5cc 100644 --- a/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/tagged/DistageTestTaggedAxesExampleBase.scala +++ b/distage/distage-testkit-scalatest/src/test/scala/izumi/distage/testkit/distagesuite/tagged/DistageTestTaggedAxesExampleBase.scala @@ -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 @@ -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]