[Gradle, JS] Add internal composite dependencies

#KT-32466 fixed
#KT-36784 fixed
#KT-36864 fixed
This commit is contained in:
Ilya Goncharov
2020-03-25 17:04:16 +03:00
parent cdc53f5fec
commit 77139a3a10
@@ -10,6 +10,7 @@ import org.gradle.api.artifacts.ResolvedArtifact
import org.gradle.api.artifacts.ResolvedDependency import org.gradle.api.artifacts.ResolvedDependency
import org.gradle.api.artifacts.component.ProjectComponentIdentifier import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.initialization.IncludedBuild
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
@@ -135,8 +136,14 @@ internal class KotlinCompilationNpmResolver(
val artifact: ResolvedArtifact val artifact: ResolvedArtifact
) )
data class CompositeDependency(
val dependency: ResolvedDependency,
val includedBuild: IncludedBuild
)
inner class ConfigurationVisitor { inner class ConfigurationVisitor {
private val internalDependencies = mutableSetOf<KotlinCompilationNpmResolver>() private val internalDependencies = mutableSetOf<KotlinCompilationNpmResolver>()
private val internalCompositeDependencies = mutableSetOf<CompositeDependency>()
private val externalGradleDependencies = mutableSetOf<ExternalGradleDependency>() private val externalGradleDependencies = mutableSetOf<ExternalGradleDependency>()
private val externalNpmDependencies = mutableSetOf<NpmDependency>() private val externalNpmDependencies = mutableSetOf<NpmDependency>()
@@ -179,8 +186,11 @@ internal class KotlinCompilationNpmResolver(
artifacts: MutableSet<ResolvedArtifact> artifacts: MutableSet<ResolvedArtifact>
) { ) {
artifacts.forEach { artifact -> artifacts.forEach { artifact ->
val componentIdentifier = artifact.id.componentIdentifier val artifactId = artifact.id
if (componentIdentifier is ProjectComponentIdentifier) { val componentIdentifier = artifactId.componentIdentifier
val clazz = Class.forName("org.gradle.composite.internal.CompositeProjectComponentArtifactMetadata")
if (componentIdentifier is ProjectComponentIdentifier && !clazz.isAssignableFrom(artifactId::class.java)) {
val dependentProject = project.findProject(componentIdentifier.projectPath) val dependentProject = project.findProject(componentIdentifier.projectPath)
?: error("Cannot find project ${componentIdentifier.projectPath}") ?: error("Cannot find project ${componentIdentifier.projectPath}")
@@ -191,10 +201,22 @@ internal class KotlinCompilationNpmResolver(
} else { } else {
externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact)) externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact))
} }
if (clazz.isAssignableFrom(artifactId::class.java)) {
(artifactId.componentIdentifier as ProjectComponentIdentifier).let { identifier ->
val includedBuild = project.gradle.includedBuild(identifier.projectName.removePrefix(":"))
internalCompositeDependencies.add(CompositeDependency(dependency, includedBuild))
}
}
} }
} }
fun toPackageJsonProducer() = PackageJsonProducer(internalDependencies, externalGradleDependencies, externalNpmDependencies) fun toPackageJsonProducer() = PackageJsonProducer(
internalDependencies,
internalCompositeDependencies,
externalGradleDependencies,
externalNpmDependencies
)
} }
class PackageJsonProducerInputs( class PackageJsonProducerInputs(
@@ -211,6 +233,7 @@ internal class KotlinCompilationNpmResolver(
@Suppress("MemberVisibilityCanBePrivate") @Suppress("MemberVisibilityCanBePrivate")
inner class PackageJsonProducer( inner class PackageJsonProducer(
val internalDependencies: Collection<KotlinCompilationNpmResolver>, val internalDependencies: Collection<KotlinCompilationNpmResolver>,
val internalCompositeDependencies: Collection<CompositeDependency>,
val externalGradleDependencies: Collection<ExternalGradleDependency>, val externalGradleDependencies: Collection<ExternalGradleDependency>,
val externalNpmDependencies: Collection<NpmDependency> val externalNpmDependencies: Collection<NpmDependency>
) { ) {