All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationSourceSetsContainerFactories.kt Maven / Gradle / Ivy

There is a newer version: 2.0.0-RC3
Show newest version
/*
 * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
 */

package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory

import com.android.build.gradle.api.BaseVariant
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
import org.jetbrains.kotlin.gradle.plugin.sources.android.kotlinAndroidSourceSetLayout
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName

internal class DefaultKotlinCompilationSourceSetsContainerFactory(
    private val defaultSourceSetNaming: DefaultSourceSetNaming = DefaultDefaultSourceSetNaming
) : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory {

    fun interface DefaultSourceSetNaming {
        fun defaultSourceSetName(target: KotlinTarget, compilationName: String): String
    }

    object DefaultDefaultSourceSetNaming : DefaultSourceSetNaming {
        override fun defaultSourceSetName(target: KotlinTarget, compilationName: String): String = lowerCamelCaseName(
            target.disambiguationClassifier.takeIf { target !is KotlinMetadataTarget },
            if (compilationName == KotlinCompilation.MAIN_COMPILATION_NAME && target is KotlinMetadataTarget)
                KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME
            else compilationName
        )
    }

    override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer {
        val defaultSourceSetName = defaultSourceSetNaming.defaultSourceSetName(target, compilationName)
        val defaultSourceSet = target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName)
        return KotlinCompilationSourceSetsContainer(defaultSourceSet)
    }
}

internal class AndroidCompilationSourceSetsContainerFactory(
    private val target: KotlinAndroidTarget, private val variant: BaseVariant
) : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory {
    override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer {
        val sourceSetName = target.project.kotlinAndroidSourceSetLayout.naming.defaultKotlinSourceSetName(this.target, variant)
            ?: lowerCamelCaseName(target.disambiguationClassifier, compilationName)
        return KotlinCompilationSourceSetsContainer(target.project.kotlinExtension.sourceSets.maybeCreate(sourceSetName))
    }
}

internal object JsCompilationSourceSetsContainerFactory : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory {
    override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer {
        val defaultSourceSetName = lowerCamelCaseName(
            if (target is KotlinJsTarget && target.irTarget != null) target.disambiguationClassifierInPlatform
            else target.disambiguationClassifier,
            compilationName
        )

        return KotlinCompilationSourceSetsContainer(target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName))
    }
}

internal object JsIrCompilationSourceSetsContainerFactory : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory {
    override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer {
        val defaultSourceSetName = lowerCamelCaseName(
            if (target is KotlinJsIrTarget && target.mixedMode) target.disambiguationClassifierInPlatform
            else target.disambiguationClassifier,
            compilationName
        )

        return KotlinCompilationSourceSetsContainer(target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName))
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy