From 2b8aa42bc7ab8820ba8dd13104b47d55ee81425a Mon Sep 17 00:00:00 2001 From: Jiaxiang Chen Date: Mon, 6 Jun 2022 17:06:08 -0700 Subject: [PATCH] introduce processorName option for KSP. This option will allow users to specify certain processors(s) to be executed, if not specified, all processors found in apclasspath will be executed. (cherry picked from commit baab3d6b708c2033c3027ab4ea3d448becda463c) --- .../src/main/kotlin/com/google/devtools/ksp/KspOptions.kt | 8 ++++++++ .../devtools/ksp/KotlinSymbolProcessingExtension.kt | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common-util/src/main/kotlin/com/google/devtools/ksp/KspOptions.kt b/common-util/src/main/kotlin/com/google/devtools/ksp/KspOptions.kt index 83759d30a5..a4b91b575a 100644 --- a/common-util/src/main/kotlin/com/google/devtools/ksp/KspOptions.kt +++ b/common-util/src/main/kotlin/com/google/devtools/ksp/KspOptions.kt @@ -189,6 +189,13 @@ enum class KspCliOption( false ), + PROCESSOR_NAME_OPTION( + "processorNames", + "", + "only executes following processor(s)", + false + ), + KNOWN_MODIFIED_OPTION( "knownModified", "", @@ -259,6 +266,7 @@ fun KspOptions.Builder.processOption(option: KspCliOption, value: String) = when KspCliOption.PROCESSOR_CLASSPATH_OPTION -> processingClasspath += value.split(File.pathSeparator).map { File(it) } + KspCliOption.PROCESSOR_NAME_OPTION -> processors += value.split(File.pathSeparator) KspCliOption.CLASS_OUTPUT_DIR_OPTION -> classOutputDir = File(value) KspCliOption.JAVA_OUTPUT_DIR_OPTION -> javaOutputDir = File(value) KspCliOption.KOTLIN_OUTPUT_DIR_OPTION -> kotlinOutputDir = File(value) diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt index f7f23a5aef..42b799d9ec 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt @@ -74,7 +74,9 @@ class KotlinSymbolProcessingExtension( val classLoader = URLClassLoader(processingClasspath.map { it.toURI().toURL() }.toTypedArray(), javaClass.classLoader) - ServiceLoaderLite.loadImplementations(SymbolProcessorProvider::class.java, classLoader) + ServiceLoaderLite.loadImplementations(SymbolProcessorProvider::class.java, classLoader).filter { + options.processors.isEmpty() || it.javaClass.name in options.processors + } } if (providers.isEmpty()) { logger.error("No providers found in processor classpath.")