From 46f44763acc3e6b4ed3e4fbec47c0861ba357bb7 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Wed, 23 Mar 2022 19:02:56 +0100 Subject: [PATCH] Revert "Remove sourceFileExtensions input" This reverts commit f81e49f2104ffef7e4800f75f05782e6125d0dec. --- .../internal/kapt/KaptGenerateStubsTask.kt | 12 ---- .../gradle/plugin/mpp/kotlinCompilations.kt | 6 +- .../plugin/sources/DefaultKotlinSourceSet.kt | 6 +- .../internal/ScriptingGradleSubplugin.kt | 35 ++++++++++- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 58 ++++--------------- .../kotlin/gradle/utils/providerApiUtils.kt | 9 --- 6 files changed, 50 insertions(+), 76 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt index 549b9cf6594..fc79e07fd25 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt @@ -122,18 +122,6 @@ abstract class KaptGenerateStubsTask @Inject constructor( patternFilterable.include { it.isDirectory || it.file.isSourceRootAllowed() } } - @get:Internal - override val scriptSources: FileCollection = objectFactory.fileCollection() - - override val incrementalProps: List - get() = listOf( - sources, - javaSources, - commonSourceSet, - classpathSnapshotProperties.classpath, - classpathSnapshotProperties.classpathSnapshot - ) - override val javaSources: FileCollection = super.javaSources .asFileTree .matching { patternFilterable -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index 785be51fea1..1c4e0745359 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -164,11 +164,7 @@ internal fun addSourcesToKotlinCompileTask( // In this call, the super-implementation of `source` adds the directories files to the roots of the union file tree, // so it's OK to pass just the source roots. setSource(Callable(sources)) - with(sourceFileExtensions.toSet()) { - if (isNotEmpty()) { - include(flatMap { ext -> ext.fileExtensionCasePermutations().map { "**/*.$it" } }) - } - } + sourceFilesExtensions.addAll(sourceFileExtensions) // The `commonSourceSet` is passed to the compiler as-is, converted with toList commonSourceSet.from( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt index b129a65196a..17dfcfe15ec 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt @@ -59,7 +59,11 @@ class DefaultKotlinSourceSet( val intransitiveMetadataConfigurationName: String get() = lowerCamelCaseName(disambiguateName(INTRANSITIVE), METADATA_CONFIGURATION_NAME_SUFFIX) - override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name Kotlin source") + override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name Kotlin source").apply { + filter.include("**/*.java") + filter.include("**/*.kt") + filter.include("**/*.kts") + } override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt index 428656a0060..bc19b63376f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt @@ -68,7 +68,7 @@ class ScriptingGradleSubplugin : Plugin { discoveryClasspathConfiguration.allDependencies.isEmpty() -> { // skip further checks - user did not configured any discovery sources } - else -> task.scriptDefinitions.from(discoveryClasspathConfiguration) + else -> configureScriptsExtensions(project, javaPluginConvention, task.sourceSetName.get()) } } catch (e: IllegalStateException) { project.logger.warn("$SCRIPTING_LOG_PREFIX applied in the non-supported environment (error received: ${e.message})") @@ -85,6 +85,39 @@ class ScriptingGradleSubplugin : Plugin { } } } + + private fun configureScriptsExtensions( + project: Project, + javaPluginConvention: JavaPluginConvention, + sourceSetName: String + ) { + javaPluginConvention.sourceSets.findByName(sourceSetName)?.let { sourceSet -> + + val discoveryResultsConfigurationName = getDiscoveryResultsConfigurationName(sourceSetName) + + val kotlinSourceSet = sourceSet.getConvention(KOTLIN_DSL_NAME) as? KotlinSourceSet + if (kotlinSourceSet == null) { + project.logger.warn("$SCRIPTING_LOG_PREFIX kotlin source set not found: $project.$sourceSet, $MISCONFIGURATION_MESSAGE_SUFFIX") + } else { + val extensions by lazy { + val discoveryResultsConfiguration = project.configurations.findByName(discoveryResultsConfigurationName) + if (discoveryResultsConfiguration == null) { + project.logger.warn("$SCRIPTING_LOG_PREFIX discovery results not found: $project.$discoveryResultsConfigurationName, $MISCONFIGURATION_MESSAGE_SUFFIX") + emptySet() + } else { + discoveryResultsConfiguration.files.flatMapTo(HashSet()) { + it.readLines().filter(String::isNotBlank) + }.also { + kotlinSourceSet.addCustomSourceFilesExtensions(it.toList()) + project.logger.debug("$SCRIPTING_LOG_PREFIX $project.$sourceSet: discovered script extensions: $it") + } + } + } + kotlinSourceSet.kotlin.filter.include { it.file.extension in extensions } + } + } + } + } private const val MAIN_CONFIGURATION_NAME = "kotlinScriptDef" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index f1d964d2132..1064f5e8ff3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -18,7 +18,6 @@ import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider -import org.gradle.api.provider.SetProperty import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters import org.gradle.api.specs.Spec @@ -104,6 +103,12 @@ abstract class AbstractKotlinCompileTool @Inject constr { sourceFiles.asFileTree.matching(patternFilterable) } ) + @Deprecated("Use PatternFilterable methods to configure sources") + @get:Input + val sourceFilesExtensions: ListProperty = objectFactory + .listProperty(String::class.java) + .convention(DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS) + /** * Sets the source for this task. * The given source object is evaluated as per [org.gradle.api.Project.files]. @@ -742,7 +747,6 @@ abstract class KotlinCompile @Inject constructor( get() = listOf( sources, javaSources, - scriptSources, commonSourceSet, classpathSnapshotProperties.classpath, classpathSnapshotProperties.classpathSnapshot @@ -787,47 +791,10 @@ abstract class KotlinCompile @Inject constructor( @get:Internal internal abstract val jvmTargetValidationMode: Property - @get:Internal - internal val scriptDefinitions: ConfigurableFileCollection = objectFactory.fileCollection() - - @get:Input - @get:Optional - internal val scriptExtensions: SetProperty = objectFactory.setPropertyWithLazyValue { - scriptDefinitions - .map { definitionFile -> - definitionFile.readLines().filter(String::isNotBlank) - } - .flatten() - } - - private class ScriptFilterSpec( - private val scriptExtensions: SetProperty - ) : Spec { - override fun isSatisfiedBy(element: FileTreeElement): Boolean { - val extensions = scriptExtensions.get() - return extensions.isNotEmpty() && - (element.isDirectory || extensions.contains(element.file.extension)) - } - } - - private val scriptSourceFiles = objectFactory.fileCollection() - - @get:InputFiles - @get:SkipWhenEmpty - @get:IgnoreEmptyDirectories - @get:PathSensitive(PathSensitivity.RELATIVE) - internal open val scriptSources: FileCollection = scriptSourceFiles - .asFileTree - .matching { patternFilterable -> - patternFilterable.include(ScriptFilterSpec(scriptExtensions)) - } - init { incremental = true } - override fun skipCondition(): Boolean = sources.isEmpty && scriptSources.isEmpty - override fun createCompilerArgs(): K2JVMCompilerArguments = K2JVMCompilerArguments() @@ -862,7 +829,6 @@ abstract class KotlinCompile @Inject constructor( ) { validateKotlinAndJavaHasSameTargetCompatibility(args, kotlinSources) - val scriptSources = scriptSources.asFileTree.files val messageCollector = GradlePrintingMessageCollector(logger, args.allWarningsAsErrors) val outputItemCollector = OutputItemsCollectorImpl() val compilerRunner = compilerRunner.get() @@ -890,14 +856,12 @@ abstract class KotlinCompile @Inject constructor( - (classpathSnapshotProperties.classpathSnapshotDir.orNull?.asFile?.let { setOf(it) } ?: emptySet()), reportingSettings = reportingSettings(), incrementalCompilationEnvironment = icEnv, - kotlinScriptExtensions = scriptExtensions.get().toTypedArray() + kotlinScriptExtensions = sourceFilesExtensions.get().toTypedArray() ) logger.info("Kotlin source files: ${kotlinSources.joinToString()}") logger.info("Java source files: ${javaSources.files.joinToString()}") - logger.info("Script source files: ${scriptSources.joinToString()}") - logger.info("Script file extensions: ${scriptExtensions.get().joinToString()}") compilerRunner.runJvmCompilerAsync( - (kotlinSources + scriptSources).toList(), + kotlinSources.toList(), commonSourceSet.toList(), javaSources.files, // we need here only directories where Java sources are located javaPackagePrefix, @@ -987,17 +951,15 @@ abstract class KotlinCompile @Inject constructor( .matching(::javaFilesPatternFilter) ) - // override setSource to track Java and script sources as well + // override setSource to track Java sources as well override fun setSource(source: Any) { javaSourceFiles.from(source) - scriptSourceFiles.from(source) super.setSource(source) } - // override source to track Java and script sources as well + // override source to track Java sources as well override fun setSource(vararg source: Any) { javaSourceFiles.from(*source) - scriptSourceFiles.from(*source) super.setSource(*source) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index 30166fdbf4a..368b54363dd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -15,7 +15,6 @@ import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.provider.SetProperty import org.gradle.api.tasks.TaskProvider -import org.gradle.kotlin.dsl.setProperty import java.io.File import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty @@ -49,14 +48,6 @@ internal inline fun ObjectFactory.property(initialValue: T) = internal inline fun ObjectFactory.property(initialValue: Provider) = property().value(initialValue) -internal inline fun ObjectFactory.setPropertyWithValue( - initialValue: Provider> -) = setProperty().value(initialValue) - -internal inline fun ObjectFactory.setPropertyWithLazyValue( - noinline lazyValue: () -> Iterable -) = setPropertyWithValue(providerWithLazyConvention(lazyValue)) - internal inline fun ObjectFactory.propertyWithConvention( conventionValue: Provider ) = property().convention(conventionValue)