Pill: Pack embedded dependencies to artifacts

This commit is contained in:
Yan Zhulanow
2020-01-31 20:57:38 +09:00
parent a2be789d37
commit c196ce5f09
3 changed files with 40 additions and 18 deletions
@@ -103,9 +103,22 @@ class JpsCompatiblePluginTasks(private val rootProject: Project, private val pla
removeJpsAndPillRunConfigurations()
removeAllArtifactConfigurations()
val artifactDependencyMapper = object : OpaqueDependencyMapper {
val artifactDependencyMapper = object : ArtifactDependencyMapper {
override fun map(dependency: PDependency): List<PDependency> {
return jpsProject.mapDependency(dependency, dependencyMappers)
val result = mutableListOf<PDependency>()
for (mappedDependency in jpsProject.mapDependency(dependency, dependencyMappers)) {
result += mappedDependency
if (mappedDependency is PDependency.Module) {
val module = jpsProject.modules.find { it.name == mappedDependency.name }
if (module != null) {
result += module.embeddedDependencies
}
}
}
return result
}
}
@@ -23,7 +23,7 @@ class PArtifact(val artifactName: String, private val outputDir: File, private v
}
}
interface OpaqueDependencyMapper {
interface ArtifactDependencyMapper {
fun map(dependency: PDependency): List<PDependency>
}
@@ -88,7 +88,7 @@ sealed class ArtifactElement {
}
}
fun generateKotlinPluginArtifactFile(rootProject: Project, dependencyMapper: OpaqueDependencyMapper): PFile {
fun generateKotlinPluginArtifactFile(rootProject: Project, dependencyMapper: ArtifactDependencyMapper): PFile {
val root = Root()
fun Project.getProject(name: String) = findProject(name) ?: error("Cannot find project $name")
@@ -107,7 +107,7 @@ fun generateKotlinPluginArtifactFile(rootProject: Project, dependencyMapper: Opa
add(Directory("jps").apply {
val prepareJpsPluginProject = rootProject.getProject(":kotlin-jps-plugin")
add(Archive(prepareJpsPluginProject.name + ".jar").apply {
val jpsPluginConfiguration = prepareIdeaPluginProject.configurations.getByName("jpsPlugin")
val jpsPluginConfiguration = prepareJpsPluginProject.configurations.getByName(EMBEDDED_CONFIGURATION_NAME)
add(getArtifactElements(jpsPluginConfiguration, dependencyMapper, true))
})
})
@@ -129,14 +129,12 @@ fun generateKotlinPluginArtifactFile(rootProject: Project, dependencyMapper: Opa
private fun getArtifactElements(
configuration: Configuration,
dependencyMapper: OpaqueDependencyMapper,
dependencyMapper: ArtifactDependencyMapper,
extractDependencies: Boolean
): List<ArtifactElement> {
val dependencies = parseDependencies(configuration, dependencyMapper)
val artifacts = mutableListOf<ArtifactElement>()
for (dependency in dependencies) {
fun process(dependency: PDependency) {
when (dependency) {
is PDependency.Module -> {
val moduleOutput = ModuleOutput(dependency.name)
@@ -161,10 +159,11 @@ private fun getArtifactElements(
}
}
parseDependencies(configuration, dependencyMapper).forEach(::process)
return artifacts
}
private fun parseDependencies(configuration: Configuration, dependencyMapper: OpaqueDependencyMapper): List<PDependency> {
private fun parseDependencies(configuration: Configuration, dependencyMapper: ArtifactDependencyMapper): List<PDependency> {
val dependencies = mutableListOf<PDependency>()
for (file in configuration.resolve()) {
val library = PLibrary(file.name, listOf(file))
+18 -8
View File
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.pill
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.tasks.*
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
@@ -43,7 +44,8 @@ data class PModule(
val contentRoots: List<PContentRoot>,
val orderRoots: List<POrderRoot>,
val kotlinOptions: PSourceRootKotlinOptions?,
val moduleForProductionSources: PModule? = null
val moduleForProductionSources: PModule? = null,
val embeddedDependencies: List<PDependency>
)
data class PContentRoot(
@@ -192,6 +194,9 @@ private fun parseModules(project: Project, excludedProjects: List<Project>): Lis
return File(project.rootProject.projectDir, ".idea/modules/$relativePath")
}
val embeddedDependencies = project.configurations.findByName(EMBEDDED_CONFIGURATION_NAME)
?.let { parseDependencies(it) } ?: emptyList()
val sourceSets = parseSourceSets(project).sortedBy { it.forTests }
for (sourceSet in sourceSets) {
val sourceRoots = mutableListOf<PSourceRoot>()
@@ -229,7 +234,8 @@ private fun parseModules(project: Project, excludedProjects: List<Project>): Lis
contentRoots = contentRoots,
orderRoots = orderRoots,
kotlinOptions = sourceSet.kotlinOptions,
moduleForProductionSources = productionModule
moduleForProductionSources = productionModule,
embeddedDependencies = embeddedDependencies
)
}
@@ -247,7 +253,8 @@ private fun parseModules(project: Project, excludedProjects: List<Project>): Lis
contentRoots = listOf(PContentRoot(project.projectDir, listOf(), getExcludedDirs(project, excludedProjects))),
orderRoots = emptyList(),
kotlinOptions = null,
moduleForProductionSources = null
moduleForProductionSources = null,
embeddedDependencies = emptyList()
)
return modules
@@ -376,11 +383,7 @@ private fun parseDependencies(project: Project, sourceSet: PSourceSet): List<POr
fun process(name: String, scope: Scope) {
val configuration = project.configurations.findByName(name) ?: return
for (file in configuration.resolve()) {
val library = PLibrary(file.name, listOf(file))
val dependency = PDependency.ModuleLibrary(library)
roots += POrderRoot(dependency, scope)
}
roots += parseDependencies(configuration).map { POrderRoot(it, scope) }
}
process(sourceSet.compileClasspathConfigurationName, Scope.PROVIDED)
@@ -393,6 +396,13 @@ private fun parseDependencies(project: Project, sourceSet: PSourceSet): List<POr
return roots
}
private fun parseDependencies(configuration: Configuration): List<PDependency> {
return configuration.resolve().map { file ->
val library = PLibrary(file.name, listOf(file))
return@map PDependency.ModuleLibrary(library)
}
}
val Project.pillModuleName: String
get() = path.removePrefix(":").replace(':', '.')