Skip to content

Commit

Permalink
GenIdea: Make Scala SDK specific for JS / Native (#3345)
Browse files Browse the repository at this point in the history
* Related to #3344

Pull request: #3345
  • Loading branch information
lefou authored Aug 8, 2024
1 parent 044b2a4 commit 2633a16
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 9 deletions.
25 changes: 17 additions & 8 deletions idea/src/mill/idea/GenIdeaImpl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ import mill.api.{PathRef, Strict}
import mill.define.{Ctx => _, _}
import mill.eval.Evaluator
import mill.main.BuildInfo
import mill.scalajslib.ScalaJSModule
import mill.scalalib.GenIdeaModule.{IdeaConfigFile, JavaFacet}
import mill.scalalib.internal.JavaModuleUtils
import mill.util.Classpath
import mill.{T, scalalib}
import mill.scalalib.{GenIdeaImpl => _, _}
import mill.scalanativelib.ScalaNativeModule

case class GenIdeaImpl(
private val evaluators: Seq[Evaluator]
Expand Down Expand Up @@ -552,9 +554,17 @@ case class GenIdeaImpl(

val isTest = mod.isInstanceOf[TestModule]

val sdkName = (mod match {
case _: ScalaJSModule => Some("scala-js-SDK")
case _: ScalaNativeModule => Some("scala-native-SDK")
case _: ScalaModule => Some("scala-SDK")
case _ => None
})
.map { name => s"${name}-${scalaVersion.get}" }

val moduleXml = moduleXmlTemplate(
basePath = mod.intellijModulePath,
scalaVersionOpt = scalaVersion,
sdkOpt = sdkName,
resourcePaths = Strict.Agg.from(resourcesPathRefs.map(_.path)),
normalSourcePaths = Strict.Agg.from(normalSourcePaths),
generatedSourcePaths = Strict.Agg.from(generatedSourcePaths),
Expand All @@ -571,15 +581,14 @@ case class GenIdeaImpl(
)

val scalaSdkFile = {
Option.when(scalaVersion.isDefined && compilerClasspath.nonEmpty) {
val name = s"scala-SDK-${scalaVersion.get}"
sdkName.map { nameAndVersion =>
val languageLevel =
scalaVersion.map(_.split("[.]", 3).take(2).mkString("Scala_", "_", ""))

Tuple2(
os.sub / "libraries" / libraryNameToFileSystemPathPart(name, "xml"),
os.sub / "libraries" / libraryNameToFileSystemPathPart(nameAndVersion, "xml"),
scalaSdkTemplate(
name = name,
name = nameAndVersion,
languageLevel = languageLevel,
scalaCompilerClassPath = compilerClasspath,
// FIXME: fill in these fields
Expand Down Expand Up @@ -803,7 +812,7 @@ case class GenIdeaImpl(
*/
def moduleXmlTemplate(
basePath: os.Path,
scalaVersionOpt: Option[String],
sdkOpt: Option[String],
resourcePaths: Strict.Agg[os.Path],
normalSourcePaths: Strict.Agg[os.Path],
generatedSourcePaths: Strict.Agg[os.Path],
Expand Down Expand Up @@ -887,8 +896,8 @@ case class GenIdeaImpl(
<orderEntry type="sourceFolder" forTests="false" />
{
for {
scalaVersion <- scalaVersionOpt.toSeq
} yield <orderEntry type="library" name={s"scala-SDK-${scalaVersion}"} level="project" />
sdk <- sdkOpt.toSeq
} yield <orderEntry type="library" name={sdk} level="project" />
}

{
Expand Down
13 changes: 12 additions & 1 deletion integration/ide/gen-idea/repo/hello-idea/build.sc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import mill.api.Loose.Agg
import mill.define.Target
import mill._
import mill.scalajslib.ScalaJSModule
import mill.scalalib.{Dep, DepSyntax, TestModule}

trait HelloIdeaModule extends scalalib.ScalaModule {
Expand All @@ -22,10 +23,20 @@ trait HelloIdeaModule extends scalalib.ScalaModule {

object HelloIdea extends HelloIdeaModule {
object scala3 extends HelloIdeaModule {
def scalaVersion = "3.3.1"
override def scalaVersion = "3.3.1"
}
}

object HiddenIdea extends HelloIdeaModule {
override def skipIdea = true
}

object HelloIdeaJs extends ScalaJSModule {
override def scalaVersion = "3.3.1"
override def scalaJSVersion = "1.16.0"
object test extends ScalaJSTests with TestModule.Utest {
override def ivyDeps: Target[Agg[Dep]] = Agg(
ivy"com.lihaoyi::utest::0.8.4"
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<component name="libraryTable">
<library name="scala-js-SDK-3.3.1" type="Scala">
<properties>
<language-level>Scala_3_3</language-level>
<compiler-classpath>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.7.0/protobuf-java-3.7.0.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.3.1/jna-5.3.1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/jline/jline-reader/3.19.0/jline-reader-3.19.0.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/jline/jline-terminal-jna/3.19.0/jline-terminal-jna-3.19.0.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/jline/jline-terminal/3.19.0/jline-terminal-3.19.0.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-javalib/1.12.0/scalajs-javalib-1.12.0.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.13/1.12.0/scalajs-library_2.13-1.12.0.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-asm/9.5.0-scala-1/scala-asm-9.5.0-scala-1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.10/scala-library-2.13.10.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-compiler_3/3.3.1/scala3-compiler_3-3.3.1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-interfaces/3.3.1/scala3-interfaces-3.3.1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_3/3.3.1/scala3-library_3-3.3.1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_sjs1_3/3.3.1/scala3-library_sjs1_3-3.3.1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-lang/tasty-core_3/3.3.1/tasty-core_3-3.3.1.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-sbt/compiler-interface/1.3.5/compiler-interface-1.3.5.jar"/>
<root url="file://$USER_HOME$/COURSIER_CACHE/v1/https/repo1.maven.org/maven2/org/scala-sbt/util-interface/1.3.0/util-interface-1.3.0.jar"/>
</compiler-classpath>
</properties>
</library>
</component>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/../../out/HelloIdeaJs/ideaCompileOutput.dest/classes"/>
<exclude-output/>
<content url="file://$MODULE_DIR$/../../HelloIdeaJs">
<sourceFolder url="file://$MODULE_DIR$/../../HelloIdeaJs/src" isTestSource="false"/>
<sourceFolder url="file://$MODULE_DIR$/../../HelloIdeaJs/resources" type="java-resource"/>
</content>
<orderEntry type="inheritedJdk"/>
<orderEntry type="sourceFolder" forTests="false"/>
<orderEntry type="library" name="scala-js-SDK-3.3.1" level="project"/>
<orderEntry type="library" name="scala-library-2.13.13.jar" level="project"/>
<orderEntry type="library" name="scala3-library_sjs1_3-3.3.1.jar" level="project"/>
<orderEntry type="library" name="scalajs-javalib-1.16.0.jar" level="project"/>
<orderEntry type="library" name="scalajs-library_2.13-1.16.0.jar" level="project"/>
<orderEntry type="library" name="scalajs-scalalib_2.13-2.13.13%2B1.16.0.jar" level="project"/>
</component>
</module>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager">
<output-test url="file://$MODULE_DIR$/../../out/HelloIdeaJs/test/ideaCompileOutput.dest/classes"/>
<exclude-output/>
<content url="file://$MODULE_DIR$/../../HelloIdeaJs/test">
<sourceFolder url="file://$MODULE_DIR$/../../HelloIdeaJs/test/src" isTestSource="true"/>
<sourceFolder url="file://$MODULE_DIR$/../../HelloIdeaJs/test/resources" type="java-test-resource"/>
</content>
<orderEntry type="inheritedJdk"/>
<orderEntry type="sourceFolder" forTests="false"/>
<orderEntry type="library" name="scala-js-SDK-3.3.1" level="project"/>
<orderEntry type="library" name="portable-scala-reflect_sjs1_2.13-1.1.3.jar" level="project"/>
<orderEntry type="library" name="scala-library-2.13.13.jar" level="project"/>
<orderEntry type="library" name="scala3-library_sjs1_3-3.3.1.jar" level="project"/>
<orderEntry type="library" name="scalajs-javalib-1.16.0.jar" level="project"/>
<orderEntry type="library" name="scalajs-library_2.13-1.16.0.jar" level="project"/>
<orderEntry type="library" name="scalajs-scalalib_2.13-2.13.13%2B1.16.0.jar" level="project"/>
<orderEntry type="library" name="scalajs-test-interface_2.13-1.16.0.jar" level="project"/>
<orderEntry type="library" name="utest_sjs1_3-0.8.4.jar" level="project"/>
<orderEntry type="module" module-name="helloideajs" exported=""/>
</component>
</module>
2 changes: 2 additions & 0 deletions integration/ide/gen-idea/repo/hello-idea/idea/modules.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
<module fileurl="file://$PROJECT_DIR$/.idea/mill_modules/helloidea.scala3.iml" filepath="$PROJECT_DIR$/.idea/mill_modules/helloidea.scala3.iml"/>
<module fileurl="file://$PROJECT_DIR$/.idea/mill_modules/helloidea.scala3.test.iml" filepath="$PROJECT_DIR$/.idea/mill_modules/helloidea.scala3.test.iml"/>
<module fileurl="file://$PROJECT_DIR$/.idea/mill_modules/helloidea.test.iml" filepath="$PROJECT_DIR$/.idea/mill_modules/helloidea.test.iml"/>
<module fileurl="file://$PROJECT_DIR$/.idea/mill_modules/helloideajs.iml" filepath="$PROJECT_DIR$/.idea/mill_modules/helloideajs.iml"/>
<module fileurl="file://$PROJECT_DIR$/.idea/mill_modules/helloideajs.test.iml" filepath="$PROJECT_DIR$/.idea/mill_modules/helloideajs.test.iml"/>
<module fileurl="file://$PROJECT_DIR$/.idea/mill_modules/mill-build.iml" filepath="$PROJECT_DIR$/.idea/mill_modules/mill-build.iml"/>
</modules>
</component>
Expand Down

0 comments on commit 2633a16

Please sign in to comment.