Skip to content

Commit 2ab8bf4

Browse files
committed
Disable recompilation trigger functionality on Scala 3 completely due to bug scala/scala3#15976
1 parent d32483b commit 2ab8bf4

File tree

14 files changed

+83
-9
lines changed

14 files changed

+83
-9
lines changed

distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/ForcedRecompilationToken.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ final abstract class ForcedRecompilationToken[T]
2727
object ForcedRecompilationToken {
2828
implicit def materialize[T]: ForcedRecompilationToken[T] = macro UniqueRecompilationTokenMacro.whiteboxMaterializeImpl
2929

30+
object disabled {
31+
implicit def disable: ForcedRecompilationToken[Unit] = null
32+
}
33+
3034
object UniqueRecompilationTokenMacro {
3135
final val compilerLaunchId = java.util.UUID.randomUUID().toString
3236
var cachedTypedTree: Universe#Tree = null
@@ -68,10 +72,6 @@ object ForcedRecompilationToken {
6872
}
6973
}
7074

71-
object disabled {
72-
implicit def disable: ForcedRecompilationToken[Unit] = null
73-
}
74-
7575
// an implementation for better days!
7676
// As of IDEA 2020.3 EAP, Intellij "Incrementality type: IDEA" doesn't regard changes in singleton types as "real",
7777
// so instead we have to use the trick above to encode the UUID as Eithers.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package izumi.distage.plugins
2+
3+
package object load {
4+
private[load] type PluginDefType = PluginDef[?]
5+
}

distage/distage-extension-plugins/src/main/scala/distage/plugins/DistagePlugins.scala renamed to distage/distage-extension-plugins/src/main/scala-3/distage/plugins/DistagePlugins.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ trait DistagePlugins {
88
type PluginBase = plugins.PluginBase
99
val PluginBase: plugins.PluginBase.type = plugins.PluginBase
1010

11-
type PluginDef[T] = plugins.PluginDef[T]
11+
type PluginDef = plugins.PluginDef
1212

1313
type BootstrapPlugin = plugins.BootstrapPlugin
1414
val BootstrapPlugin: plugins.BootstrapPlugin.type = plugins.BootstrapPlugin
1515

16-
type BootstrapPluginDef[T] = plugins.BootstrapPluginDef[T]
16+
type BootstrapPluginDef = plugins.BootstrapPluginDef
1717

1818
type PluginLoader = load.PluginLoader
1919
val PluginLoader: load.PluginLoader.type = load.PluginLoader

distage/distage-extension-plugins/src/main/scala/distage/plugins/package.scala renamed to distage/distage-extension-plugins/src/main/scala-3/distage/plugins/package.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ package object plugins extends DistagePlugins {
77
override type PluginBase = izumi.distage.plugins.PluginBase
88
override val PluginBase: izumi.distage.plugins.PluginBase.type = izumi.distage.plugins.PluginBase
99

10-
override type PluginDef[T] = izumi.distage.plugins.PluginDef[T]
10+
override type PluginDef = izumi.distage.plugins.PluginDef
1111

1212
override type BootstrapPlugin = izumi.distage.plugins.BootstrapPlugin
1313
override val BootstrapPlugin: izumi.distage.plugins.BootstrapPlugin.type = izumi.distage.plugins.BootstrapPlugin
1414

15-
override type BootstrapPluginDef[T] = izumi.distage.plugins.BootstrapPluginDef[T]
15+
override type BootstrapPluginDef = izumi.distage.plugins.BootstrapPluginDef
1616

1717
override type PluginLoader = load.PluginLoader
1818
override val PluginLoader: load.PluginLoader.type = load.PluginLoader
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package izumi.distage.plugins
2+
3+
import izumi.distage.model.definition.BootstrapModuleDef
4+
import scala.annotation.unused
5+
6+
/** @see [[izumi.distage.plugins.PluginDef]] */
7+
abstract class BootstrapPluginDef(implicit @unused recompilationToken: ForcedRecompilationToken[?]) extends BootstrapPlugin with BootstrapModuleDef
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
package izumi.distage.plugins
22

3+
import scala.compiletime.error
34

45
trait PluginConfigStatic {
6+
/** Scan the specified package *at compile-time* for classes and objects that inherit [[PluginBase]]
7+
*
8+
* WARN: may interact badly with incremental compilation
9+
* WARN: will _not_ find plugins defined in the current module, only those defined in dependency modules
10+
* (similarly to how you cannot call Scala macros defined in the current module)
11+
*/
12+
inline def compileTime(pluginsPackage: String): PluginConfig = error("unimplemented")
513

14+
/** Scan the the current source file's package *at compile-time* for classes and objects that inherit [[PluginBase]]
15+
*
16+
* WARN: may interact badly with incremental compilation
17+
* WARN: will _not_ find plugins defined in the current module, only those defined in dependency modules
18+
* (similarly to how you cannot call Scala macros defined in the current module)
19+
*/
20+
inline def compileTimeThisPkg: PluginConfig = error("unimplemented")
621
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package izumi.distage.plugins
2+
3+
import izumi.distage.model.definition.ModuleDef
4+
import scala.annotation.unused
5+
6+
/**
7+
* Use it to define Plugins using [[izumi.distage.model.definition.dsl.ModuleDefDSL]] syntax
8+
*
9+
* {{{
10+
* object MyPlugin extends PluginDef {
11+
* include(myModule[F])
12+
*
13+
* make[Xa[F]].from[Xa.Impl[F]]
14+
* }
15+
* }}}
16+
*
17+
* @note Since this is an abstract class, you cannot mix it with other classes or use it as a mixin.
18+
* Instead, you may inherit from [[PluginBase]], which is a trait – but in that case compile-time checks will not
19+
* re-run when the class is updated in that case. Alternatively, you may use [[izumi.distage.model.definition.dsl.IncludesDSL#include]]
20+
* to compose modules as values instead of using inheritance.
21+
*
22+
* @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.
23+
*
24+
* @see [[https://izumi.7mind.io/distage/distage-framework#plugins Plugins]]
25+
* @see [[https://izumi.7mind.io/distage/distage-framework#compile-time-checks Compile-time checks]]
26+
*/
27+
abstract class PluginDef(implicit @unused recompilationToken: ForcedRecompilationToken[?]) extends PluginBase with ModuleDef

distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/StaticPluginLoader.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package izumi.distage.plugins
22

3+
import scala.compiletime.error
4+
35
/** Scan the specified package *at compile-time* for classes and objects that inherit [[PluginBase]]
46
*
57
* WARN: may interact badly with incremental compilation
@@ -10,4 +12,6 @@ package izumi.distage.plugins
1012
*/
1113
object StaticPluginLoader {
1214

15+
inline def scanCompileTime(pluginsPackage: String): List[PluginBase] = error("unimplemented")
16+
1317
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package izumi.distage.plugins
2+
3+
package object load {
4+
private[load] type PluginDefType = PluginDef
5+
}

distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class PluginLoaderDefaultImpl extends PluginLoader {
2525
val disabledPackages = config.packagesDisabled
2626

2727
val pluginBase = classOf[PluginBase]
28-
val pluginDef = classOf[PluginDef[?]]
28+
val pluginDef = classOf[PluginDefType]
2929
val whitelistedClasses = Seq(pluginDef.getName)
3030

3131
def loadPkgs(pkgs: Seq[String]): Seq[PluginBase] = {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.github.pshirshov.test.sneaky
2+
3+
import izumi.distage.model.definition.ModuleDef
4+
import izumi.distage.plugins.{ForcedRecompilationToken, PluginBase}
5+
import izumi.fundamentals.platform.build.ExposedTestScope
6+
7+
/**
8+
* This is just to verify that plugin enumerator picks up transitively inherited plugins
9+
*/
10+
@ExposedTestScope
11+
abstract class SneakyPlugin(implicit val ev: ForcedRecompilationToken[?]) extends PluginBase with ModuleDef

0 commit comments

Comments
 (0)