Skip to content

Commit 5fbea19

Browse files
committed
0.9.11
- feat: include Scala-version-specific resources, not just Scala sources; - feat: inclusion of Scala-version-specific Scala sources and resources is idempotent and permanent now; - feat: include Scala-version-specific Scala sources and resources in the mixed project too; - cleanup;
1 parent 10ca0f8 commit 5fbea19

14 files changed

Lines changed: 150 additions & 125 deletions

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
## [0.9.11] - 2025-09-11
10+
- feat: include Scala-version-specific resources, not just Scala sources;
11+
- feat: inclusion of Scala-version-specific Scala sources and resources is idempotent and permanent now;
12+
- feat: include Scala-version-specific Scala sources and resources in the mixed project too;
13+
- cleanup;
14+
915
## [0.9.10] - 2025-09-10
1016
- feat: fully shared code in the mixed project root;
1117
- chore: Scala 3.7.3;

README.adoc

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
:toc: preamble
55
:icons: font
66
// INCLUDED ATTRIBUTES
7-
:version-plugin: 0.9.10
7+
:version-plugin: 0.9.11
88
:version-gradle: 9.1.0-rc-3
99
:version-scala: 3.7.3
1010
:version-scala-213: 2.13.16
@@ -78,8 +78,8 @@ Plugin:
7878
- for `Scala.js`, retrieves and installs the configured version of https://nodejs.org/[Node.js];
7979
- for `Scala.js`, installs the configured `Node.js` modules using `npm`;
8080
- augments the `test` task to work with sbt-enabled test frameworks;
81-
- includes sources shared between backends;
82-
- includes sources for specific Scala version;
81+
- includes sources and resources shared between backends;
82+
- includes sources and resources for specific Scala version;
8383
- configures project artifacts to include shared code when needed;
8484
- configures names of the project artifact in accordance with the accepted conventions;
8585
- exposes, via `scalaBackend` extension,
@@ -194,14 +194,23 @@ for Scala version `x.y.z`, additional Scala source roots are:
194194

195195
- `scala-x.y.z`;
196196
- `scala-x.y`;
197-
- `scala-x`;
197+
- `scala-x`;.
198198

199-
Additional sources are included both in Scala compilation and archives that package Scala sources.
199+
Similarly, alongside the usual resource root `resources`,
200+
as in `src/main/resources` and `src/test/resources`,
201+
plugin includes resources from resource roots specific to the Scala version in use;
202+
for Scala version `x.y.z`, additional resource roots are:
203+
204+
- `resources-x.y.z`;
205+
- `resources-x.y`;
206+
- `resources-x`.
207+
208+
Additional Scala sources and resources are included both in Scala compilation and archives that package Scala sources.
200209

201210
This applies to Scala sources shared between the backends too.
202211

203-
Since only sources appropriate to the Scala version in use are added,
204-
to work on the version-specific sources in the IDE,
212+
Since only sources and resources appropriate to the Scala version in use are added,
213+
to work on the version-specific sources and resources in the IDE,
205214
you need to set the Gradle property that selects the Scala version
206215
and re-load the project in the IDE.
207216

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ plugins {
22
id 'com.github.ben-manes.versions' version '0.52.0'
33
id 'scala'
44
id 'signing'
5-
id 'org.podval.tools.scalajs' version '0.9.9'
5+
id 'org.podval.tools.scalajs' version '0.9.10'
66
id 'com.gradle.plugin-publish' version '2.0.0'
77
}
88

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
org.podval.tools.backend = JVM
2-
version_plugin = 0.9.10
2+
version_plugin = 0.9.11
33
version_gradle = 9.1.0-rc-3
44
version_scala = 3.7.3
55
version_scala_213 = 2.13.16

src/main/scala/org/podval/tools/backend/BackendExtension.scala

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package org.podval.tools.backend
22

33
import groovy.lang.Closure
44
import org.gradle.api.Project
5-
import org.podval.tools.build.{ScalaBackend, ScalaDependency, ScalaLibrary, ScalaVersion, Version}
6-
import org.podval.tools.gradle.ScalaExtension
5+
import org.podval.tools.build.{ScalaBackend, ScalaDependency, ScalaLibrary, Version}
76
import org.podval.tools.nonjvm.NonJvmBackend
87
import org.podval.tools.test.framework.Framework
98
import javax.inject.Inject
@@ -32,15 +31,7 @@ abstract class BackendExtension @Inject(
3231

3332
final lazy val getScalaLibrary: ScalaLibrary =
3433
val result: ScalaLibrary = ScalaLibrary.fromImplementationConfiguration(project)
35-
36-
val scalaVersion: ScalaVersion = ScalaExtension
37-
.findScalaVersion(project)
38-
.getOrElse(error(
39-
s"""Scala version data is not supported when Scala version is inferred from the Scala library dependency;
40-
|set Scala version on the Scala plugin's extension instead: `scala.scalaVersion=...`""".stripMargin
41-
))
42-
43-
require(result.scalaVersion == scalaVersion)
34+
require(result.scalaVersion == getScalaVersionFromScalaExtension)
4435
result
4536

4637
def getPluginScalaBinaryVersion: Version = getPluginScalaLibrary.scalaVersion.binaryVersionSuffix
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package org.podval.tools.backend
22

33
import org.gradle.api.Project
4+
import org.podval.tools.gradle.Sources
45

56
abstract class BackendProject(project: Project) extends Logging(project):
67
def apply(): Unit
8+
9+
final def addVersionSpecificSources(): Unit = Sources.addVersionSpecific(project, getScalaVersionFromScalaExtension)

src/main/scala/org/podval/tools/backend/Logging.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.podval.tools.backend
22

33
import org.gradle.api.{GradleException, Project}
4+
import org.podval.tools.build.ScalaVersion
5+
import org.podval.tools.gradle.ScalaExtension
46
import org.podval.tools.platform.IntelliJIdea
57

68
abstract class Logging(project: Project) extends WithProject(project):
@@ -15,3 +17,10 @@ abstract class Logging(project: Project) extends WithProject(project):
1517

1618
private def pluginMessage(message: String): String =
1719
s"Plugin 'org.podval.tools.scalajs' in $project: $message."
20+
21+
final protected def getScalaVersionFromScalaExtension: ScalaVersion = ScalaExtension
22+
.findScalaVersion(project)
23+
.getOrElse(error(
24+
s"""Scala version data is not supported when Scala version is inferred from the Scala library dependency;
25+
|set Scala version on the Scala plugin's extension instead: `scala.scalaVersion=...`""".stripMargin
26+
))

src/main/scala/org/podval/tools/backend/MixedProject.scala

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,14 @@ final class MixedProject private(project: Project, backends: Set[ScalaBackend])
7777
override def apply(): Unit =
7878
announce(s"using Scala backends ${ScalaBackend.names(pojectsWithBackend.map(_.backend))}")
7979

80+
// Disable tasks.
81+
Set(
82+
classOf[SourceTask],
83+
classOf[AbstractArchiveTask]
84+
)
85+
.foreach(Tasks.disable(project, _))
86+
8087
// Apply plugin to subprojects.
8188
(pojectsWithBackend ++ sharedProjects).foreach(_.project.getPluginManager.apply(classOf[BackendPlugin]))
8289

83-
// Disable tasks.
84-
Tasks.disable(project, classOf[SourceTask])
85-
Tasks.disable(project, classOf[AbstractArchiveTask])
90+
project.afterEvaluate((_: Project) => addVersionSpecificSources())

src/main/scala/org/podval/tools/backend/SharedProject.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.podval.tools.backend
22

33
import org.gradle.api.{Project, Task}
44
import org.podval.tools.build.ScalaBackend
5-
import org.podval.tools.gradle.Tasks
5+
import org.podval.tools.gradle.{Projects, Tasks}
66

77
final class SharedProject(
88
project: Project,
@@ -13,7 +13,11 @@ final class SharedProject(
1313
override def apply(): Unit =
1414
announce(s"code shared between backends ${ScalaBackend.names(backends)}")
1515

16-
setScalaVersionFromParentAndAddVersionSpecificSources()
17-
1816
// Disable all tasks.
1917
Tasks.disable(project, classOf[Task])
18+
19+
// Set Scala version from parent.
20+
setScalaVersionFromParent(Projects.parent(project).get)
21+
22+
// Add version-specific sources.
23+
project.afterEvaluate((_: Project) => addVersionSpecificSources())

src/main/scala/org/podval/tools/backend/SingleBackendProject.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package org.podval.tools.backend
33
import org.gradle.api.Project
44
import org.gradle.api.plugins.jvm.internal.JvmPluginServices
55
import org.podval.tools.build.ScalaBackend
6-
import org.podval.tools.gradle.Sources
6+
import org.podval.tools.gradle.{Projects, Sources}
77
import org.podval.tools.platform.IntelliJIdea
88

99
final class SingleBackendProject(
@@ -26,14 +26,17 @@ final class SingleBackendProject(
2626
isRunningInIntelliJ
2727
)
2828

29-
setScalaVersionFromParentAndAddVersionSpecificSources()
29+
// Set Scala version from parent.
30+
Projects.parent(project).foreach(setScalaVersionFromParent)
31+
3032
backend.apply(project, jvmPluginServices, isRunningInIntelliJ)
3133
backend.registerTasks(project)
3234

3335
project.afterEvaluate: (_: Project) =>
36+
addVersionSpecificSources()
3437
sharedProjects.map(_.project).foreach(Sources.addShared(_, project, isRunningInIntelliJ))
3538
backend.afterEvaluate(
3639
project,
3740
projectScalaLibrary = extension.getScalaLibrary,
38-
pluginScalaLibrary = extension.getPluginScalaLibrary
41+
pluginScalaLibrary = extension.getPluginScalaLibrary
3942
)

0 commit comments

Comments
 (0)