@@ -12,7 +12,9 @@ import mill.api.daemon.internal.bsp.{BspBuildTarget, BspModuleApi}
1212import mill .javalib .api .internal .{JavaCompilerOptions , JvmWorkerApi , ZincCompileJava }
1313
1414/**
15- * Core configuration required to compile a single Groovy module
15+ * Core configuration required to compile a single Groovy module.
16+ *
17+ * Resolves
1618 */
1719trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
1820
@@ -33,36 +35,31 @@ trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
3335 * All individual source files fed into the compiler.
3436 */
3537 override def allSourceFiles : T [Seq [PathRef ]] = Task {
36- Lib .findSourceFiles(allSources(), Seq ( " groovy " , " java " )).map( PathRef (_) )
38+ allGroovySourceFiles() ++ allJavaSourceFiles( )
3739 }
3840
3941 /**
4042 * All individual Java source files fed into the compiler.
4143 * Subset of [[allSourceFiles ]].
4244 */
4345 private def allJavaSourceFiles : T [Seq [PathRef ]] = Task {
44- allSourceFiles().filter(_.path.ext.toLowerCase() == " java" )
46+ Lib .findSourceFiles(allSources(), Seq ( " java" )).map( PathRef (_) )
4547 }
4648
4749 /**
4850 * All individual Groovy source files fed into the compiler.
4951 * Subset of [[allSourceFiles ]].
5052 */
5153 private def allGroovySourceFiles : T [Seq [PathRef ]] = Task {
52- allSourceFiles().filter(path => Seq (" groovy" ).contains(path.path.ext.toLowerCase() ))
54+ Lib .findSourceFiles(allSources(), Seq (" groovy" )).map( PathRef (_ ))
5355 }
5456
5557 /**
5658 * The dependencies of this module.
57- * Defaults to add the groovy dependency matching the [[groovyVersion ]].
59+ * Defaults to add the Groovy dependency matching the [[groovyVersion ]].
5860 */
5961 override def mandatoryMvnDeps : T [Seq [Dep ]] = Task {
60- super .mandatoryMvnDeps()
61- ++
62- groovyCompilerMvnDeps()
63- // Seq(
64- // mvn"org.apache.groovy:groovy:${groovyVersion()}"
65- // )
62+ super .mandatoryMvnDeps() ++ groovyCompilerMvnDeps()
6663 }
6764
6865 def jvmWorkerRef : ModuleRef [JvmWorkerModule ] = jvmWorker
@@ -86,31 +83,11 @@ trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
8683 /**
8784 * The Ivy/Coursier dependencies resembling the Groovy compiler.
8885 *
89- * Default is derived from [[groovyCompilerVersion ]].
86+ * Default is derived from [[groovyVersion ]].
9087 */
9188 def groovyCompilerMvnDeps : T [Seq [Dep ]] = Task {
9289 val gv = groovyVersion()
93-
94- val compilerDep = mvn " org.apache.groovy:groovy-all: $gv"
95- // val annotationDep = mvn"org.codehaus.groovy:groovy-all-annotations:$gv"
96-
97- Seq (compilerDep)
98- }
99-
100- /**
101- * Compiler Plugin dependencies.
102- */
103- def groovyCompilerPluginMvnDeps : T [Seq [Dep ]] = Task { Seq .empty[Dep ] }
104-
105- /**
106- * The resolved plugin jars
107- */
108- def groovyCompilerPluginJars : T [Seq [PathRef ]] = Task {
109- val jars = defaultResolver().classpath(
110- allMvnDeps(),
111- resolutionParamsMapOpt = None
112- )
113- jars.toSeq
90+ Seq (mvn " org.apache.groovy:groovy: $gv" )
11491 }
11592
11693 /**
@@ -121,9 +98,8 @@ trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
12198 }
12299
123100 /**
124- * The actual Groovy compile task (used by [[compile ]] and [[ groovycHelp ]] ).
101+ * The actual Groovy compile task (used by [[compile ]]).
125102 */
126- // TODO joint compilation: generate groovy-stubs -> compile java -> compile groovy -> delete stubs (or keep for debugging)
127103 protected def groovyCompileTask (): Task [CompilationResult ] =
128104 Task .Anon {
129105 val ctx = Task .ctx()
@@ -143,9 +119,9 @@ trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
143119
144120 def compileJava : Result [CompilationResult ] = {
145121 ctx.log.info(
146- s " Compiling ${javaSourceFiles.size} Java sources to ${ classes} ... "
122+ s " Compiling ${javaSourceFiles.size} Java sources to $classes ... "
147123 )
148- // The compile step is lazy, but its dependencies are not!
124+ // The compiler step is lazy, but its dependencies are not!
149125 internalCompileJavaFiles(
150126 worker = jvmWorkerRef().internalWorker(),
151127 upstreamCompileOutput = updateCompileOutput,
@@ -158,40 +134,43 @@ trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
158134 )
159135 }
160136
137+ if (isMixed) {
138+ ctx.log.info(" Compiling Groovy stubs for mixed compilation" )
139+
140+ val workerStubResult =
141+ GroovyWorkerManager .groovyWorker().withValue(groovyCompilerClasspath()) {
142+ _.compileGroovyStubs(groovySourceFiles, compileCp, classes)
143+ }
144+ workerStubResult match {
145+ case Result .Success (_) => compileJava
146+ case Result .Failure (reason) => Result .Failure (reason)
147+ }
148+ }
149+
161150 if (isMixed || isGroovy) {
162151 ctx.log.info(
163- s " Compiling ${groovySourceFiles.size} Groovy sources to ${ classes} ... "
152+ s " Compiling ${groovySourceFiles.size} Groovy sources to $classes ... "
164153 )
165154
166- val compileCp = compileClasspath().map(_.path).filter(os.exists)
167-
168- val workerResult =
155+ val workerGroovyResult =
169156 GroovyWorkerManager .groovyWorker().withValue(groovyCompilerClasspath()) {
170157 _.compile(groovySourceFiles, compileCp, classes)
171158 }
172159
160+ // TODO figure out if there is a better way to do this
173161 val analysisFile = dest / " groovy.analysis.dummy" // needed for mills CompilationResult
174162 os.write(target = analysisFile, data = " " , createFolders = true )
175163
176- workerResult match {
164+ workerGroovyResult match {
177165 case Result .Success (_) =>
178- val cr = CompilationResult (analysisFile, PathRef (classes))
179- if (! isJava) {
180- // pure Groovy project
181- cr
182- } else {
183- // also run Java compiler and use it's returned result
184- compileJava
185- }
166+ CompilationResult (analysisFile, PathRef (classes))
186167 case Result .Failure (reason) => Result .Failure (reason)
187168 }
188169 } else {
189- // it's Java only
190170 compileJava
191171 }
192172 }
193173
194-
195174 private [groovylib] def internalCompileJavaFiles (
196175 worker : JvmWorkerApi ,
197176 upstreamCompileOutput : Seq [CompilationResult ],
@@ -236,7 +215,7 @@ trait GroovyModule extends JavaModule with GroovyModuleApi { outer =>
236215 }
237216
238217 /**
239- * A test sub-module linked to its parent module best suited for unit-tests.
218+ * A test submodule linked to its parent module best suited for unit-tests.
240219 */
241220 trait GroovyTests extends JavaTests with GroovyModule {
242221
0 commit comments