Skip to content

Commit

Permalink
Merge pull request #61 from JetBrains/prodTest-sources-v2
Browse files Browse the repository at this point in the history
separate modules for prod/test sources
  • Loading branch information
azdrojowa123 committed Jun 19, 2024
2 parents db92bea + dd1146b commit a654990
Show file tree
Hide file tree
Showing 98 changed files with 38,752 additions and 441 deletions.
7 changes: 5 additions & 2 deletions extractor/src/main/scala/org/jetbrains/sbt/Options.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ final case class Options(download: Boolean = false,
resolveJavadocClassifiers: Boolean = false,
resolveSbtClassifiers: Boolean = false,
prettyPrint: Boolean = false,
insertProjectTransitiveDependencies: Boolean = true)
insertProjectTransitiveDependencies: Boolean = true,
separateProdAndTestSources: Boolean = false)

object Options {

Expand All @@ -26,7 +27,8 @@ object Options {
resolveJavadocClassifiers = options.contains(Keys.ResolveJavadocClassifiers),
resolveSbtClassifiers = options.contains(Keys.ResolveSbtClassifiers),
prettyPrint = options.contains(Keys.PrettyPrint),
insertProjectTransitiveDependencies = options.contains(Keys.InsertProjectTransitiveDependencies)
insertProjectTransitiveDependencies = options.contains(Keys.InsertProjectTransitiveDependencies),
separateProdAndTestSources = options.contains(Keys.SeparateProdAndTestSources)
)

object Keys {
Expand All @@ -36,6 +38,7 @@ object Options {
val ResolveSbtClassifiers = "resolveSbtClassifiers"
val PrettyPrint = "prettyPrint"
val InsertProjectTransitiveDependencies = "insertProjectTransitiveDependencies"
val SeparateProdAndTestSources = "separateProdAndTestSources"
}
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package extractors
import org.jetbrains.sbt.structure._
import sbt.Def.Initialize
import sbt.jetbrains.keysAdapterEx
import sbt.{Def, File, Configuration => _, _}
import sbt.{Def, File, Configuration => SbtConfiguration, _}

import scala.reflect.ClassTag
import scala.util.{Failure, Success, Try}
Expand Down Expand Up @@ -35,17 +35,19 @@ class ProjectExtractor(
scalaOrganization: String,
scalaInstance: Option[ScalaInstance],
scalaCompilerBridgeBinaryJar: Option[File],
scalacOptions: Seq[String],
scalacOptions: Seq[CompilerOptions],
javaHome: Option[File],
javacOptions: Seq[String],
javacOptions: Seq[CompilerOptions],
compileOrder: CompileOrder,
sourceConfigurations: Seq[sbt.Configuration],
testConfigurations: Seq[sbt.Configuration],
dependencies: DependencyData,
play2: Option[Play2Data],
settingData: Seq[SettingData],
taskData: Seq[TaskData],
commandData: Seq[CommandData]
commandData: Seq[CommandData],
mainSourceDirectories: Seq[File],
testSourceDirectories: Seq[File]
) {

private[extractors] def extract: ProjectData = {
Expand Down Expand Up @@ -97,7 +99,9 @@ class ProjectExtractor(
play2,
settingData,
taskData,
commandData
commandData,
mainSourceDirectories,
testSourceDirectories
)
}

Expand Down Expand Up @@ -272,6 +276,11 @@ object ProjectExtractor extends SbtStateOps with TaskOps {
state: State) =
key.in(projectRef, Compile).get(state)

private def taskInConfig[T](key: TaskKey[T], config: SbtConfiguration)
(implicit projectRef: ProjectRef, state: State) =
key.in(projectRef, config).get(state)


def taskDef: Initialize[Task[ProjectData]] = Def.taskDyn {

implicit val state: State = Keys.state.value
Expand Down Expand Up @@ -325,10 +334,26 @@ object ProjectExtractor extends SbtStateOps with TaskOps {
taskInCompile(Keys.scalaInstance).onlyIf(options.download).value
val scalaCompilerBridgeBinaryJar =
keysAdapterEx.myScalaCompilerBridgeBinaryJar.value
val scalacOptions =
taskInCompile(Keys.scalacOptions).onlyIf(options.download).value
val javacOptions =
taskInCompile(Keys.javacOptions).onlyIf(options.download).value

def mapToCompilerOptions(configToOptions: Seq[(Configuration, Seq[String])]) = {
configToOptions.collect { case(config, options) if options.nonEmpty =>
CompilerOptions(config, options)
}
}

val scalacOptions = mapToCompilerOptions(
Seq(
(Configuration.Compile, taskInConfig(Keys.scalacOptions, Compile).onlyIf(options.download).value.getOrElse(Seq.empty)),
(Configuration.Test, taskInConfig(Keys.scalacOptions, Test).onlyIf(options.download).value.getOrElse(Seq.empty))
)
)

val javacOptions = mapToCompilerOptions(
Seq(
(Configuration.Compile, taskInConfig(Keys.javacOptions, Compile).onlyIf(options.download).value.getOrElse(Seq.empty)),
(Configuration.Test, taskInConfig(Keys.javacOptions, Test).onlyIf(options.download).value.getOrElse(Seq.empty))
)
)

val name = Keys.name.in(projectRef, Compile).value
val organization = Keys.organization.in(projectRef, Compile).value
Expand All @@ -338,6 +363,16 @@ object ProjectExtractor extends SbtStateOps with TaskOps {
val javaHome = Keys.javaHome.in(projectRef, Compile).value
val compileOrder = Keys.compileOrder.in(projectRef, Compile).value

val sourceConfigurations = StructureKeys.sourceConfigurations.value
val testConfigurations = StructureKeys.testConfigurations.value

val mainSourceDirectories = Keys.sourceDirectory.in(projectRef)
.forAllConfigurations(state, sourceConfigurations)
.map(_._2).distinct
val testSourceDirectories = Keys.sourceDirectory.in(projectRef)
.forAllConfigurations(state, testConfigurations)
.map(_._2).distinct

new ProjectExtractor(
projectRef,
name,
Expand All @@ -358,17 +393,19 @@ object ProjectExtractor extends SbtStateOps with TaskOps {
scalaOrganization,
scalaInstance,
scalaCompilerBridgeBinaryJar,
scalacOptions.getOrElse(Seq.empty),
scalacOptions,
javaHome,
javacOptions.getOrElse(Seq.empty),
javacOptions,
compileOrder,
StructureKeys.sourceConfigurations.value,
StructureKeys.testConfigurations.value,
StructureKeys.extractDependencies.value,
StructureKeys.extractPlay2.value,
StructureKeys.settingData.value,
StructureKeys.taskData.value,
StructureKeys.commandData.value.distinct
StructureKeys.commandData.value.distinct,
mainSourceDirectories,
testSourceDirectories
).extract
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,12 @@ object UtilityTasks extends SbtStateOps {
val transitiveTest = cs.filter(c =>
transitiveExtends(c.extendsConfigs)
.toSet
.intersect(predefinedTest).nonEmpty) ++
predefinedTest
transitiveTest.distinct
.intersect(predefinedTest).nonEmpty
)
// note: IntegrationTest is not a predefined configuration in each sbt project. It has to be manually enabled.
// So returning it from testConfigurations is not necessary and it causes incorrect values to be returned from the sourceDirectory key.
val predefinedAvailableTest = predefinedTest.filter(cs.contains).toSeq
(transitiveTest ++ predefinedAvailableTest).distinct
}

def sourceConfigurations: Def.Initialize[Seq[Configuration]] = Def.setting {
Expand Down
4 changes: 4 additions & 0 deletions extractor/src/main/scala/org/jetbrains/sbt/operations.scala
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ trait SbtStateOps {
def forAllProjects(state: State, projects: Seq[ProjectRef]): Seq[(ProjectRef, T)] =
projects.flatMap(p => key.in(p).find(state).map(it => (p, it)))

def forAllConfigurations(state: State, configurations: Seq[sbt.Configuration]): Seq[(sbt.Configuration, T)] = {
configurations.flatMap(c => key.in(c).get(structure(state).data).map(it => (c, it)))
}

}

implicit class `enrich TaskKey`[T](key: TaskKey[T]) {
Expand Down
17 changes: 16 additions & 1 deletion extractor/src/test/data/0.13/bare/structure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,20 @@
<classes>$BASE/target/scala-2.10/test-classes</classes>
</configuration>
<dependencies>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.1" artifactType="jar" classifier=""/>
<projects>
<forTest/>
<forProduction/>
</projects>
<modules>
<forTest/>
<forProduction>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.1" artifactType="jar" classifier=""/>
</forProduction>
</modules>
<jars>
<forTest/>
<forProduction/>
</jars>
</dependencies>
<resolver name="public" root="https://repo1.maven.org/maven2/"/>
<resolver name="local-preloaded" root="file:$HOME/.sbt-structure-global/0.13/preloaded"/>
Expand Down Expand Up @@ -1666,6 +1679,8 @@
<command>
<name>---</name>
</command>
<testSourceDir>$BASE/src/test</testSourceDir>
<mainSourceDir>$BASE/src/main</mainSourceDir>
</project>
<repository>
<module organization="org.scala-lang" name="scala-library" revision="2.10.1" artifactType="jar" classifier="">
Expand Down
69 changes: 57 additions & 12 deletions extractor/src/test/data/0.13/classifiers/structure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,20 @@
<classes>$BASE/target/scala-2.10/test-classes</classes>
</configuration>
<dependencies>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.7" artifactType="jar" classifier=""/>
<projects>
<forTest/>
<forProduction/>
</projects>
<modules>
<forTest/>
<forProduction>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.7" artifactType="jar" classifier=""/>
</forProduction>
</modules>
<jars>
<forTest/>
<forProduction/>
</jars>
</dependencies>
<resolver name="public" root="https://repo1.maven.org/maven2/"/>
<resolver name="local-preloaded" root="file:$HOME/.sbt-structure-global/0.13/preloaded"/>
Expand Down Expand Up @@ -1666,6 +1679,8 @@
<command>
<name>---</name>
</command>
<testSourceDir>$BASE/src/test</testSourceDir>
<mainSourceDir>$BASE/src/main</mainSourceDir>
</project>
<project>
<id>bar</id>
Expand Down Expand Up @@ -1708,11 +1723,24 @@
<classes>$BASE/bar/target/scala-2.10/test-classes</classes>
</configuration>
<dependencies>
<module configurations="compile" organization="javax.activation" name="activation" revision="1.1.1" artifactType="jar" classifier=""/>
<module configurations="compile" organization="javax.mail" name="mail" revision="1.4.4" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-api" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-base" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.7" artifactType="jar" classifier=""/>
<projects>
<forTest/>
<forProduction/>
</projects>
<modules>
<forTest/>
<forProduction>
<module configurations="compile" organization="javax.activation" name="activation" revision="1.1.1" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-api" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-base" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="compile" organization="javax.mail" name="mail" revision="1.4.4" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.7" artifactType="jar" classifier=""/>
</forProduction>
</modules>
<jars>
<forTest/>
<forProduction/>
</jars>
</dependencies>
<resolver name="public" root="https://repo1.maven.org/maven2/"/>
<resolver name="local-preloaded" root="file:$HOME/.sbt-structure-global/0.13/preloaded"/>
Expand Down Expand Up @@ -3226,6 +3254,8 @@
<command>
<name>---</name>
</command>
<testSourceDir>$BASE/bar/src/test</testSourceDir>
<mainSourceDir>$BASE/bar/src/main</mainSourceDir>
</project>
<project>
<id>foo</id>
Expand Down Expand Up @@ -3268,12 +3298,25 @@
<classes>$BASE/foo/target/scala-2.10/test-classes</classes>
</configuration>
<dependencies>
<module configurations="compile" organization="javax.activation" name="activation" revision="1.1.1" artifactType="jar" classifier=""/>
<module configurations="compile" organization="javax.mail" name="mail" revision="1.4.4" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-api" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-base" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.apache.james" name="apache-mailet-base" revision="2.5.0" artifactType="jar" classifier="tests"/>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.7" artifactType="jar" classifier=""/>
<projects>
<forTest/>
<forProduction/>
</projects>
<modules>
<forTest/>
<forProduction>
<module configurations="compile" organization="javax.activation" name="activation" revision="1.1.1" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-api" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.apache.james" name="apache-mailet-base" revision="2.5.0" artifactType="jar" classifier="tests"/>
<module configurations="compile" organization="org.apache.james" name="apache-mailet-base" revision="2.5.0" artifactType="jar" classifier=""/>
<module configurations="compile" organization="javax.mail" name="mail" revision="1.4.4" artifactType="jar" classifier=""/>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.7" artifactType="jar" classifier=""/>
</forProduction>
</modules>
<jars>
<forTest/>
<forProduction/>
</jars>
</dependencies>
<resolver name="public" root="https://repo1.maven.org/maven2/"/>
<resolver name="local-preloaded" root="file:$HOME/.sbt-structure-global/0.13/preloaded"/>
Expand Down Expand Up @@ -4787,6 +4830,8 @@
<command>
<name>---</name>
</command>
<testSourceDir>$BASE/foo/src/test</testSourceDir>
<mainSourceDir>$BASE/foo/src/main</mainSourceDir>
</project>
<repository>
<module organization="javax.activation" name="activation" revision="1.1.1" artifactType="jar" classifier="">
Expand Down
32 changes: 24 additions & 8 deletions extractor/src/test/data/0.13/custom-test-config/structure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -158,14 +158,27 @@
<classes>$BASE/target/scala-2.10/fun-classes</classes>
</configuration>
<dependencies>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.1" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scala-lang" name="scala-reflect" revision="2.10.1" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scalaz" name="scalaz-concurrent_2.10" revision="7.1.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scalaz" name="scalaz-core_2.10" revision="7.1.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scalaz" name="scalaz-effect_2.10" revision="7.1.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.specs2" name="specs2-common_2.10" revision="2.4.14" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.specs2" name="specs2-core_2.10" revision="2.4.14" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.specs2" name="specs2-matcher_2.10" revision="2.4.14" artifactType="jar" classifier=""/>
<projects>
<forTest/>
<forProduction/>
</projects>
<modules>
<forTest/>
<forProduction>
<module configurations="compile" organization="org.scala-lang" name="scala-library" revision="2.10.1" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scala-lang" name="scala-reflect" revision="2.10.1" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scalaz" name="scalaz-concurrent_2.10" revision="7.1.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scalaz" name="scalaz-core_2.10" revision="7.1.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.scalaz" name="scalaz-effect_2.10" revision="7.1.0" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.specs2" name="specs2-common_2.10" revision="2.4.14" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.specs2" name="specs2-core_2.10" revision="2.4.14" artifactType="jar" classifier=""/>
<module configurations="test" organization="org.specs2" name="specs2-matcher_2.10" revision="2.4.14" artifactType="jar" classifier=""/>
</forProduction>
</modules>
<jars>
<forTest/>
<forProduction/>
</jars>
</dependencies>
<resolver name="public" root="https://repo1.maven.org/maven2/"/>
<resolver name="local-preloaded" root="file:$HOME/.sbt-structure-global/0.13/preloaded"/>
Expand Down Expand Up @@ -1675,6 +1688,9 @@
<command>
<name>---</name>
</command>
<testSourceDir>$BASE/src/fun</testSourceDir>
<testSourceDir>$BASE/src/test</testSourceDir>
<mainSourceDir>$BASE/src/main</mainSourceDir>
</project>
<repository>
<module organization="org.scala-lang" name="scala-library" revision="2.10.1" artifactType="jar" classifier="">
Expand Down
Loading

0 comments on commit a654990

Please sign in to comment.