diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 23c107d597d..0535e50613c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -98,7 +98,8 @@ open class KotlinJsProjectExtension : // target is public property // Users can write kotlin.target and it should work // So call of target should init default canfiguration - private var _target: KotlinJsTargetDsl? = null + internal var _target: KotlinJsTargetDsl? = null + private set override var target: KotlinJsTargetDsl get() { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt index 701d48bf806..8889a8cb150 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt @@ -39,6 +39,23 @@ open class KotlinJsPlugin( defaultJsCompilerType = PropertiesProvider(project).jsCompiler } + project.afterEvaluate { + checkNotNull(kotlinExtension._target) { + """ + Need to initialize js target. + Use + kotlin { + js { + // Choose sub target (or both), for which js is necessary + // Affect in which tests are executed and final dist (in browser is only one bundle file) + browser() + nodejs() + } + } + """.trimIndent() + } + } + // Explicitly create configurations for main and test // It is because in single platform we want to declare dependencies with methods not with strings in Kotlin DSL // implementation("foo") instead of "implementation"("foo") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index 318d70819d3..f33ab5b59af 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -107,7 +107,8 @@ constructor( override val browser by browserLazyDelegate - override val isBrowserConfigured: Boolean = browserLazyDelegate.isInitialized() + override val isBrowserConfigured: Boolean + get() = browserLazyDelegate.isInitialized() override fun browser(body: KotlinJsBrowserDsl.() -> Unit) { body(browser) @@ -129,7 +130,8 @@ constructor( override val nodejs by nodejsLazyDelegate - override val isNodejsConfigured: Boolean = nodejsLazyDelegate.isInitialized() + override val isNodejsConfigured: Boolean + get() = nodejsLazyDelegate.isInitialized() override fun nodejs(body: KotlinJsNodeDsl.() -> Unit) { body(nodejs) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt index d04840111b9..2f42f2d636d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt @@ -12,6 +12,7 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.removeJsCompilerSuffix +import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTargetConfigurator import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset @@ -39,6 +40,25 @@ open class KotlinJsTargetPreset( this.irTarget = irPreset?.createTarget( lowerCamelCaseName(name.removeJsCompilerSuffix(KotlinJsCompilerType.legacy), KotlinJsCompilerType.ir.name) ) + + project.whenEvaluated { + if (!isBrowserConfigured && !isNodejsConfigured) { + project.logger.warn( + """ + Choose sub target (or both), for which js is necessary + In next releases it will be error + Use + kotlin { + js { + // Affect in which tests are executed and final dist (in browser is only one bundle file) + browser() + nodejs() + } + } + """.trimIndent() + ) + } + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index 3f500cd81d1..8618f1a68b8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -61,7 +61,8 @@ constructor( override val browser by browserLazyDelegate - override val isBrowserConfigured: Boolean = browserLazyDelegate.isInitialized() + override val isBrowserConfigured: Boolean + get() = browserLazyDelegate.isInitialized() override fun browser(body: KotlinJsBrowserDsl.() -> Unit) { body(browser) @@ -82,7 +83,8 @@ constructor( override val nodejs by nodejsLazyDelegate - override val isNodejsConfigured: Boolean = nodejsLazyDelegate.isInitialized() + override val isNodejsConfigured: Boolean + get() = nodejsLazyDelegate.isInitialized() override fun nodejs(body: KotlinJsNodeDsl.() -> Unit) { body(nodejs) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt index cff883fef1a..b665a2097e2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt @@ -6,13 +6,10 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType -import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset -import org.jetbrains.kotlin.gradle.plugin.removeJsCompilerSuffix import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName open class KotlinJsIrTargetPreset( @@ -28,7 +25,28 @@ open class KotlinJsIrTargetPreset( get() = KotlinPlatformType.js override fun instantiateTarget(name: String): KotlinJsIrTarget { - return project.objects.newInstance(KotlinJsIrTarget::class.java, project, platformType, mixedMode) + return project.objects.newInstance(KotlinJsIrTarget::class.java, project, platformType, mixedMode).apply { + if (!mixedMode) { + project.whenEvaluated { + if (!isBrowserConfigured && !isNodejsConfigured) { + project.logger.warn( + """ + Choose sub target (or both), for which js is necessary + In next releases it will be error + Use + kotlin { + js { + // Affect in which tests are executed and final dist (in browser is only one bundle file) + browser() + nodejs() + } + } + """.trimIndent() + ) + } + } + } + } } override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator =