From baab3d6b708c2033c3027ab4ea3d448becda463c 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. --- .../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 bd0dc8d4d2..44e107ba7e 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.")