Skip to content

Commit

Permalink
Extract AnvilBackend enum reference
Browse files Browse the repository at this point in the history
  • Loading branch information
ZacSweers committed Aug 1, 2023
1 parent 6e223db commit 4ed03de
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.squareup.anvil.compiler.api

/** Possible modes of Anvil compilation. */
public enum class AnvilBackend {
/** Anvil runs as a direct compiler plugin inside compileKotlin tasks. */
EMBEDDED,

/** Anvil runs as a Kotlin Symbol Processor (KSP). */
KSP,
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public interface AnvilContext {
* There are occasions where consumers of Anvil are only interested in generating Dagger
* factories to speed up build times and don't want to make use of the other features. With this
* flag Anvil will only generate Dagger factories and skip all other steps. If this flag is set
* to `true`, then also [generateDaggerFactories] must be set to `true`.
* to `true`, then also [generateFactories] must be set to `true`.
*/
public val generateFactoriesOnly: Boolean

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public class AnvilCompilation internal constructor(
PluginOption(
pluginId = anvilCommandLineProcessor.pluginId,
optionName = "compilation-mode",
optionValue = mode.type.name.lowercase(Locale.US)
optionValue = mode.backend.name.lowercase(Locale.US)
)
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.squareup.anvil.compiler.internal.testing

import com.google.devtools.ksp.processing.SymbolProcessorProvider
import com.squareup.anvil.compiler.api.AnvilBackend
import com.squareup.anvil.compiler.api.AnvilBackend.EMBEDDED
import com.squareup.anvil.compiler.api.AnvilBackend.KSP
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.internal.testing.AnvilCompilationMode.Type.EMBEDDED
import com.squareup.anvil.compiler.internal.testing.AnvilCompilationMode.Type.KSP

sealed class AnvilCompilationMode(val type: Type) {
enum class Type {
EMBEDDED, KSP
}

sealed class AnvilCompilationMode(val backend: AnvilBackend) {
data class Embedded(
val codeGenerators: List<CodeGenerator> = emptyList()
) : AnvilCompilationMode(EMBEDDED)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.squareup.anvil.compiler

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.AnvilBackend
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
Expand Down Expand Up @@ -68,7 +69,7 @@ class AnvilCommandLineProcessor : CommandLineProcessor {
),
CliOption(
optionName = compilationModeName,
valueDescription = "<embedded|ksp>",
valueDescription = AnvilBackend.entries.joinToString("|", "<", ">"),
description = "Controls whether Anvil is running as an embedded plugin or as KSP.",
required = false,
allowMultipleOccurrences = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package com.squareup.anvil.compiler
import com.google.auto.service.AutoService
import com.squareup.anvil.annotations.ExperimentalAnvilApi
import com.squareup.anvil.compiler.CommandLineOptions.Companion.commandLineOptions
import com.squareup.anvil.compiler.api.AnvilBackend
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.codegen.BindingModuleGenerator
import com.squareup.anvil.compiler.codegen.CodeGenerationExtension
Expand Down Expand Up @@ -57,7 +58,7 @@ class AnvilComponentRegistrar : ComponentRegistrar {

// Everything below this point is only when running in embedded compilation mode. If running in
// KSP, there's nothing else to do.
if (commandLineOptions.compilationMode != "embedded") {
if (commandLineOptions.backend != AnvilBackend.EMBEDDED) {
return
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
package com.squareup.anvil.compiler

import com.squareup.anvil.compiler.api.AnvilBackend
import org.jetbrains.kotlin.config.CompilerConfiguration
import java.util.Locale

class CommandLineOptions private constructor(
val generateFactories: Boolean,
val generateFactoriesOnly: Boolean,
val disableComponentMerging: Boolean,
val compilationMode: String,
val backend: AnvilBackend,
) {
companion object {
val CompilerConfiguration.commandLineOptions: CommandLineOptions
get() = CommandLineOptions(
generateFactories = get(generateDaggerFactoriesKey, false),
generateFactoriesOnly = get(generateDaggerFactoriesOnlyKey, false),
disableComponentMerging = get(disableComponentMergingKey, false),
compilationMode = get(compilationModeKey, "embedded"),
backend = get(compilationModeKey, AnvilBackend.EMBEDDED.name)
.uppercase(Locale.US)
.let { value -> AnvilBackend.entries.find { it.name == value } }
?: error("Unknown backend option: $this"),
)
}
}

0 comments on commit 4ed03de

Please sign in to comment.