Skip to content

Commit 243b078

Browse files
committed
cache, invalidate, and restore generated files from CodeGenerationExtensionc
1 parent bd7a576 commit 243b078

File tree

25 files changed

+2136
-86
lines changed

25 files changed

+2136
-86
lines changed

build-logic/conventions/src/main/kotlin/com/squareup/anvil/conventions/BasePlugin.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.squareup.anvil.conventions
22

3+
import com.rickbusarow.kgx.buildDir
34
import com.rickbusarow.kgx.extras
45
import com.rickbusarow.kgx.fromInt
56
import com.rickbusarow.kgx.javaExtension
@@ -124,6 +125,7 @@ abstract class BasePlugin : Plugin<Project> {
124125
* so that there is no shared mutable state.
125126
*/
126127
private fun configureBuildDirs(target: Project) {
128+
127129
when {
128130
!target.isInAnvilBuild() -> return
129131

@@ -135,6 +137,12 @@ abstract class BasePlugin : Plugin<Project> {
135137
target.layout.buildDirectory.set(target.file("build/included-build"))
136138
}
137139
}
140+
141+
// Set the kase working directory ('<build directory>/kase') as a System property,
142+
// so that it's in the right place for projects with relocated directories.
143+
target.tasks.withType(Test::class.java).configureEach { task ->
144+
task.systemProperty("kase.baseWorkingDir", target.buildDir().resolve("kase"))
145+
}
138146
}
139147

140148
/**

compiler-api/api/compiler-api.api

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public abstract interface class com/squareup/anvil/compiler/api/AnvilContext {
4343
public abstract fun getGenerateFactories ()Z
4444
public abstract fun getGenerateFactoriesOnly ()Z
4545
public abstract fun getModule ()Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;
46+
public abstract fun getTrackSourceFiles ()Z
4647
}
4748

4849
public abstract interface class com/squareup/anvil/compiler/api/CodeGenerator : com/squareup/anvil/compiler/api/AnvilApplicabilityChecker {
@@ -56,20 +57,24 @@ public final class com/squareup/anvil/compiler/api/CodeGeneratorKt {
5657
public static final fun createGeneratedFile (Lcom/squareup/anvil/compiler/api/CodeGenerator;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)Lcom/squareup/anvil/compiler/api/GeneratedFileWithSources;
5758
}
5859

59-
public abstract interface class com/squareup/anvil/compiler/api/FileWithContent {
60+
public abstract interface class com/squareup/anvil/compiler/api/FileWithContent : java/lang/Comparable {
61+
public abstract fun compareTo (Lcom/squareup/anvil/compiler/api/FileWithContent;)I
6062
public abstract fun component1 ()Ljava/io/File;
6163
public abstract fun component2 ()Ljava/lang/String;
6264
public abstract fun getContent ()Ljava/lang/String;
6365
public abstract fun getFile ()Ljava/io/File;
6466
}
6567

6668
public final class com/squareup/anvil/compiler/api/FileWithContent$DefaultImpls {
69+
public static fun compareTo (Lcom/squareup/anvil/compiler/api/FileWithContent;Lcom/squareup/anvil/compiler/api/FileWithContent;)I
6770
public static fun component1 (Lcom/squareup/anvil/compiler/api/FileWithContent;)Ljava/io/File;
6871
public static fun component2 (Lcom/squareup/anvil/compiler/api/FileWithContent;)Ljava/lang/String;
6972
}
7073

7174
public final class com/squareup/anvil/compiler/api/GeneratedFile : com/squareup/anvil/compiler/api/FileWithContent {
7275
public fun <init> (Ljava/io/File;Ljava/lang/String;)V
76+
public fun compareTo (Lcom/squareup/anvil/compiler/api/FileWithContent;)I
77+
public synthetic fun compareTo (Ljava/lang/Object;)I
7378
public final fun component1 ()Ljava/io/File;
7479
public final fun component2 ()Ljava/lang/String;
7580
public final fun copy (Ljava/io/File;Ljava/lang/String;)Lcom/squareup/anvil/compiler/api/GeneratedFile;
@@ -83,6 +88,8 @@ public final class com/squareup/anvil/compiler/api/GeneratedFile : com/squareup/
8388

8489
public final class com/squareup/anvil/compiler/api/GeneratedFileWithSources : com/squareup/anvil/compiler/api/FileWithContent {
8590
public fun <init> (Ljava/io/File;Ljava/lang/String;Ljava/util/Set;)V
91+
public fun compareTo (Lcom/squareup/anvil/compiler/api/FileWithContent;)I
92+
public synthetic fun compareTo (Ljava/lang/Object;)I
8693
public fun component1 ()Ljava/io/File;
8794
public fun component2 ()Ljava/lang/String;
8895
public final fun component3 ()Ljava/util/Set;

compiler-utils/src/testFixtures/java/com/squareup/anvil/compiler/internal/testing/AnvilCompilation.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,21 @@ public class AnvilCompilation internal constructor(
8484
anvilComponentRegistrar.addCodeGenerators(mode.codeGenerators)
8585
pluginOptions +=
8686
listOf(
87+
PluginOption(
88+
pluginId = anvilCommandLineProcessor.pluginId,
89+
optionName = "gradle-project-dir",
90+
optionValue = workingDir.absolutePath,
91+
),
8792
PluginOption(
8893
pluginId = anvilCommandLineProcessor.pluginId,
8994
optionName = "src-gen-dir",
9095
optionValue = File(workingDir, "build/anvil").absolutePath,
9196
),
97+
PluginOption(
98+
pluginId = anvilCommandLineProcessor.pluginId,
99+
optionName = "anvil-cache-dir",
100+
optionValue = File(workingDir, "build/anvil-cache").absolutePath,
101+
),
92102
PluginOption(
93103
pluginId = anvilCommandLineProcessor.pluginId,
94104
optionName = "generate-dagger-factories",

compiler/api/compiler.api

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ public final class com/squareup/anvil/compiler/AnvilComponentRegistrar : org/jet
1717

1818
public final class com/squareup/anvil/compiler/CommandLineOptions {
1919
public static final field Companion Lcom/squareup/anvil/compiler/CommandLineOptions$Companion;
20-
public synthetic fun <init> (ZZZLcom/squareup/anvil/compiler/api/AnvilBackend;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
20+
public synthetic fun <init> (ZZZZLcom/squareup/anvil/compiler/api/AnvilBackend;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
2121
public final fun getBackend ()Lcom/squareup/anvil/compiler/api/AnvilBackend;
2222
public final fun getDisableComponentMerging ()Z
2323
public final fun getGenerateFactories ()Z
2424
public final fun getGenerateFactoriesOnly ()Z
25+
public final fun getTrackSourceFiles ()Z
2526
}
2627

2728
public final class com/squareup/anvil/compiler/CommandLineOptions$Companion {

compiler/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,13 @@ dependencies {
5353

5454
testImplementation(testFixtures(project(":compiler-utils")))
5555
testImplementation(libs.dagger2.compiler)
56+
testImplementation(libs.kase)
57+
testImplementation(libs.kotest.assertions.core.jvm)
5658
testImplementation(libs.kotlin.annotationProcessingEmbeddable)
5759
testImplementation(libs.kotlin.compileTesting)
5860
testImplementation(libs.kotlin.compileTesting.ksp)
59-
testImplementation(libs.ksp.compilerPlugin)
6061
testImplementation(libs.kotlin.compiler)
6162
testImplementation(libs.kotlin.test)
63+
testImplementation(libs.ksp.compilerPlugin)
6264
testImplementation(libs.truth)
6365
}

compiler/src/main/java/com/squareup/anvil/compiler/AnvilCommandLineProcessor.kt

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,18 @@ import org.jetbrains.kotlin.compiler.plugin.CliOption
77
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
88
import org.jetbrains.kotlin.config.CompilerConfiguration
99
import org.jetbrains.kotlin.config.CompilerConfigurationKey
10+
import java.io.File
1011

1112
internal const val srcGenDirName = "src-gen-dir"
12-
internal val srcGenDirKey = CompilerConfigurationKey.create<String>("anvil $srcGenDirName")
13+
internal val srcGenDirKey = CompilerConfigurationKey.create<File>("anvil $srcGenDirName")
14+
15+
internal const val anvilCacheDirName = "anvil-cache-dir"
16+
internal val anvilCacheDirKey =
17+
CompilerConfigurationKey.create<File>("anvil $anvilCacheDirName")
18+
19+
internal const val gradleProjectDirName = "gradle-project-dir"
20+
internal val gradleProjectDirKey =
21+
CompilerConfigurationKey.create<File>("anvil $gradleProjectDirName")
1322

1423
internal const val generateDaggerFactoriesName = "generate-dagger-factories"
1524
internal val generateDaggerFactoriesKey =
@@ -39,13 +48,27 @@ public class AnvilCommandLineProcessor : CommandLineProcessor {
3948
override val pluginId: String = "com.squareup.anvil.compiler"
4049

4150
override val pluginOptions: Collection<AbstractCliOption> = listOf(
51+
CliOption(
52+
optionName = gradleProjectDirName,
53+
valueDescription = "<file-path>",
54+
description = "The root directory of the consuming project",
55+
required = false,
56+
allowMultipleOccurrences = false,
57+
),
4258
CliOption(
4359
optionName = srcGenDirName,
4460
valueDescription = "<file-path>",
4561
description = "Path to directory in which Anvil specific code should be generated",
4662
required = false,
4763
allowMultipleOccurrences = false,
4864
),
65+
CliOption(
66+
optionName = anvilCacheDirName,
67+
valueDescription = "<file-path>",
68+
description = "Path to directory where Anvil stores its incremental compilation state",
69+
required = false,
70+
allowMultipleOccurrences = false,
71+
),
4972
CliOption(
5073
optionName = generateDaggerFactoriesName,
5174
valueDescription = "<true|false>",
@@ -94,7 +117,10 @@ public class AnvilCommandLineProcessor : CommandLineProcessor {
94117
configuration: CompilerConfiguration,
95118
) {
96119
when (option.optionName) {
97-
srcGenDirName -> configuration.put(srcGenDirKey, value)
120+
121+
gradleProjectDirName -> configuration.put(gradleProjectDirKey, File(value))
122+
srcGenDirName -> configuration.put(srcGenDirKey, File(value))
123+
anvilCacheDirName -> configuration.put(anvilCacheDirKey, File(value))
98124
generateDaggerFactoriesName ->
99125
configuration.put(generateDaggerFactoriesKey, value.toBoolean())
100126

compiler/src/main/java/com/squareup/anvil/compiler/AnvilComponentRegistrar.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.squareup.anvil.compiler.api.CodeGenerator
1111
import com.squareup.anvil.compiler.codegen.BindingModuleGenerator
1212
import com.squareup.anvil.compiler.codegen.CodeGenerationExtension
1313
import com.squareup.anvil.compiler.codegen.ContributesSubcomponentHandlerGenerator
14+
import com.squareup.anvil.compiler.codegen.incremental.ProjectDir
1415
import com.squareup.anvil.compiler.codegen.reference.RealAnvilModuleDescriptor
1516
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
1617
import org.jetbrains.kotlin.com.intellij.mock.MockProject
@@ -19,7 +20,6 @@ import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
1920
import org.jetbrains.kotlin.config.CompilerConfiguration
2021
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
2122
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
22-
import java.io.File
2323
import java.util.ServiceLoader
2424
import kotlin.LazyThreadSafetyMode.NONE
2525

@@ -62,7 +62,9 @@ public class AnvilComponentRegistrar : ComponentRegistrar {
6262
return
6363
}
6464

65-
val sourceGenFolder = File(configuration.getNotNull(srcGenDirKey))
65+
val sourceGenFolder = configuration.getNotNull(srcGenDirKey)
66+
val cacheDir = configuration.getNotNull(anvilCacheDirKey)
67+
val projectDir = ProjectDir(configuration.getNotNull(gradleProjectDirKey))
6668
val trackSourceFiles = configuration.getNotNull(trackSourceFilesKey)
6769

6870
val codeGenerators = loadCodeGenerators() +
@@ -82,10 +84,12 @@ public class AnvilComponentRegistrar : ComponentRegistrar {
8284
AnalysisHandlerExtension.registerExtensionFirst(
8385
project,
8486
CodeGenerationExtension(
85-
codeGenDir = sourceGenFolder,
8687
codeGenerators = codeGenerators,
8788
commandLineOptions = commandLineOptions,
8889
moduleDescriptorFactory = moduleDescriptorFactory,
90+
projectDir = projectDir,
91+
generatedDir = sourceGenFolder,
92+
cacheDir = cacheDir,
8993
trackSourceFiles = trackSourceFiles,
9094
),
9195
)

0 commit comments

Comments
 (0)