Fixed import of JS source sets with Both mode

Added flag indicating that source set naming contract is violated. In this case disambiguition classifier is ignored in IDE.
#KT-37562 Fixed
This commit is contained in:
Andrey Uskov
2020-04-28 22:13:51 +03:00
parent 1f40a71cbe
commit 96887d6e9f
5 changed files with 17 additions and 1 deletions
@@ -28,6 +28,7 @@ interface KotlinTargetComponent : SoftwareComponent {
interface KotlinTarget : Named, HasAttributes {
val targetName: String
val disambiguationClassifier: String? get() = targetName
val useDisambiguitionClassifierAsSourcesetNamePreffix: Boolean
val platformType: KotlinPlatformType
@@ -21,12 +21,16 @@ abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompila
protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<T>): String? =
target.targetName
// This function is used in IDE import in order to indicate that sourceSetName=disambiguitionClassifier+compilationName
protected open fun useDisambiguitionClassifierAsSourcesetNamePreffix() = true
abstract protected fun instantiateTarget(name: String): R
override fun createTarget(name: String): R {
val result = instantiateTarget(name).apply {
targetName = name
disambiguationClassifier = provideTargetDisambiguationClassifier(this@apply)
useDisambiguitionClassifierAsSourcesetNamePreffix = useDisambiguitionClassifierAsSourcesetNamePreffix()
preset = this@KotlinOnlyTargetPreset
val compilationFactory = createCompilationFactory(this)
@@ -44,6 +44,9 @@ abstract class AbstractKotlinTarget(
override val defaultConfigurationName: String
get() = disambiguateName("default")
override var useDisambiguitionClassifierAsSourcesetNamePreffix: Boolean = true
internal set
override val apiElementsConfigurationName: String
get() = disambiguateName("apiElements")
@@ -88,6 +88,9 @@ class KotlinJsSingleTargetPreset(
project,
kotlinPluginVersion
) {
override fun useDisambiguitionClassifierAsSourcesetNamePreffix() = false
// In a Kotlin/JS single-platform project, we don't need any disambiguation suffixes or prefixes in the names:
override fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<KotlinJsCompilation>): String? =
irPreset?.let {