diff --git a/seskar/seskar-gradle-plugin/src/main/kotlin/seskar/gradle/plugin/IncrementalSyncTask.ext.kt b/seskar/seskar-gradle-plugin/src/main/kotlin/seskar/gradle/plugin/IncrementalSyncTask.ext.kt index acca4605..e94b6a08 100644 --- a/seskar/seskar-gradle-plugin/src/main/kotlin/seskar/gradle/plugin/IncrementalSyncTask.ext.kt +++ b/seskar/seskar-gradle-plugin/src/main/kotlin/seskar/gradle/plugin/IncrementalSyncTask.ext.kt @@ -1,8 +1,11 @@ package seskar.gradle.plugin import org.gradle.api.file.Directory -import org.gradle.api.provider.Provider +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.internal.provider.ProviderInternal import org.jetbrains.kotlin.gradle.tasks.IncrementalSyncTask +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract private val ORIGINAL_FILE_FILTERS: List = GenerationOptions.entries @@ -15,15 +18,23 @@ internal fun IncrementalSyncTask.excludeOriginalSources() { private fun withDirectoryFilter( source: Any, ): Any { - if (source !is Provider<*>) + if (!isDirectoryProvider(source)) return source return source.map { value -> - if (value !is Directory) - return@map value - value.asFileTree.matching { exclude(ORIGINAL_FILE_FILTERS) } } } + +@OptIn(ExperimentalContracts::class) +private fun isDirectoryProvider( + source: Any?, +): Boolean { + contract { + returns(true) implies (source is DirectoryProperty) + } + + return source is ProviderInternal<*> && source.type == Directory::class.java +}