From 788606445eae62492d5e8ce70eecfd1df1e095a5 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 17 Aug 2018 19:30:55 +0300 Subject: [PATCH] MPP: Support configurations with metadata --- .../KotlinMPPGradleProjectResolver.kt | 2 +- .../src/KotlinMPPGradleModelBuilder.kt | 18 ++++++++++++------ .../src/KotlinMPPGradleModelBuilder.kt.181 | 18 ++++++++++++------ idea/kotlin-gradle-tooling/src/utils.kt | 5 ++++- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt index bf997d991f9..c7e0bad36e1 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt @@ -628,7 +628,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { } private fun KotlinModule.fullName(simpleName: String = name) = when (this) { - is KotlinCompilation -> target.disambiguationClassifier?.let { it + simpleName.capitalize() } ?: simpleName + is KotlinCompilation -> compilationFullName(simpleName, target.disambiguationClassifier) else -> simpleName } diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index c49e6c52a55..709ad4252f5 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -164,7 +164,9 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { @Suppress("UNCHECKED_CAST") val gradleCompilations = (getCompilations.invoke(gradleTarget) as? NamedDomainObjectContainer)?.asMap?.values ?: emptyList() - val compilations = gradleCompilations.mapNotNull { buildCompilation(it, sourceSetMap, dependencyResolver, project) } + val compilations = gradleCompilations.mapNotNull { + buildCompilation(it, disambiguationClassifier, sourceSetMap, dependencyResolver, project) + } val jar = buildTargetJar(gradleTarget, project) val target = KotlinTargetImpl(gradleTarget.name, disambiguationClassifier, platform, compilations, jar) compilations.forEach { it.target = target } @@ -184,6 +186,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { private fun buildCompilation( gradleCompilation: Named, + classifier: String?, sourceSetMap: Map, dependencyResolver: DependencyResolver, project: Project @@ -200,12 +203,14 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { val output = buildCompilationOutput(gradleCompilation, compileKotlinTask) ?: return null val arguments = buildCompilationArguments(compileKotlinTask) ?: return null val dependencyClasspath = buildDependencyClasspath(compileKotlinTask) - val dependencies = buildCompilationDependencies(gradleCompilation, dependencyResolver, project) + val dependencies = buildCompilationDependencies(gradleCompilation, classifier, sourceSetMap, dependencyResolver, project) return KotlinCompilationImpl(gradleCompilation.name, kotlinSourceSets, dependencies, output, arguments, dependencyClasspath) } private fun buildCompilationDependencies( gradleCompilation: Named, + classifier: String?, + sourceSetMap: Map, dependencyResolver: DependencyResolver, project: Project ): Set { @@ -216,6 +221,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { this += buildDependencies( gradleCompilation, dependencyResolver, "getRuntimeDependencyConfigurationName", "RUNTIME", project ) + this += sourceSetMap[compilationFullName(gradleCompilation.name, classifier)]?.dependencies ?: emptySet() } } @@ -226,16 +232,16 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { ): Set { return LinkedHashSet().apply { this += buildDependencies( - gradleSourceSet, dependencyResolver, "getApiConfigurationName", "COMPILE", project + gradleSourceSet, dependencyResolver, "getApiMetadataConfigurationName", "COMPILE", project ) this += buildDependencies( - gradleSourceSet, dependencyResolver, "getImplementationConfigurationName", "COMPILE", project + gradleSourceSet, dependencyResolver, "getImplementationMetadataConfigurationName", "COMPILE", project ) this += buildDependencies( - gradleSourceSet, dependencyResolver, "getCompileOnlyConfigurationName", "COMPILE", project + gradleSourceSet, dependencyResolver, "getCompileOnlyMetadataConfigurationName", "COMPILE", project ) this += buildDependencies( - gradleSourceSet, dependencyResolver, "getRuntimeOnlyConfigurationName", "RUNTIME", project + gradleSourceSet, dependencyResolver, "getRuntimeOnlyMetadataConfigurationName", "RUNTIME", project ) } } diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 index 93135400c31..45cd6e292e2 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 @@ -164,7 +164,9 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { @Suppress("UNCHECKED_CAST") val gradleCompilations = (getCompilations.invoke(gradleTarget) as? NamedDomainObjectContainer)?.asMap?.values ?: emptyList() - val compilations = gradleCompilations.mapNotNull { buildCompilation(it, sourceSetMap, dependencyResolver, project) } + val compilations = gradleCompilations.mapNotNull { + buildCompilation(it, disambiguationClassifier, sourceSetMap, dependencyResolver, project) + } val jar = buildTargetJar(gradleTarget, project) val target = KotlinTargetImpl(gradleTarget.name, disambiguationClassifier, platform, compilations, jar) compilations.forEach { it.target = target } @@ -184,6 +186,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { private fun buildCompilation( gradleCompilation: Named, + classifier: String?, sourceSetMap: Map, dependencyResolver: DependencyResolver, project: Project @@ -200,12 +203,14 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { val output = buildCompilationOutput(gradleCompilation, compileKotlinTask) ?: return null val arguments = buildCompilationArguments(compileKotlinTask) ?: return null val dependencyClasspath = buildDependencyClasspath(compileKotlinTask) - val dependencies = buildCompilationDependencies(gradleCompilation, dependencyResolver, project) + val dependencies = buildCompilationDependencies(gradleCompilation, classifier, sourceSetMap, dependencyResolver, project) return KotlinCompilationImpl(gradleCompilation.name, kotlinSourceSets, dependencies, output, arguments, dependencyClasspath) } private fun buildCompilationDependencies( gradleCompilation: Named, + classifier: String?, + sourceSetMap: Map, dependencyResolver: DependencyResolver, project: Project ): Set { @@ -216,6 +221,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { this += buildDependencies( gradleCompilation, dependencyResolver, "getRuntimeDependencyConfigurationName", "RUNTIME", project ) + this += sourceSetMap[compilationFullName(gradleCompilation.name, classifier)]?.dependencies ?: emptySet() } } @@ -226,16 +232,16 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { ): Set { return LinkedHashSet().apply { this += buildDependencies( - gradleSourceSet, dependencyResolver, "getApiConfigurationName", "COMPILE", project + gradleSourceSet, dependencyResolver, "getApiMetadataConfigurationName", "COMPILE", project ) this += buildDependencies( - gradleSourceSet, dependencyResolver, "getImplementationConfigurationName", "COMPILE", project + gradleSourceSet, dependencyResolver, "getImplementationMetadataConfigurationName", "COMPILE", project ) this += buildDependencies( - gradleSourceSet, dependencyResolver, "getCompileOnlyConfigurationName", "COMPILE", project + gradleSourceSet, dependencyResolver, "getCompileOnlyMetadataConfigurationName", "COMPILE", project ) this += buildDependencies( - gradleSourceSet, dependencyResolver, "getRuntimeOnlyConfigurationName", "RUNTIME", project + gradleSourceSet, dependencyResolver, "getRuntimeOnlyMetadataConfigurationName", "RUNTIME", project ) } } diff --git a/idea/kotlin-gradle-tooling/src/utils.kt b/idea/kotlin-gradle-tooling/src/utils.kt index 7a04f48a1a0..ec2041712b1 100644 --- a/idea/kotlin-gradle-tooling/src/utils.kt +++ b/idea/kotlin-gradle-tooling/src/utils.kt @@ -17,4 +17,7 @@ fun Class<*>.getDeclaredMethodOrNull(name: String, vararg parameterTypes: Class< getDeclaredMethod(name, *parameterTypes)?.also { it.isAccessible = true } } catch (e: Exception) { null - } \ No newline at end of file + } + +fun compilationFullName(simpleName: String, classifier: String?) = + if (classifier != null) classifier + simpleName.capitalize() else simpleName \ No newline at end of file