diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt index 64076a2c43f..0af158c6300 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt @@ -229,6 +229,12 @@ class VariantAwareDependenciesIT : BaseGradleIT() { testResolveAllConfigurations("sample-lib") } + @Test + fun testJvmWithJavaProjectCanBeResolvedInAllConfigurations() = + with(Project("new-mpp-jvm-with-java-multi-module", GradleVersionRequired.AtLeast("4.7"))) { + testResolveAllConfigurations("app") + } + @Test fun testConfigurationsWithNoExplicitUsageResolveRuntime() = // Starting with Gradle 5.0, plain Maven dependencies are represented as two variants, and resolving them to the API one leads diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/app/build.gradle new file mode 100644 index 00000000000..2782d9efa63 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/app/build.gradle @@ -0,0 +1,15 @@ +apply plugin: 'kotlin-multiplatform' + +kotlin { + sourceSets { + commonMain.dependencies { + api project(':lib') + api kotlin('stdlib-common') + } + } + targetFromPreset(presets.jvmWithJava, 'jvm') { + compilations.main.defaultSourceSet.dependencies { + api kotlin('stdlib') + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/app/src/main/java/B.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/app/src/main/java/B.kt new file mode 100644 index 00000000000..5df814851bf --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/app/src/main/java/B.kt @@ -0,0 +1,8 @@ +package com.exmaple.app + +import com.example.lib.* + +fun main() { + println(A()) + println(hello()) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/build.gradle new file mode 100644 index 00000000000..5c3a6c8ce59 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/build.gradle @@ -0,0 +1,16 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + mavenLocal() + jcenter() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/build.gradle new file mode 100644 index 00000000000..23bc5f852d3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/build.gradle @@ -0,0 +1,14 @@ +apply plugin: 'kotlin-multiplatform' + +kotlin { + sourceSets { + commonMain.dependencies { + api kotlin('stdlib-common') + } + } + targetFromPreset(presets.jvmWithJava, 'jvm') { + compilations.main.defaultSourceSet.dependencies { + api kotlin('stdlib') + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/commonMain/kotlin/AExpected.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/commonMain/kotlin/AExpected.kt new file mode 100644 index 00000000000..013ac81a272 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/commonMain/kotlin/AExpected.kt @@ -0,0 +1,3 @@ +package com.example.lib + +expect fun hello(): String \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/main/java/A.java b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/main/java/A.java new file mode 100644 index 00000000000..d5fb8ac3582 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/main/java/A.java @@ -0,0 +1,5 @@ +package com.example.lib; + +public class A { + String hello = AKt.hello(); +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/main/java/A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/main/java/A.kt new file mode 100644 index 00000000000..3e1e9e9dad1 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/lib/src/main/java/A.kt @@ -0,0 +1,3 @@ +package com.example.lib + +actual fun hello(): String = "Hello, JVM!" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/settings.gradle new file mode 100644 index 00000000000..421e7f78bb0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-jvm-with-java-multi-module/settings.gradle @@ -0,0 +1 @@ +include 'lib', 'app' \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt index ac330fde923..3194401fe83 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt @@ -125,7 +125,7 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools override fun setUpDependencyResolution(variant: BaseVariant, compilation: KotlinJvmAndroidCompilation) { val project = compilation.target.project - AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation, compilation.target, project.configurations) + AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation) compilation.compileDependencyFiles = variant.compileConfiguration.apply { usesPlatformOf(compilation.target) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 2b74b13a0ce..69913d487e5 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -382,7 +382,6 @@ internal abstract class AbstractKotlinPlugin( { compilation -> buildSourceSetProcessor(project, compilation, kotlinPluginVersion) } ) - configureAttributes(target) configureProjectGlobalSettings(project, kotlinPluginVersion) registry.register(KotlinModelBuilder(kotlinPluginVersion, null)) } @@ -399,6 +398,7 @@ internal abstract class AbstractKotlinPlugin( ) { setUpJavaSourceSets(target) configureSourceSetDefaults(target, buildSourceSetProcessor) + configureAttributes(target) } private fun configureClassInspectionForIC(project: Project) { @@ -476,7 +476,7 @@ internal abstract class AbstractKotlinPlugin( // Setup the consuming configurations: project.dependencies.attributesSchema.attribute(KotlinPlatformType.attribute) kotlinTarget.compilations.all { compilation -> - AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation, kotlinTarget, project.configurations) + AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation) } project.configurations.getByName("default").apply { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 38dafc86b54..9a7af32165c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -99,7 +99,7 @@ abstract class AbstractKotlinTargetConfigurator val project = target.project target.compilations.all { compilation -> - defineConfigurationsForCompilation(compilation, target, project.configurations) + defineConfigurationsForCompilation(compilation) if (createDefaultSourceSets) { project.kotlinExtension.sourceSets.maybeCreate(compilation.defaultSourceSetName).also { sourceSet -> @@ -233,10 +233,11 @@ abstract class AbstractKotlinTargetConfigurator const val testTaskNameSuffix = "test" fun defineConfigurationsForCompilation( - compilation: KotlinCompilation<*>, - target: KotlinTarget, - configurations: ConfigurationContainer + compilation: KotlinCompilation<*> ) { + val target = compilation.target + val configurations = target.project.configurations + val compileConfiguration = configurations.maybeCreate(compilation.deprecatedCompileConfigurationName).apply { setupAsLocalTargetSpecificConfigurationIfSupported(target) isVisible = false diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt index 2f5d2e97158..b8bd27083f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt @@ -215,11 +215,6 @@ class KotlinJvmWithJavaTargetPreset( Kotlin2JvmSourceSetProcessor(project, KotlinTasksProvider(name), compilation, kotlinPluginVersion) } - target.compilations.all { compilation -> - // Set up dependency resolution using platforms: - AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation, target, project.configurations) - } - target.compilations.getByName("test").run { val main = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)