diff --git a/gradle-plugin/api/gradle-plugin.api b/gradle-plugin/api/gradle-plugin.api index ac205de96..531d6bc74 100644 --- a/gradle-plugin/api/gradle-plugin.api +++ b/gradle-plugin/api/gradle-plugin.api @@ -8,8 +8,6 @@ public final class com/squareup/anvil/plugin/AndroidVariantFilter : com/squareup public fun getName ()Ljava/lang/String; public fun getSyncGeneratedSources ()Z public fun getTrackSourceFiles ()Z - public fun getUseKspBackend ()Z - public fun getUseKspComponentMergingBackend ()Z public fun setAddOptionalAnnotations (Z)V public fun setDisableComponentMerging (Z)V public fun setGenerateDaggerFactories (Z)V @@ -17,8 +15,6 @@ public final class com/squareup/anvil/plugin/AndroidVariantFilter : com/squareup public fun setIgnore (Z)V public fun setSyncGeneratedSources (Z)V public fun setTrackSourceFiles (Z)V - public fun setUseKspBackend (Z)V - public fun setUseKspComponentMergingBackend (Z)V } public abstract class com/squareup/anvil/plugin/AnvilExtension { @@ -29,11 +25,6 @@ public abstract class com/squareup/anvil/plugin/AnvilExtension { public final fun getGenerateDaggerFactoriesOnly ()Lorg/gradle/api/provider/Property; public final fun getSyncGeneratedSources ()Lorg/gradle/api/provider/Property; public final fun getTrackSourceFiles ()Lorg/gradle/api/provider/Property; - public final fun getUseKspBackend ()Lorg/gradle/api/provider/Property; - public final fun getUseKspComponentMergingBackend ()Lorg/gradle/api/provider/Property; - public final fun useKsp (Z)V - public final fun useKsp (ZZ)V - public static synthetic fun useKsp$default (Lcom/squareup/anvil/plugin/AnvilExtension;ZZILjava/lang/Object;)V public final fun variantFilter (Lorg/gradle/api/Action;)V } @@ -46,8 +37,6 @@ public final class com/squareup/anvil/plugin/JvmVariantFilter : com/squareup/anv public fun getName ()Ljava/lang/String; public fun getSyncGeneratedSources ()Z public fun getTrackSourceFiles ()Z - public fun getUseKspBackend ()Z - public fun getUseKspComponentMergingBackend ()Z public fun setAddOptionalAnnotations (Z)V public fun setDisableComponentMerging (Z)V public fun setGenerateDaggerFactories (Z)V @@ -55,8 +44,6 @@ public final class com/squareup/anvil/plugin/JvmVariantFilter : com/squareup/anv public fun setIgnore (Z)V public fun setSyncGeneratedSources (Z)V public fun setTrackSourceFiles (Z)V - public fun setUseKspBackend (Z)V - public fun setUseKspComponentMergingBackend (Z)V } public abstract interface class com/squareup/anvil/plugin/VariantFilter : org/gradle/api/Named { @@ -67,8 +54,6 @@ public abstract interface class com/squareup/anvil/plugin/VariantFilter : org/gr public abstract fun getIgnore ()Z public abstract fun getSyncGeneratedSources ()Z public abstract fun getTrackSourceFiles ()Z - public abstract fun getUseKspBackend ()Z - public abstract fun getUseKspComponentMergingBackend ()Z public abstract fun setAddOptionalAnnotations (Z)V public abstract fun setDisableComponentMerging (Z)V public abstract fun setGenerateDaggerFactories (Z)V @@ -76,7 +61,5 @@ public abstract interface class com/squareup/anvil/plugin/VariantFilter : org/gr public abstract fun setIgnore (Z)V public abstract fun setSyncGeneratedSources (Z)V public abstract fun setTrackSourceFiles (Z)V - public abstract fun setUseKspBackend (Z)V - public abstract fun setUseKspComponentMergingBackend (Z)V } diff --git a/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/DaggerFactoryGenerationDetectionTest.kt b/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/DaggerFactoryGenerationDetectionTest.kt index 71ef37ff9..1e2db70c3 100644 --- a/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/DaggerFactoryGenerationDetectionTest.kt +++ b/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/DaggerFactoryGenerationDetectionTest.kt @@ -242,7 +242,7 @@ class DaggerFactoryGenerationDetectionTest : BaseGradleTest() { ): Stream<out DynamicNode> = asContainers { versions -> cartesianProduct( listOf(true, false), - listOf(true, false), + listOf(false), listOf(true, false), listOf(true, false), ) diff --git a/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/LifecycleTest.kt b/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/LifecycleTest.kt index 535157a61..e9b46ca37 100644 --- a/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/LifecycleTest.kt +++ b/gradle-plugin/src/gradleTest/java/com/squareup/anvil/plugin/LifecycleTest.kt @@ -411,10 +411,10 @@ class LifecycleTest : BaseGradleTest() { useKsp: Boolean, ) -> Unit, ): Stream<out DynamicNode> = asContainers { versions -> - listOf(true, false) + listOf(false) .asTests( testEnvironmentFactory = AnvilGradleTestEnvironment.Factory().wrap(versions), - testName = { useKsp -> if (useKsp) "KSP" else "Embedded" }, + testName = { _ -> "Embedded" }, testAction = { useKsp -> testAction(versions, useKsp) }, ) } diff --git a/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilExtension.kt b/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilExtension.kt index 284600c42..ba5829e81 100644 --- a/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilExtension.kt +++ b/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilExtension.kt @@ -1,17 +1,13 @@ package com.squareup.anvil.plugin -import com.google.devtools.ksp.gradle.KspExtension import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderFactory -import org.gradle.process.CommandLineArgumentProvider import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.androidJvm import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.jvm import org.jetbrains.kotlin.gradle.plugin.KotlinTarget @@ -22,21 +18,6 @@ public abstract class AnvilExtension @Inject constructor( objects: ObjectFactory, private val providers: ProviderFactory, ) { - - init { - val useKspBackend = providers.gradleProperty("com.squareup.anvil.useKspBackend") - .map { it.toBoolean() } - .getOrElse(false) - val useKspComponentMergingBackend = providers.gradleProperty( - "com.squareup.anvil.useKspComponentMergingBackend", - ) - .map { it.toBoolean() } - .getOrElse(false) - if (useKspBackend || useKspComponentMergingBackend) { - useKsp(useKspBackend, useKspComponentMergingBackend) - } - } - /** * Allows you to use Anvil to generate Factory classes that usually the Dagger annotation * processor would generate for `@Provides` methods, `@Inject` constructors and `@Inject` fields. @@ -140,101 +121,6 @@ public abstract class AnvilExtension @Inject constructor( public val trackSourceFiles: Property<Boolean> = objects.property(Boolean::class.java) .conventionFromProperty("com.squareup.anvil.trackSourceFiles", false) - /** - * @see useKsp - */ - public val useKspBackend: Property<Boolean> = objects.property(Boolean::class.java) - .convention(false) - - /** - * @see useKsp - */ - public val useKspComponentMergingBackend: Property<Boolean> = objects.property( - Boolean::class.java, - ).convention(false) - - /** - * Enables the new [KSP](https://github.com/google/ksp) backends for Anvil. Note that this - * requires the KSP plugin to already be on the buildscript classpath. - * - * These modes can optionally be enabled via these gradle properties: - * ```properties - * com.squareup.anvil.useKspBackend=true - * com.squareup.anvil.useKspComponentMergingBackend=true - * ``` - * - * @param contributesAndFactoryGeneration This is an experimental feature that - * replaces the previous `AnalysisHandlerExtension`-based backend, which is removed in Kotlin - * 2.0 and struggled with incremental compilation. - * @param componentMerging This is an experimental feature that currently does nothing. It's a - * placeholder for future work. Requires [disableComponentMerging] to be `false`. - */ - @JvmOverloads - public fun useKsp( - contributesAndFactoryGeneration: Boolean, - componentMerging: Boolean = false, - ) { - useKspBackend.setDisallowChanges(contributesAndFactoryGeneration) - useKspComponentMergingBackend.setDisallowChanges(componentMerging) - // Wire KSP - try { - project.pluginManager.apply("com.google.devtools.ksp") - } catch (e: Exception) { - // KSP not on the classpath, ask them to add it - error( - "Anvil's KSP backends require the KSP plugin to be applied to the project. " + - "Please apply the KSP Gradle plugin ('com.google.devtools.ksp') to your buildscript " + - "and try again.", - ) - } - // Add the KSP dependency to the appropriate configurations - // In KMP, we only add to androidJvm/jvm targets - val kExtension = project.kotlinExtension - if (kExtension is KotlinMultiplatformExtension) { - kExtension.targets - .matching { it.isSupportedType() } - .configureEach { - addKspDep(it.kspConfigName()) - } - } else { - addKspDep("ksp") - } - - val willHaveDaggerFactories = generateDaggerFactories.map { anvilGenerated -> - // If Anvil is creating factories due to `generateDaggerFactories`, then we're done. - // Otherwise, we have to check if the Dagger compiler dependency is in KSP's classpath. - anvilGenerated || kExtension.targets - .filter { it.isSupportedType() } - .any { target -> - target.compilations.any { c -> - // If using Anvil with KSP, Dagger factory generation can come from either KSP or KAPT. - c.kspConfigOrNull(project)?.hasDaggerCompilerDependency() == true || - c.kaptConfigOrNull(project)?.hasDaggerCompilerDependency() == true - } - } - } - - project.extensions.configure(KspExtension::class.java) { ksp -> - // Do not convert this to a lambda. - // It will leak the AnvilExtension instance and break configuration caching. - ksp.arg( - commandLineArgumentProvider( - "generate-dagger-factories" to generateDaggerFactories, - "generate-dagger-factories-only" to generateDaggerFactoriesOnly, - "disable-component-merging" to disableComponentMerging, - "will-have-dagger-factories" to willHaveDaggerFactories, - ), - ) - } - } - - private fun addKspDep(configurationName: String) { - project.dependencies.add( - configurationName, - "com.squareup.anvil:compiler:$VERSION", - ) - } - @Suppress("PropertyName") internal var _variantFilter: Action<VariantFilter>? = null @@ -267,25 +153,6 @@ public abstract class AnvilExtension @Inject constructor( } } -/** - * This function is propping up configuration caching in two ways: - * - * 1. It creates local references to the providers, - * so that we can pass them to the KSP task without a reference to `AnvilExtension`. - * 2. It creates the `CommandLineArgumentProvider` lambda outside the `AnvilExtension` class, - * so that we can't accidentally capture `AnvilExtension` in the lambda. - * - * [AnvilExtension] currently isn't serializable for configuration caching - * because of its `Project` property. - */ -private fun commandLineArgumentProvider( - vararg args: Pair<String, Provider<Boolean>>, -): CommandLineArgumentProvider { - return CommandLineArgumentProvider { - args.map { (arg, provider) -> "$arg=${provider.get()}" } - } -} - private val KotlinProjectExtension.targets: Iterable<KotlinTarget> get() = when (this) { is KotlinSingleTargetExtension<*> -> listOf(this.target) diff --git a/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilPlugin.kt b/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilPlugin.kt index 11e40d428..ed0c065a4 100644 --- a/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilPlugin.kt +++ b/gradle-plugin/src/main/java/com/squareup/anvil/plugin/AnvilPlugin.kt @@ -258,11 +258,11 @@ internal open class AnvilPlugin : KotlinCompilerPluginSupportPlugin { ), SubpluginOption( key = "analysis-backend", - lazy { if (variant.variantFilter.useKspBackend) "KSP" else "EMBEDDED" }, + lazy { "EMBEDDED" }, ), SubpluginOption( key = "merging-backend", - lazy { if (variant.variantFilter.useKspComponentMergingBackend) "KSP" else "IR" }, + lazy { "IR" }, ), ) } diff --git a/gradle-plugin/src/main/java/com/squareup/anvil/plugin/VariantFilter.kt b/gradle-plugin/src/main/java/com/squareup/anvil/plugin/VariantFilter.kt index d06b51db9..c5b52fc79 100644 --- a/gradle-plugin/src/main/java/com/squareup/anvil/plugin/VariantFilter.kt +++ b/gradle-plugin/src/main/java/com/squareup/anvil/plugin/VariantFilter.kt @@ -56,22 +56,6 @@ public interface VariantFilter : Named { * @see AnvilExtension.trackSourceFiles for more details. */ public var trackSourceFiles: Boolean - - /** - * Enables KSP code gen support for this variant. - * The default value comes from the [AnvilExtension]. - * - * @see AnvilExtension.useKspBackend for more details. - */ - public var useKspBackend: Boolean - - /** - * Enables KSP module merging support for this variant. - * The default value comes from the [AnvilExtension]. - * - * @see AnvilExtension.useKspComponentMergingBackend for more details. - */ - public var useKspComponentMergingBackend: Boolean } internal class CommonFilter( @@ -122,20 +106,6 @@ internal class CommonFilter( set(value) { trackSourceFilesOverride = value } - - private var useKspBackendOverride: Boolean? = null - override var useKspBackend: Boolean - get() = useKspBackendOverride ?: extension.useKspBackend.get() - set(value) { - useKspBackendOverride = value - } - - private var useKspComponentMergingBackendOverride: Boolean? = null - override var useKspComponentMergingBackend: Boolean - get() = useKspComponentMergingBackendOverride ?: extension.useKspComponentMergingBackend.get() - set(value) { - useKspComponentMergingBackendOverride = value - } } public class JvmVariantFilter internal constructor(