diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt index fbb71a1344f..3f4b957c3e7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt @@ -5,8 +5,9 @@ package org.jetbrains.kotlin.gradle -import org.jetbrains.kotlin.gradle.util.findFileByName +import org.jetbrains.kotlin.gradle.targets.js.dukat.ExternalsOutputFormat import org.jetbrains.kotlin.gradle.util.createTempDir +import org.jetbrains.kotlin.gradle.util.findFileByName import org.jetbrains.kotlin.gradle.util.modify import org.junit.Test import java.io.File @@ -85,6 +86,31 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() { ) ) } + + @Test + fun testConfigurationCacheDukatSrc() = testConfigurationCacheDukat() + + @Test + fun testConfigurationCacheDukatBinaries() = testConfigurationCacheDukat { + gradleProperties().modify { + """ + ${ExternalsOutputFormat.externalsOutputFormatProperty}=${ExternalsOutputFormat.BINARY} + """.trimIndent() + } + } + + private fun testConfigurationCacheDukat(configure: Project.() -> Unit = {}) = + with(Project("both", directoryPrefix = "dukat-integration")) { + setupWorkingDir() + gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) + gradleSettingsScript().modify(::transformBuildScriptWithPluginsDsl) + configure(this) + testConfigurationCacheOf( + "irGenerateExternalsIntegrated", executedTaskNames = listOf( + ":irGenerateExternalsIntegrated" + ) + ) + } } abstract class AbstractConfigurationCacheIT : BaseGradleIT() { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt index 36205b328e3..1bea05e1fe6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt @@ -147,16 +147,12 @@ internal fun gradleModelPostProcess( when (externalsOutputFormat) { ExternalsOutputFormat.SOURCE -> compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir) ExternalsOutputFormat.BINARY -> { - npmProject.externalsDir - .listFiles() - ?.filter { it.isCompatibleArchive } - ?.forEach { - project.dependencies.add( - compilation.compileDependencyConfigurationName, - project.files(it) - ) + project.dependencies.add( + compilation.compileDependencyConfigurationName, + project.fileTree(npmProject.externalsDir).include { + it.file.isCompatibleArchive } - + ) } } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt index cbfbfc0faed..3fa42a6bc0e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt @@ -49,7 +49,7 @@ class DukatExecutor( npmProject.externalsDir.deleteRecursively() DukatRunner( - npmProject.compilation, + npmProject, typeDefinitions.map { it.file }, externalsOutputFormat, npmProject.externalsDir, @@ -60,7 +60,5 @@ class DukatExecutor( } versionFile.writeText(version) - - gradleModelPostProcess(externalsOutputFormat, npmProject) } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt index 9b6bcc42820..1d93d1a22ac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt @@ -7,12 +7,11 @@ package org.jetbrains.kotlin.gradle.targets.js.dukat import org.gradle.internal.service.ServiceRegistry import org.jetbrains.kotlin.gradle.internal.execWithProgress -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation -import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject import java.io.File class DukatRunner( - val compilation: KotlinJsCompilation, + val npmProject: NpmProject, val dTsFiles: Collection, val externalsOutputFormat: ExternalsOutputFormat, val destDir: File, @@ -45,7 +44,7 @@ class DukatRunner( args.addAll(dTsFiles.map { it.absolutePath }) - compilation.npmProject.useTool( + npmProject.useTool( exec, "dukat/bin/dukat-cli.js", listOf(), diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt index 7508157c168..3c31161084a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies +import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import java.io.File abstract class DukatTask( @@ -29,6 +30,8 @@ abstract class DukatTask( compilation.disambiguatedName } + private val npmProject by lazy { compilation.npmProject } + @get:Internal override val nodeModulesRequired: Boolean get() = true @@ -103,7 +106,7 @@ abstract class DukatTask( } DukatRunner( - compilation, + npmProject, dTsFiles, externalsOutputFormat, destinationDir, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 90cea197919..4a0a0e44d0c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -176,15 +176,12 @@ internal class KotlinCompilationNpmResolver( // We don't have `kotlin-js-test-runner` in NPM yet all.dependencies.add(nodeJs.versions.kotlinJsTestRunner.createDependency(project)) - npmProject.externalsDir - .listFiles() - ?.filter { it.isCompatibleArchive } - ?.forEach { - project.dependencies.add( - all.name, - project.files(it) - ) + project.dependencies.add( + all.name, + project.fileTree(npmProject.externalsDir).include { + it.file.isCompatibleArchive } + ) return all }