[kpm] kotlin-gradle-plugin: Introduce IdeaKpm* naming convention (1/2)
This commit is contained in:
committed by
Space
parent
00edca4532
commit
904fc00dde
+1
-1
@@ -28,5 +28,5 @@ fun KotlinPm20ProjectExtension.androidPrototype() {
|
||||
instrumentedTest { createKotlinAndroidVariant(androidVariant.testVariant ?: return@instrumentedTest) }
|
||||
}
|
||||
|
||||
setupIdeaKotlinFragmentDependencyResolver()
|
||||
setupIdeaKpmFragmentDependencyResolver()
|
||||
}
|
||||
|
||||
+4
-4
@@ -10,10 +10,10 @@ import org.gradle.api.attributes.Usage
|
||||
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||
import org.jetbrains.kotlin.gradle.kpm.external.project
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder.FragmentConstraint
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmResolvedBinaryDependencyImpl
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.configureIdeaKotlinSpecialPlatformDependencyResolution
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.configureIdeaKpmSpecialPlatformDependencyResolution
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
|
||||
@@ -29,8 +29,8 @@ val isAndroidAndJvmSharedFragment = FragmentConstraint constraint@{ fragment ->
|
||||
}
|
||||
|
||||
@OptIn(ExternalVariantApi::class, InternalKotlinGradlePluginApi::class)
|
||||
internal fun KotlinPm20ProjectExtension.setupIdeaKotlinFragmentDependencyResolver() {
|
||||
configureIdeaKotlinSpecialPlatformDependencyResolution {
|
||||
internal fun KotlinPm20ProjectExtension.setupIdeaKpmFragmentDependencyResolver() {
|
||||
configureIdeaKpmSpecialPlatformDependencyResolution {
|
||||
|
||||
/*
|
||||
Handle android + jvm use cases:
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.kpm.external
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
|
||||
@RequiresOptIn("API is intended to build external Kotlin Targets.")
|
||||
@@ -18,8 +18,8 @@ val KotlinTopLevelExtension.project: Project
|
||||
get() = this.project
|
||||
|
||||
@ExternalVariantApi
|
||||
val KotlinPm20ProjectExtension.ideaKotlinProjectModelBuilder: IdeaKotlinProjectModelBuilder
|
||||
get() = this.ideaKotlinProjectModelBuilder
|
||||
val KotlinPm20ProjectExtension.ideaKpmProjectModelBuilder: IdeaKpmProjectModelBuilder
|
||||
get() = this.ideaKpmProjectModelBuilder
|
||||
|
||||
@ExternalVariantApi
|
||||
fun GradleKpmModule.createExternalJvmVariant(
|
||||
|
||||
+15
-15
@@ -8,8 +8,8 @@
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinPlatformDependencyResolver.ArtifactResolution
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.*
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmPlatformDependencyResolver.ArtifactResolution
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttributesSetup
|
||||
|
||||
@@ -18,21 +18,21 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttribu
|
||||
annotation class ExternalVariantPlatformDependencyResolutionDsl
|
||||
|
||||
@ExternalVariantApi
|
||||
fun KotlinPm20ProjectExtension.configureIdeaKotlinSpecialPlatformDependencyResolution(
|
||||
configure: IdeaKotlinPlatformDependencyResolutionDslHandle.() -> Unit
|
||||
fun KotlinPm20ProjectExtension.configureIdeaKpmSpecialPlatformDependencyResolution(
|
||||
configure: IdeaKpmPlatformDependencyResolutionDslHandle.() -> Unit
|
||||
) {
|
||||
IdeaKotlinPlatformDependencyResolutionDslHandle(ideaKotlinProjectModelBuilder).also(configure).setup()
|
||||
IdeaKpmPlatformDependencyResolutionDslHandle(ideaKpmProjectModelBuilder).also(configure).setup()
|
||||
}
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
private val toolingModelBuilder: IdeaKotlinProjectModelBuilder,
|
||||
class IdeaKpmPlatformDependencyResolutionDslHandle internal constructor(
|
||||
private val toolingModelBuilder: IdeaKpmProjectModelBuilder,
|
||||
private val constraint: FragmentConstraint = FragmentConstraint.unconstrained,
|
||||
private val parent: IdeaKotlinPlatformDependencyResolutionDslHandle? = null
|
||||
private val parent: IdeaKpmPlatformDependencyResolutionDslHandle? = null
|
||||
) {
|
||||
private val artifactViewDslHandles = mutableListOf<ArtifactViewDslHandle>()
|
||||
private val children = mutableListOf<IdeaKotlinPlatformDependencyResolutionDslHandle>()
|
||||
private val additionalDependencies = mutableListOf<IdeaKotlinDependencyResolver>()
|
||||
private val children = mutableListOf<IdeaKpmPlatformDependencyResolutionDslHandle>()
|
||||
private val additionalDependencies = mutableListOf<IdeaKpmDependencyResolver>()
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
var platformResolutionAttributes: GradleKpmConfigurationAttributesSetup<GradleKpmFragment>? = null
|
||||
@@ -54,9 +54,9 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
fun withConstraint(
|
||||
constraint: FragmentConstraint,
|
||||
configure: IdeaKotlinPlatformDependencyResolutionDslHandle.() -> Unit
|
||||
configure: IdeaKpmPlatformDependencyResolutionDslHandle.() -> Unit
|
||||
) {
|
||||
children += IdeaKotlinPlatformDependencyResolutionDslHandle(
|
||||
children += IdeaKpmPlatformDependencyResolutionDslHandle(
|
||||
toolingModelBuilder, constraint, this,
|
||||
).apply(configure)
|
||||
}
|
||||
@@ -77,7 +77,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
fun additionalDependencies(dependencyProvider: (GradleKpmFragment) -> List<IdeaKpmDependency>) {
|
||||
this.additionalDependencies += IdeaKotlinDependencyResolver { fragment -> dependencyProvider(fragment).toSet() }
|
||||
this.additionalDependencies += IdeaKpmDependencyResolver { fragment -> dependencyProvider(fragment).toSet() }
|
||||
}
|
||||
|
||||
internal fun setup() {
|
||||
@@ -89,7 +89,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
/* Setup artifact views */
|
||||
artifactViewDslHandles.toList().forEach { artifactViewDslHandle ->
|
||||
toolingModelBuilder.registerDependencyResolver(
|
||||
IdeaKotlinPlatformDependencyResolver(
|
||||
IdeaKpmPlatformDependencyResolver(
|
||||
binaryType = artifactViewDslHandle.binaryType,
|
||||
artifactResolution = ArtifactResolution.Variant(artifactViewDslHandle.attributes)
|
||||
),
|
||||
@@ -100,7 +100,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
|
||||
if (platformResolutionAttributes != null) {
|
||||
toolingModelBuilder.registerDependencyResolver(
|
||||
IdeaKotlinPlatformDependencyResolver(
|
||||
IdeaKpmPlatformDependencyResolver(
|
||||
binaryType = artifactViewDslHandle.binaryType,
|
||||
artifactResolution = ArtifactResolution.PlatformFragment(
|
||||
artifactViewAttributes = artifactViewDslHandle.attributes,
|
||||
|
||||
+23
-23
@@ -7,47 +7,47 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
fun interface IdeaKotlinDependencyResolver {
|
||||
fun interface IdeaKpmDependencyResolver {
|
||||
fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency>
|
||||
|
||||
object Empty : IdeaKotlinDependencyResolver {
|
||||
object Empty : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> = emptySet()
|
||||
}
|
||||
}
|
||||
|
||||
fun IdeaKotlinDependencyResolver(
|
||||
resolvers: Iterable<IdeaKotlinDependencyResolver>
|
||||
): IdeaKotlinDependencyResolver {
|
||||
fun IdeaKpmDependencyResolver(
|
||||
resolvers: Iterable<IdeaKpmDependencyResolver>
|
||||
): IdeaKpmDependencyResolver {
|
||||
val resolversList = resolvers.toList()
|
||||
if (resolversList.isEmpty()) return IdeaKotlinDependencyResolver.Empty
|
||||
return CompositeIdeaKotlinDependencyResolver(resolversList)
|
||||
if (resolversList.isEmpty()) return IdeaKpmDependencyResolver.Empty
|
||||
return IdeaKpmCompositeDependencyResolver(resolversList)
|
||||
}
|
||||
|
||||
fun IdeaKotlinDependencyResolver(
|
||||
vararg resolvers: IdeaKotlinDependencyResolver
|
||||
): IdeaKotlinDependencyResolver = IdeaKotlinDependencyResolver(resolvers.toList())
|
||||
fun IdeaKpmDependencyResolver(
|
||||
vararg resolvers: IdeaKpmDependencyResolver
|
||||
): IdeaKpmDependencyResolver = IdeaKpmDependencyResolver(resolvers.toList())
|
||||
|
||||
operator fun IdeaKotlinDependencyResolver.plus(
|
||||
other: IdeaKotlinDependencyResolver
|
||||
): IdeaKotlinDependencyResolver {
|
||||
if (this is CompositeIdeaKotlinDependencyResolver && other is CompositeIdeaKotlinDependencyResolver) {
|
||||
return CompositeIdeaKotlinDependencyResolver(this.children + other.children)
|
||||
operator fun IdeaKpmDependencyResolver.plus(
|
||||
other: IdeaKpmDependencyResolver
|
||||
): IdeaKpmDependencyResolver {
|
||||
if (this is IdeaKpmCompositeDependencyResolver && other is IdeaKpmCompositeDependencyResolver) {
|
||||
return IdeaKpmCompositeDependencyResolver(this.children + other.children)
|
||||
}
|
||||
|
||||
if (this is CompositeIdeaKotlinDependencyResolver) {
|
||||
return CompositeIdeaKotlinDependencyResolver(this.children + other)
|
||||
if (this is IdeaKpmCompositeDependencyResolver) {
|
||||
return IdeaKpmCompositeDependencyResolver(this.children + other)
|
||||
}
|
||||
|
||||
if (other is CompositeIdeaKotlinDependencyResolver) {
|
||||
return CompositeIdeaKotlinDependencyResolver(listOf(this) + other.children)
|
||||
if (other is IdeaKpmCompositeDependencyResolver) {
|
||||
return IdeaKpmCompositeDependencyResolver(listOf(this) + other.children)
|
||||
}
|
||||
|
||||
return CompositeIdeaKotlinDependencyResolver(listOf(this, other))
|
||||
return IdeaKpmCompositeDependencyResolver(listOf(this, other))
|
||||
}
|
||||
|
||||
private class CompositeIdeaKotlinDependencyResolver(
|
||||
val children: List<IdeaKotlinDependencyResolver>
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
private class IdeaKpmCompositeDependencyResolver(
|
||||
val children: List<IdeaKpmDependencyResolver>
|
||||
) : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
return children.flatMap { child -> child.resolve(fragment) }.toSet()
|
||||
}
|
||||
|
||||
+22
-22
@@ -8,51 +8,51 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
/**
|
||||
* An [IdeaKotlinDependencyTransformer] will be invoked after all [IdeaKotlinDependencyResolver] finished.
|
||||
* An [IdeaKpmDependencyTransformer] will be invoked after all [IdeaKpmDependencyResolver] finished.
|
||||
* The transformation step is allowed to entirely modify the resolution result. Typical applications would be dependency filtering,
|
||||
* or grouping. Adding additional dependencies might be harmful, since other transformers might not be able to see this additional
|
||||
* dependency, running before the addition.
|
||||
*
|
||||
* Transformations can be scheduled in different phases see: [IdeaKotlinProjectModelBuilder.DependencyTransformationPhase]
|
||||
* Transformations can be scheduled in different phases see: [IdeaKpmProjectModelBuilder.DependencyTransformationPhase]
|
||||
*/
|
||||
fun interface IdeaKotlinDependencyTransformer {
|
||||
fun interface IdeaKpmDependencyTransformer {
|
||||
fun transform(
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
|
||||
): Set<IdeaKpmDependency>
|
||||
}
|
||||
|
||||
fun IdeaKotlinDependencyResolver.withTransformer(transformer: IdeaKotlinDependencyTransformer) = IdeaKotlinDependencyResolver { fragment ->
|
||||
fun IdeaKpmDependencyResolver.withTransformer(transformer: IdeaKpmDependencyTransformer) = IdeaKpmDependencyResolver { fragment ->
|
||||
transformer.transform(fragment, this@withTransformer.resolve(fragment))
|
||||
}
|
||||
|
||||
fun IdeaKotlinDependencyTransformer(
|
||||
transformers: List<IdeaKotlinDependencyTransformer>
|
||||
): IdeaKotlinDependencyTransformer = CompositeIdeaKotlinDependencyTransformer(transformers)
|
||||
fun IdeaKpmDependencyTransformer(
|
||||
transformers: List<IdeaKpmDependencyTransformer>
|
||||
): IdeaKpmDependencyTransformer = IdeaKpmCompositeDependencyTransformer(transformers)
|
||||
|
||||
fun IdeaKotlinDependencyTransformer(
|
||||
vararg transformers: IdeaKotlinDependencyTransformer
|
||||
): IdeaKotlinDependencyTransformer = IdeaKotlinDependencyTransformer(transformers.toList())
|
||||
fun IdeaKpmDependencyTransformer(
|
||||
vararg transformers: IdeaKpmDependencyTransformer
|
||||
): IdeaKpmDependencyTransformer = IdeaKpmDependencyTransformer(transformers.toList())
|
||||
|
||||
operator fun IdeaKotlinDependencyTransformer.plus(other: IdeaKotlinDependencyTransformer):
|
||||
IdeaKotlinDependencyTransformer {
|
||||
if (this is CompositeIdeaKotlinDependencyTransformer && other is CompositeIdeaKotlinDependencyTransformer) {
|
||||
return CompositeIdeaKotlinDependencyTransformer(this.transformers + other.transformers)
|
||||
operator fun IdeaKpmDependencyTransformer.plus(other: IdeaKpmDependencyTransformer):
|
||||
IdeaKpmDependencyTransformer {
|
||||
if (this is IdeaKpmCompositeDependencyTransformer && other is IdeaKpmCompositeDependencyTransformer) {
|
||||
return IdeaKpmCompositeDependencyTransformer(this.transformers + other.transformers)
|
||||
}
|
||||
|
||||
if (this is CompositeIdeaKotlinDependencyTransformer) {
|
||||
return CompositeIdeaKotlinDependencyTransformer(this.transformers + other)
|
||||
if (this is IdeaKpmCompositeDependencyTransformer) {
|
||||
return IdeaKpmCompositeDependencyTransformer(this.transformers + other)
|
||||
}
|
||||
|
||||
if (other is CompositeIdeaKotlinDependencyTransformer) {
|
||||
return CompositeIdeaKotlinDependencyTransformer(listOf(this) + other.transformers)
|
||||
if (other is IdeaKpmCompositeDependencyTransformer) {
|
||||
return IdeaKpmCompositeDependencyTransformer(listOf(this) + other.transformers)
|
||||
}
|
||||
|
||||
return CompositeIdeaKotlinDependencyTransformer(listOf(this, other))
|
||||
return IdeaKpmCompositeDependencyTransformer(listOf(this, other))
|
||||
}
|
||||
|
||||
private class CompositeIdeaKotlinDependencyTransformer(
|
||||
val transformers: List<IdeaKotlinDependencyTransformer>
|
||||
) : IdeaKotlinDependencyTransformer {
|
||||
private class IdeaKpmCompositeDependencyTransformer(
|
||||
val transformers: List<IdeaKpmDependencyTransformer>
|
||||
) : IdeaKpmDependencyTransformer {
|
||||
override fun transform(
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
|
||||
): Set<IdeaKpmDependency> {
|
||||
|
||||
+44
-44
@@ -13,86 +13,86 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.tooling.core.UnsafeApi
|
||||
|
||||
@OptIn(UnsafeApi::class)
|
||||
internal fun IdeaKotlinProjectModelBuilder.Companion.default(
|
||||
internal fun IdeaKpmProjectModelBuilder.Companion.default(
|
||||
extension: KotlinPm20ProjectExtension
|
||||
) = IdeaKotlinProjectModelBuilderImpl(extension).apply {
|
||||
) = IdeaKpmProjectModelBuilderImpl(extension).apply {
|
||||
val fragmentMetadataResolverFactory = GradleKpmFragmentGranularMetadataResolverFactory()
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinRefinesDependencyResolver,
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.SourceDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmRefinesDependencyResolver,
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.SourceDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinGranularFragmentDependencyResolver(fragmentMetadataResolverFactory),
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.SourceDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmGranularFragmentDependencyResolver(fragmentMetadataResolverFactory),
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.SourceDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinMetadataBinaryDependencyResolver(fragmentMetadataResolverFactory),
|
||||
constraint = !IdeaKotlinProjectModelBuilder.FragmentConstraint.isVariant,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmMetadataBinaryDependencyResolver(fragmentMetadataResolverFactory),
|
||||
constraint = !IdeaKpmProjectModelBuilder.FragmentConstraint.isVariant,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinOriginalMetadataDependencyResolver(fragmentMetadataResolverFactory),
|
||||
constraint = !IdeaKotlinProjectModelBuilder.FragmentConstraint.isVariant,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmOriginalMetadataDependencyResolver(fragmentMetadataResolverFactory),
|
||||
constraint = !IdeaKpmProjectModelBuilder.FragmentConstraint.isVariant,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinPlatformDependencyResolver(),
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.isVariant,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmPlatformDependencyResolver(),
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.isVariant,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinNativeStdlibDependencyResolver,
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.isNative,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmNativeStdlibDependencyResolver,
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.isNative,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinNativePlatformDependencyResolver(),
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.isNative,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmNativePlatformDependencyResolver(),
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.isNative,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinSourcesAndDocumentationResolver(),
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyResolutionPhase.PostDependencyResolution,
|
||||
level = IdeaKotlinProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
resolver = IdeaKpmSourcesAndDocumentationResolver(),
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyResolutionPhase.PostDependencyResolution,
|
||||
level = IdeaKpmProjectModelBuilder.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyTransformer(
|
||||
transformer = IdeaKotlinSinglePlatformStdlibCommonFilter,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyTransformationPhase.DependencyFilteringPhase,
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
transformer = IdeaKpmSinglePlatformStdlibCommonFilter,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyTransformationPhase.DependencyFilteringPhase,
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
)
|
||||
|
||||
registerDependencyTransformer(
|
||||
transformer = IdeaKotlinUnusedSourcesAndDocumentationFilter,
|
||||
phase = IdeaKotlinProjectModelBuilder.DependencyTransformationPhase.DependencyFilteringPhase,
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
transformer = IdeaKpmUnusedSourcesAndDocumentationFilter,
|
||||
phase = IdeaKpmProjectModelBuilder.DependencyTransformationPhase.DependencyFilteringPhase,
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
)
|
||||
|
||||
registerDependencyEffect(
|
||||
effect = IdeaKotlinDependencyLogger,
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
effect = IdeaKpmDependencyLogger,
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
)
|
||||
|
||||
registerDependencyEffect(
|
||||
effect = IdeaKotlinMissingFileDependencyLogger,
|
||||
constraint = IdeaKotlinProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
effect = IdeaKpmMissingFileDependencyLogger,
|
||||
constraint = IdeaKpmProjectModelBuilder.FragmentConstraint.unconstrained
|
||||
)
|
||||
}
|
||||
|
||||
+8
-8
@@ -16,25 +16,25 @@ import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.ObjectOutputStream
|
||||
|
||||
internal fun Project.locateOrRegisterBuildIdeaKotlinProjectModelTask(): TaskProvider<BuildIdeaKotlinProjectModelTask> {
|
||||
return locateOrRegisterTask(BuildIdeaKotlinProjectModelTask.defaultTaskName)
|
||||
internal fun Project.locateOrRegisterIdeaKpmBuildProjectModelTask(): TaskProvider<IdeaKpmBuildProjectModelTask> {
|
||||
return locateOrRegisterTask(IdeaKpmBuildProjectModelTask.defaultTaskName)
|
||||
}
|
||||
|
||||
internal open class BuildIdeaKotlinProjectModelTask : DefaultTask() {
|
||||
internal open class IdeaKpmBuildProjectModelTask : DefaultTask() {
|
||||
@OutputDirectory
|
||||
val outputDirectory = project.buildDir.resolve("ideaKotlinProjectModel")
|
||||
val outputDirectory = project.buildDir.resolve("ideaKpmProjectModel")
|
||||
|
||||
private val builder = project.pm20Extension.ideaKotlinProjectModelBuilder
|
||||
private val builder = project.pm20Extension.ideaKpmProjectModelBuilder
|
||||
|
||||
init {
|
||||
outputs.upToDateWhen { false }
|
||||
}
|
||||
|
||||
@TaskAction
|
||||
protected fun buildIdeaKotlinProjectModel() {
|
||||
protected fun buildIdeaKpmProjectModel() {
|
||||
outputDirectory.mkdirs()
|
||||
|
||||
val model = builder.buildIdeaKotlinProjectModel()
|
||||
val model = builder.buildIdeaKpmProjectModel()
|
||||
val textFile = outputDirectory.resolve("model.txt")
|
||||
textFile.writeText(model.toString())
|
||||
|
||||
@@ -49,6 +49,6 @@ internal open class BuildIdeaKotlinProjectModelTask : DefaultTask() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val defaultTaskName = "buildIdeaKotlinProjectModel"
|
||||
const val defaultTaskName = "buildIdeaKpmProjectModel"
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -8,14 +8,14 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
/**
|
||||
* An [IdeaKotlinDependencyEffect] is invoked last in the dependency resolution pipeline.
|
||||
* An [IdeaKpmDependencyEffect] is invoked last in the dependency resolution pipeline.
|
||||
* It is not intended/capable of changing the resolution result, but can trigger side-effects, being sure
|
||||
* that the dependency resolution result is final.
|
||||
*/
|
||||
fun interface IdeaKotlinDependencyEffect {
|
||||
fun interface IdeaKpmDependencyEffect {
|
||||
operator fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>)
|
||||
}
|
||||
|
||||
fun IdeaKotlinDependencyResolver.withEffect(effect: IdeaKotlinDependencyEffect) = IdeaKotlinDependencyResolver { fragment ->
|
||||
fun IdeaKpmDependencyResolver.withEffect(effect: IdeaKpmDependencyEffect) = IdeaKpmDependencyResolver { fragment ->
|
||||
this@withEffect.resolve(fragment).also { dependencies -> effect(fragment, dependencies) }
|
||||
}
|
||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
|
||||
|
||||
internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect {
|
||||
internal object IdeaKpmDependencyLogger : IdeaKpmDependencyEffect {
|
||||
override fun invoke(
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
|
||||
) {
|
||||
+2
-2
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule.Companion.mod
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleDependency
|
||||
|
||||
internal class IdeaKotlinGranularFragmentDependencyResolver(
|
||||
internal class IdeaKpmGranularFragmentDependencyResolver(
|
||||
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
) : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
|
||||
.filterIsInstance<ChooseVisibleSourceSets>()
|
||||
+2
-2
@@ -15,9 +15,9 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule.Companion.mod
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleDependency
|
||||
import org.jetbrains.kotlin.gradle.utils.withTemporaryDirectory
|
||||
|
||||
internal class IdeaKotlinMetadataBinaryDependencyResolver(
|
||||
internal class IdeaKpmMetadataBinaryDependencyResolver(
|
||||
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
) : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
|
||||
.filterIsInstance<ChooseVisibleSourceSets>()
|
||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
|
||||
|
||||
internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect {
|
||||
internal object IdeaKpmMissingFileDependencyLogger : IdeaKpmDependencyEffect {
|
||||
override fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>) {
|
||||
dependencies.filterIsInstance<IdeaKpmResolvedBinaryDependency>()
|
||||
.filter { !it.binaryFile.exists() }
|
||||
+1
-1
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.library.shortName
|
||||
import org.jetbrains.kotlin.library.uniqueName
|
||||
import java.io.File
|
||||
|
||||
internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependencyResolver {
|
||||
internal class IdeaKpmNativePlatformDependencyResolver : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
val konanTargets = fragment.containingVariants
|
||||
.map { it as? GradleKpmNativeVariantInternal ?: return emptySet() }
|
||||
+1
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal object IdeaKotlinNativeStdlibDependencyResolver : IdeaKotlinDependencyResolver {
|
||||
internal object IdeaKpmNativeStdlibDependencyResolver : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
return setOf(
|
||||
IdeaKpmResolvedBinaryDependencyImpl(
|
||||
+2
-2
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentGranularMeta
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
|
||||
|
||||
internal class IdeaKotlinOriginalMetadataDependencyResolver(
|
||||
internal class IdeaKpmOriginalMetadataDependencyResolver(
|
||||
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
) : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
|
||||
.filterIsInstance<KeepOriginalDependency>()
|
||||
+4
-4
@@ -12,7 +12,7 @@ import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
||||
import org.gradle.api.artifacts.component.ModuleComponentSelector
|
||||
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.gradle.internal.resolve.ModuleVersionResolveException
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinPlatformDependencyResolver.*
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmPlatformDependencyResolver.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttributesSetup
|
||||
|
||||
@@ -21,12 +21,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttribu
|
||||
* 'platform' binaries refer to actually linkable/executable artifacts (like .class files bundled as jar, or linkable native klibs)
|
||||
* This resolver is capable of resolving those artifacts even for non-variant "platform-like" fragments.
|
||||
* It will then use the [GradleKpmFragment.transitiveApiConfiguration] and [GradleKpmFragment.transitiveImplementationConfiguratione]'s
|
||||
* to resolve those binaries. See [IdeaKotlinPlatformDependencyResolver.ArtifactResolution.PlatformFragment]
|
||||
* to resolve those binaries. See [IdeaKpmPlatformDependencyResolver.ArtifactResolution.PlatformFragment]
|
||||
*/
|
||||
class IdeaKotlinPlatformDependencyResolver(
|
||||
class IdeaKpmPlatformDependencyResolver(
|
||||
private val binaryType: String = IdeaKpmDependency.CLASSPATH_BINARY_TYPE,
|
||||
private val artifactResolution: ArtifactResolution = ArtifactResolution.Variant()
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
) : IdeaKpmDependencyResolver {
|
||||
|
||||
sealed class ArtifactResolution {
|
||||
/**
|
||||
+17
-17
@@ -4,7 +4,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder.FragmentConstraint
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.native
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
@@ -13,17 +13,17 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
|
||||
import org.jetbrains.kotlin.project.model.KpmVariant
|
||||
import java.io.File
|
||||
|
||||
internal interface IdeaKotlinProjectModelBuildingContext {
|
||||
val dependencyResolver: IdeaKotlinDependencyResolver
|
||||
internal interface IdeaKpmProjectModelBuildingContext {
|
||||
val dependencyResolver: IdeaKpmDependencyResolver
|
||||
|
||||
companion object Empty : IdeaKotlinProjectModelBuildingContext {
|
||||
override val dependencyResolver: IdeaKotlinDependencyResolver = IdeaKotlinDependencyResolver.Empty
|
||||
companion object Empty : IdeaKpmProjectModelBuildingContext {
|
||||
override val dependencyResolver: IdeaKpmDependencyResolver = IdeaKpmDependencyResolver.Empty
|
||||
}
|
||||
}
|
||||
|
||||
interface IdeaKotlinProjectModelBuilder {
|
||||
interface IdeaKpmProjectModelBuilder {
|
||||
/**
|
||||
* Any [IdeaKotlinDependencyResolver] has to be registered for a given dependency resolution phase in which it participates
|
||||
* Any [IdeaKpmDependencyResolver] has to be registered for a given dependency resolution phase in which it participates
|
||||
* The resolution phases will be executed in the order of their enum's ordinal.
|
||||
*/
|
||||
enum class DependencyResolutionPhase {
|
||||
@@ -49,7 +49,7 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Any [IdeaKotlinDependencyResolver] has to be registered specifying a certain resolution level.
|
||||
* Any [IdeaKpmDependencyResolver] has to be registered specifying a certain resolution level.
|
||||
* Generally, all resolvers registered in a given resolution level will work collaboratively, meaning the dependency resolution
|
||||
* result is the aggregation of all resolvers running.
|
||||
*
|
||||
@@ -62,7 +62,7 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Any [IdeaKotlinDependencyTransformer] has to be registered for a given transformation phase.
|
||||
* Any [IdeaKpmDependencyTransformer] has to be registered for a given transformation phase.
|
||||
* The phases will be executed in the order of this enums ordinal.
|
||||
*/
|
||||
enum class DependencyTransformationPhase {
|
||||
@@ -73,7 +73,7 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
|
||||
/**
|
||||
* Dependency transformation phase that is free entirely free in its transformation type.
|
||||
* Note: Adding dependencies to the resolution result might most likely better be modelled as [IdeaKotlinDependencyResolver]
|
||||
* Note: Adding dependencies to the resolution result might most likely better be modelled as [IdeaKpmDependencyResolver]
|
||||
*/
|
||||
FreeDependencyTransformationPhase,
|
||||
|
||||
@@ -91,7 +91,7 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for scoping [IdeaKotlinDependencyResolver], [IdeaKotlinDependencyTransformer] and [IdeaKotlinDependencyEffect]
|
||||
* Used for scoping [IdeaKpmDependencyResolver], [IdeaKpmDependencyTransformer] and [IdeaKpmDependencyEffect]
|
||||
*/
|
||||
fun interface FragmentConstraint {
|
||||
operator fun invoke(fragment: GradleKpmFragment): Boolean
|
||||
@@ -105,7 +105,7 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
|
||||
@ExternalVariantApi
|
||||
fun registerDependencyResolver(
|
||||
resolver: IdeaKotlinDependencyResolver,
|
||||
resolver: IdeaKpmDependencyResolver,
|
||||
constraint: FragmentConstraint,
|
||||
phase: DependencyResolutionPhase,
|
||||
level: DependencyResolutionLevel = DependencyResolutionLevel.Default,
|
||||
@@ -113,29 +113,29 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
|
||||
@ExternalVariantApi
|
||||
fun registerDependencyTransformer(
|
||||
transformer: IdeaKotlinDependencyTransformer,
|
||||
transformer: IdeaKpmDependencyTransformer,
|
||||
constraint: FragmentConstraint,
|
||||
phase: DependencyTransformationPhase
|
||||
)
|
||||
|
||||
@ExternalVariantApi
|
||||
fun registerDependencyEffect(
|
||||
effect: IdeaKotlinDependencyEffect,
|
||||
effect: IdeaKpmDependencyEffect,
|
||||
constraint: FragmentConstraint
|
||||
)
|
||||
|
||||
fun buildIdeaKotlinProjectModel(): IdeaKpmProject
|
||||
fun buildIdeaKpmProjectModel(): IdeaKpmProject
|
||||
|
||||
companion object
|
||||
}
|
||||
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinProjectModel(extension: KotlinPm20ProjectExtension): IdeaKpmProject {
|
||||
internal fun IdeaKpmProjectModelBuildingContext.IdeaKpmProject(extension: KotlinPm20ProjectExtension): IdeaKpmProject {
|
||||
return IdeaKpmProjectImpl(
|
||||
gradlePluginVersion = extension.project.getKotlinPluginVersion(),
|
||||
coreLibrariesVersion = extension.coreLibrariesVersion,
|
||||
explicitApiModeCliOption = extension.explicitApi?.cliOption,
|
||||
kotlinNativeHome = File(extension.project.konanHome).absoluteFile,
|
||||
modules = extension.modules.map { module -> IdeaKotlinModule(module) }
|
||||
modules = extension.modules.map { module -> IdeaKpmModule(module) }
|
||||
)
|
||||
}
|
||||
|
||||
+23
-23
@@ -10,29 +10,29 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.tooling.provider.model.ToolingModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.*
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.tooling.core.UnsafeApi
|
||||
|
||||
internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods instead") constructor(
|
||||
internal class IdeaKpmProjectModelBuilderImpl @UnsafeApi("Use factory methods instead") constructor(
|
||||
private val extension: KotlinPm20ProjectExtension,
|
||||
) : ToolingModelBuilder, IdeaKotlinProjectModelBuilder {
|
||||
) : ToolingModelBuilder, IdeaKpmProjectModelBuilder {
|
||||
|
||||
private data class RegisteredDependencyResolver(
|
||||
val resolver: IdeaKotlinDependencyResolver,
|
||||
val resolver: IdeaKpmDependencyResolver,
|
||||
val constraint: FragmentConstraint,
|
||||
val phase: DependencyResolutionPhase,
|
||||
val level: DependencyResolutionLevel,
|
||||
)
|
||||
|
||||
private data class RegisteredDependencyTransformer(
|
||||
val transformer: IdeaKotlinDependencyTransformer,
|
||||
val transformer: IdeaKpmDependencyTransformer,
|
||||
val constraint: FragmentConstraint,
|
||||
val phase: DependencyTransformationPhase
|
||||
)
|
||||
|
||||
private data class RegisteredDependencyEffect(
|
||||
val effect: IdeaKotlinDependencyEffect,
|
||||
val effect: IdeaKpmDependencyEffect,
|
||||
val constraint: FragmentConstraint,
|
||||
)
|
||||
|
||||
@@ -41,7 +41,7 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||
|
||||
override fun registerDependencyResolver(
|
||||
resolver: IdeaKotlinDependencyResolver,
|
||||
resolver: IdeaKpmDependencyResolver,
|
||||
constraint: FragmentConstraint,
|
||||
phase: DependencyResolutionPhase,
|
||||
level: DependencyResolutionLevel
|
||||
@@ -52,7 +52,7 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
}
|
||||
|
||||
override fun registerDependencyTransformer(
|
||||
transformer: IdeaKotlinDependencyTransformer,
|
||||
transformer: IdeaKpmDependencyTransformer,
|
||||
constraint: FragmentConstraint,
|
||||
phase: DependencyTransformationPhase
|
||||
) {
|
||||
@@ -62,7 +62,7 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
}
|
||||
|
||||
override fun registerDependencyEffect(
|
||||
effect: IdeaKotlinDependencyEffect,
|
||||
effect: IdeaKpmDependencyEffect,
|
||||
constraint: FragmentConstraint
|
||||
) {
|
||||
registeredDependencyEffects.add(
|
||||
@@ -70,8 +70,8 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
)
|
||||
}
|
||||
|
||||
override fun buildIdeaKotlinProjectModel(): IdeaKpmProject {
|
||||
return Context().IdeaKotlinProjectModel(extension)
|
||||
override fun buildIdeaKpmProjectModel(): IdeaKpmProject {
|
||||
return Context().IdeaKpmProject(extension)
|
||||
}
|
||||
|
||||
override fun canBuild(modelName: String): Boolean =
|
||||
@@ -79,21 +79,21 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
|
||||
override fun buildAll(modelName: String, project: Project): IdeaKpmProject {
|
||||
check(project === extension.project) { "Expected project ${extension.project.path}, found ${project.path}" }
|
||||
return buildIdeaKotlinProjectModel()
|
||||
return buildIdeaKpmProjectModel()
|
||||
}
|
||||
|
||||
private inner class Context : IdeaKotlinProjectModelBuildingContext {
|
||||
private inner class Context : IdeaKpmProjectModelBuildingContext {
|
||||
override val dependencyResolver = createDependencyResolver()
|
||||
}
|
||||
|
||||
private fun createDependencyResolver(): IdeaKotlinDependencyResolver {
|
||||
return IdeaKotlinDependencyResolver(DependencyResolutionPhase.values().map { phase ->
|
||||
private fun createDependencyResolver(): IdeaKpmDependencyResolver {
|
||||
return IdeaKpmDependencyResolver(DependencyResolutionPhase.values().map { phase ->
|
||||
createDependencyResolver(phase)
|
||||
}).withTransformer(createDependencyTransformer())
|
||||
.withEffect(createDependencyEffect())
|
||||
}
|
||||
|
||||
private fun createDependencyResolver(phase: DependencyResolutionPhase) = IdeaKotlinDependencyResolver resolve@{ fragment ->
|
||||
private fun createDependencyResolver(phase: DependencyResolutionPhase) = IdeaKpmDependencyResolver resolve@{ fragment ->
|
||||
val applicableResolvers = registeredDependencyResolvers
|
||||
.filter { it.phase == phase }
|
||||
.filter { it.constraint(fragment) }
|
||||
@@ -103,7 +103,7 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
DependencyResolutionLevel.values().reversed().forEach { level ->
|
||||
val resolvers = applicableResolvers[level].orEmpty().map { it.resolver }
|
||||
if (resolvers.isNotEmpty()) {
|
||||
return@resolve IdeaKotlinDependencyResolver(resolvers).resolve(fragment)
|
||||
return@resolve IdeaKpmDependencyResolver(resolvers).resolve(fragment)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,15 +111,15 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
emptySet()
|
||||
}
|
||||
|
||||
private fun createDependencyTransformer(): IdeaKotlinDependencyTransformer {
|
||||
return IdeaKotlinDependencyTransformer(DependencyTransformationPhase.values().map { phase ->
|
||||
private fun createDependencyTransformer(): IdeaKpmDependencyTransformer {
|
||||
return IdeaKpmDependencyTransformer(DependencyTransformationPhase.values().map { phase ->
|
||||
createDependencyTransformer(phase)
|
||||
})
|
||||
}
|
||||
|
||||
private fun createDependencyTransformer(phase: DependencyTransformationPhase): IdeaKotlinDependencyTransformer {
|
||||
return IdeaKotlinDependencyTransformer { fragment, dependencies ->
|
||||
IdeaKotlinDependencyTransformer(
|
||||
private fun createDependencyTransformer(phase: DependencyTransformationPhase): IdeaKpmDependencyTransformer {
|
||||
return IdeaKpmDependencyTransformer { fragment, dependencies ->
|
||||
IdeaKpmDependencyTransformer(
|
||||
registeredDependencyTransformers
|
||||
.filter { it.phase == phase }
|
||||
.filter { it.constraint(fragment) }
|
||||
@@ -128,7 +128,7 @@ internal class IdeaKotlinProjectModelBuilderImpl @UnsafeApi("Use factory methods
|
||||
}
|
||||
}
|
||||
|
||||
private fun createDependencyEffect(): IdeaKotlinDependencyEffect = IdeaKotlinDependencyEffect { fragment, dependencies ->
|
||||
private fun createDependencyEffect(): IdeaKpmDependencyEffect = IdeaKpmDependencyEffect { fragment, dependencies ->
|
||||
registeredDependencyEffects
|
||||
.filter { it.constraint(fragment) }
|
||||
.forEach { it.effect(fragment, dependencies) }
|
||||
+2
-2
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver {
|
||||
internal object IdeaKpmRefinesDependencyResolver : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> = fragment.refinesClosure
|
||||
.map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet()
|
||||
|
||||
private fun createRefinesDependency(fragment: GradleKpmFragment): IdeaKpmDependency {
|
||||
return IdeaKpmFragmentDependencyImpl(
|
||||
type = IdeaKpmFragmentDependency.Type.Refines,
|
||||
coordinates = IdeaKotlinFragmentCoordinates(fragment)
|
||||
coordinates = IdeaKpmFragmentCoordinates(fragment)
|
||||
)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
|
||||
|
||||
internal object IdeaKotlinSinglePlatformStdlibCommonFilter : IdeaKotlinDependencyTransformer {
|
||||
internal object IdeaKpmSinglePlatformStdlibCommonFilter : IdeaKpmDependencyTransformer {
|
||||
private const val stdlibCoordinatesGroup = "org.jetbrains.kotlin"
|
||||
private val stdlibCoordinatesModules = setOf("kotlin-stdlib-common", "kotlin-test-common", "kotlin-test-annotations-common")
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmVariant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
|
||||
|
||||
internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver {
|
||||
internal class IdeaKpmSourcesAndDocumentationResolver : IdeaKpmDependencyResolver {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKpmDependency> {
|
||||
if (fragment is GradleKpmVariant) {
|
||||
return resolve(fragment.project, fragment.compileDependenciesConfiguration)
|
||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal object IdeaKotlinUnusedSourcesAndDocumentationFilter : IdeaKotlinDependencyTransformer {
|
||||
internal object IdeaKpmUnusedSourcesAndDocumentationFilter : IdeaKpmDependencyTransformer {
|
||||
override fun transform(
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKpmDependency>
|
||||
): Set<IdeaKpmDependency> {
|
||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput
|
||||
|
||||
internal fun IdeaKotlinCompilationOutput(compilation: KotlinCompilationOutput): IdeaKpmCompilationOutput {
|
||||
internal fun IdeaKpmCompilationOutput(compilation: KotlinCompilationOutput): IdeaKpmCompilationOutput {
|
||||
return IdeaKpmCompilationOutputImpl(
|
||||
classesDirs = compilation.classesDirs.toSet(),
|
||||
resourcesDir = compilation.resourcesDir
|
||||
+11
-11
@@ -8,16 +8,16 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.tooling.core.emptyExtras
|
||||
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKpmFragment {
|
||||
return if (fragment is GradleKpmVariant) buildIdeaKotlinVariant(fragment)
|
||||
else buildIdeaKotlinFragment(fragment)
|
||||
internal fun IdeaKpmProjectModelBuildingContext.IdeaKpmFragment(fragment: GradleKpmFragment): IdeaKpmFragment {
|
||||
return if (fragment is GradleKpmVariant) buildIdeaKpmVariant(fragment)
|
||||
else buildIdeaKpmFragment(fragment)
|
||||
}
|
||||
|
||||
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKpmFragment {
|
||||
private fun IdeaKpmProjectModelBuildingContext.buildIdeaKpmFragment(fragment: GradleKpmFragment): IdeaKpmFragment {
|
||||
return IdeaKpmFragmentImpl(
|
||||
coordinates = IdeaKotlinFragmentCoordinates(fragment),
|
||||
platforms = fragment.containingVariants.map { variant -> IdeaKotlinPlatform(variant) }.toSet(),
|
||||
languageSettings = IdeaKotlinLanguageSettings(fragment.languageSettings),
|
||||
coordinates = IdeaKpmFragmentCoordinates(fragment),
|
||||
platforms = fragment.containingVariants.map { variant -> IdeaKpmPlatform(variant) }.toSet(),
|
||||
languageSettings = IdeaKpmLanguageSettings(fragment.languageSettings),
|
||||
dependencies = dependencyResolver.resolve(fragment).toList(),
|
||||
sourceDirectories = fragment.kotlinSourceRoots.sourceDirectories.files.toList().map { file -> IdeaKpmSourceDirectoryImpl(file) },
|
||||
resourceDirectories = emptyList(), // TODO
|
||||
@@ -25,11 +25,11 @@ private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragme
|
||||
)
|
||||
}
|
||||
|
||||
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinVariant(variant: GradleKpmVariant): IdeaKpmVariant {
|
||||
private fun IdeaKpmProjectModelBuildingContext.buildIdeaKpmVariant(variant: GradleKpmVariant): IdeaKpmVariant {
|
||||
return IdeaKpmVariantImpl(
|
||||
fragment = buildIdeaKotlinFragment(variant),
|
||||
platform = IdeaKotlinPlatform(variant),
|
||||
fragment = buildIdeaKpmFragment(variant),
|
||||
platform = IdeaKpmPlatform(variant),
|
||||
variantAttributes = variant.variantAttributes.mapKeys { (key, _) -> key.uniqueName },
|
||||
compilationOutputs = IdeaKotlinCompilationOutput(variant.compilationOutputs)
|
||||
compilationOutputs = IdeaKpmCompilationOutput(variant.compilationOutputs)
|
||||
)
|
||||
}
|
||||
+2
-2
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal fun IdeaKotlinFragmentCoordinates(fragment: GradleKpmFragment): IdeaKpmFragmentCoordinates {
|
||||
internal fun IdeaKpmFragmentCoordinates(fragment: GradleKpmFragment): IdeaKpmFragmentCoordinates {
|
||||
return IdeaKpmFragmentCoordinatesImpl(
|
||||
module = IdeaKotlinModuleCoordinates(fragment.containingModule),
|
||||
module = IdeaKpmModuleCoordinates(fragment.containingModule),
|
||||
fragmentName = fragment.name
|
||||
)
|
||||
}
|
||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.project.model.LanguageSettings
|
||||
|
||||
internal fun IdeaKotlinLanguageSettings(languageSettings: LanguageSettings): IdeaKpmLanguageSettings {
|
||||
internal fun IdeaKpmLanguageSettings(languageSettings: LanguageSettings): IdeaKpmLanguageSettings {
|
||||
return IdeaKpmLanguageSettingsImpl(
|
||||
languageVersion = languageSettings.languageVersion,
|
||||
apiVersion = languageSettings.apiVersion,
|
||||
+3
-3
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: GradleKpmModule): IdeaKpmModule {
|
||||
internal fun IdeaKpmProjectModelBuildingContext.IdeaKpmModule(module: GradleKpmModule): IdeaKpmModule {
|
||||
return IdeaKpmModuleImpl(
|
||||
coordinates = IdeaKotlinModuleCoordinates(module),
|
||||
fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) }
|
||||
coordinates = IdeaKpmModuleCoordinates(module),
|
||||
fragments = module.fragments.toList().map { fragment -> IdeaKpmFragment(fragment) }
|
||||
)
|
||||
}
|
||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
|
||||
internal fun IdeaKotlinModuleCoordinates(module: GradleKpmModule): IdeaKpmModuleCoordinates {
|
||||
internal fun IdeaKpmModuleCoordinates(module: GradleKpmModule): IdeaKpmModuleCoordinates {
|
||||
return IdeaKpmModuleCoordinatesImpl(
|
||||
buildId = module.project.currentBuildId().name,
|
||||
projectPath = module.project.path,
|
||||
+2
-2
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.konan.target.HostManager
|
||||
|
||||
@Suppress("unused")
|
||||
/* Receiver acts as scope, or key to that function */
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: GradleKpmVariant): IdeaKpmPlatform {
|
||||
internal fun IdeaKpmProjectModelBuildingContext.IdeaKpmPlatform(variant: GradleKpmVariant): IdeaKpmPlatform {
|
||||
when (variant) {
|
||||
is GradleKpmJvmVariant -> return IdeaKpmPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
|
||||
is GradleKpmNativeVariantInternal -> return IdeaKpmPlatform.native(variant.konanTarget.name)
|
||||
@@ -29,7 +29,7 @@ internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: G
|
||||
|
||||
/* Fallback calculation based on 'platformType' alone */
|
||||
/* This is a last line of defence, not expected to be actually executed */
|
||||
assert(false) { "Unable to build 'IdeaKotlinPlatform' from variant ${variant.path}" }
|
||||
assert(false) { "Unable to build 'IdeaKpmPlatform' from variant ${variant.path}" }
|
||||
return when (variant.platformType) {
|
||||
KotlinPlatformType.common -> throw IllegalArgumentException("Unexpected platformType 'common' for variant ${variant.name}")
|
||||
KotlinPlatformType.jvm -> IdeaKpmPlatform.jvm(JvmTarget.DEFAULT.name)
|
||||
+5
-5
@@ -18,9 +18,9 @@ import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.pm20Extension
|
||||
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmProjectModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.default
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.locateOrRegisterBuildIdeaKotlinProjectModelTask
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.locateOrRegisterIdeaKpmBuildProjectModelTask
|
||||
import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -82,8 +82,8 @@ abstract class KotlinPm20GradlePlugin @Inject constructor(
|
||||
}
|
||||
|
||||
private fun setupToolingModelBuilder(project: Project) {
|
||||
toolingModelBuilderRegistry.register(project.pm20Extension.ideaKotlinProjectModelBuilder)
|
||||
project.locateOrRegisterBuildIdeaKotlinProjectModelTask()
|
||||
toolingModelBuilderRegistry.register(project.pm20Extension.ideaKpmProjectModelBuilder)
|
||||
project.locateOrRegisterIdeaKpmBuildProjectModelTask()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ open class KotlinPm20ProjectExtension(project: Project) : KotlinTopLevelExtensio
|
||||
|
||||
internal val kpmModelContainer = GradleKpmDefaultProjectModelContainer.create(project)
|
||||
|
||||
internal val ideaKotlinProjectModelBuilder by lazy { IdeaKotlinProjectModelBuilder.default(this) }
|
||||
internal val ideaKpmProjectModelBuilder by lazy { IdeaKpmProjectModelBuilder.default(this) }
|
||||
|
||||
val modules: NamedDomainObjectContainer<GradleKpmModule>
|
||||
get() = project.kpmModules
|
||||
|
||||
+2
-2
@@ -27,6 +27,6 @@ fun Project.applyKpmPlugin(configure: KotlinPm20ProjectExtension.() -> Unit = {}
|
||||
return (extensions.getByName("kotlin") as KotlinPm20ProjectExtension).also(configure)
|
||||
}
|
||||
|
||||
fun KotlinPm20ProjectExtension.buildIdeaKotlinProjectModel(): IdeaKpmProject {
|
||||
return ideaKotlinProjectModelBuilder.buildIdeaKotlinProjectModel()
|
||||
fun KotlinPm20ProjectExtension.buildIdeaKpmProjectModel(): IdeaKpmProject {
|
||||
return ideaKpmProjectModelBuilder.buildIdeaKpmProjectModel()
|
||||
}
|
||||
|
||||
+4
-4
@@ -9,7 +9,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.gradle.kotlin.dsl.create
|
||||
import org.jetbrains.kotlin.gradle.kpm.AbstractKpmExtensionTest
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKpmProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.deserialize
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.serialize
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmIosX64Variant
|
||||
@@ -19,13 +19,13 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class IdeaKotlinProjectModelSerializableTest : AbstractKpmExtensionTest() {
|
||||
class IdeaKpmProjectModelSerializableTest : AbstractKpmExtensionTest() {
|
||||
|
||||
@Test
|
||||
fun `test - serialize and deserialize - empty project`() {
|
||||
project.evaluate()
|
||||
project.repositories.mavenLocal()
|
||||
assertSerializeAndDeserializeEquals(kotlin.buildIdeaKotlinProjectModel())
|
||||
assertSerializeAndDeserializeEquals(kotlin.buildIdeaKpmProjectModel())
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -48,7 +48,7 @@ class IdeaKotlinProjectModelSerializableTest : AbstractKpmExtensionTest() {
|
||||
}
|
||||
|
||||
project.evaluate()
|
||||
assertSerializeAndDeserializeEquals(kotlin.buildIdeaKotlinProjectModel())
|
||||
assertSerializeAndDeserializeEquals(kotlin.buildIdeaKpmProjectModel())
|
||||
}
|
||||
|
||||
private fun assertSerializeAndDeserializeEquals(model: IdeaKpmProject) {
|
||||
+3
-3
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.commonizer.stdlib
|
||||
import org.jetbrains.kotlin.gradle.android.androidPrototype
|
||||
import org.jetbrains.kotlin.gradle.assumeAndroidSdkAvailable
|
||||
import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKpmProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsModule
|
||||
@@ -51,7 +51,7 @@ class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyR
|
||||
}
|
||||
}
|
||||
|
||||
kotlin.buildIdeaKotlinProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
kotlin.buildIdeaKpmProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
module.assertContainsFragment("common").assertResolvedBinaryDependencies(
|
||||
CLASSPATH_BINARY_TYPE,
|
||||
"com.arkivanov.mvikotlin:mvikotlin:3.0.0-beta01:main:commonMain",
|
||||
@@ -197,7 +197,7 @@ class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyR
|
||||
/* Android requires project to evaluate */
|
||||
project.evaluate()
|
||||
|
||||
kotlin.buildIdeaKotlinProjectModel().assertIsNotEmpty().assertContainsModule("main").let { module ->
|
||||
kotlin.buildIdeaKpmProjectModel().assertIsNotEmpty().assertContainsModule("main").let { module ->
|
||||
listOf("common", "jvm").forEach { fragmentName ->
|
||||
module.assertContainsFragment(fragmentName).assertResolvedBinaryDependencies(
|
||||
CLASSPATH_BINARY_TYPE,
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKpmProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertFragmentDependencies
|
||||
@@ -78,7 +78,7 @@ class SimpleProjectToProjectDependencyResolutionTest : AbstractLightweightIdeaDe
|
||||
}
|
||||
}
|
||||
|
||||
consumerKotlin.buildIdeaKotlinProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
consumerKotlin.buildIdeaKpmProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
fun ifTestModule(vararg any: Any?) =
|
||||
listOf(*any).takeIf { module.name == GradleKpmModule.TEST_MODULE_NAME }
|
||||
|
||||
|
||||
+4
-4
@@ -9,7 +9,7 @@ package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.enableDefaultStdlibDependency
|
||||
import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.buildIdeaKpmProjectModel
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmDependency.Companion.CLASSPATH_BINARY_TYPE
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.IdeaKpmBinaryDependencyMatcher
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment
|
||||
@@ -44,7 +44,7 @@ class StdlibKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependen
|
||||
}
|
||||
}
|
||||
|
||||
kotlin.buildIdeaKotlinProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
kotlin.buildIdeaKpmProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
module.assertContainsFragment("common").assertResolvedBinaryDependencies(
|
||||
CLASSPATH_BINARY_TYPE,
|
||||
"org.jetbrains.kotlin:kotlin-stdlib-common:1.6.10"
|
||||
@@ -88,7 +88,7 @@ class StdlibKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependen
|
||||
}
|
||||
}
|
||||
|
||||
kotlin.buildIdeaKotlinProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
kotlin.buildIdeaKpmProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
module.assertContainsFragment("common").assertResolvedBinaryDependencies(
|
||||
CLASSPATH_BINARY_TYPE,
|
||||
"org.jetbrains.kotlin:kotlin-stdlib-common:1.6.10",
|
||||
@@ -140,7 +140,7 @@ class StdlibKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependen
|
||||
}
|
||||
}
|
||||
|
||||
kotlin.buildIdeaKotlinProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
kotlin.buildIdeaKpmProjectModel().assertIsNotEmpty().modules.forEach { module ->
|
||||
module.assertContainsFragment("common").assertResolvedBinaryDependencies(
|
||||
CLASSPATH_BINARY_TYPE,
|
||||
"org.jetbrains.kotlin:kotlin-stdlib-common:${project.getKotlinPluginVersion()}"
|
||||
|
||||
Reference in New Issue
Block a user