From 9418d446c2ba906c5364b5730ee1673675a7e15b Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Fri, 10 May 2024 16:53:35 -0700 Subject: [PATCH] Add command line entry points --- .../devtools/ksp/cmdline/KSPCommonMain.kt | 17 +++++++ .../google/devtools/ksp/cmdline/KSPJsMain.kt | 17 +++++++ .../google/devtools/ksp/cmdline/KSPJvmMain.kt | 46 +++++++++++++++++++ .../devtools/ksp/cmdline/KSPNativeMain.kt | 17 +++++++ 4 files changed, 97 insertions(+) create mode 100644 kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt create mode 100644 kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJsMain.kt create mode 100644 kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt create mode 100644 kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPNativeMain.kt diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt new file mode 100644 index 0000000000..e23e23778e --- /dev/null +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt @@ -0,0 +1,17 @@ +package com.google.devtools.ksp.cmdline + +import com.google.devtools.ksp.processing.kspCommonArgParser +import com.google.devtools.ksp.processing.kspCommonArgParserHelp + +class KSPCommonMain { + companion object { + @JvmStatic + fun main(args: Array) { + if ("-h" in args || "--help" in args) { + printHelpMsg(kspCommonArgParserHelp()) + } else { + runWithArgs(args, ::kspCommonArgParser) + } + } + } +} diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJsMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJsMain.kt new file mode 100644 index 0000000000..c4e6236b48 --- /dev/null +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJsMain.kt @@ -0,0 +1,17 @@ +package com.google.devtools.ksp.cmdline + +import com.google.devtools.ksp.processing.kspJsArgParser +import com.google.devtools.ksp.processing.kspJsArgParserHelp + +class KSPJsMain { + companion object { + @JvmStatic + fun main(args: Array) { + if ("-h" in args || "--help" in args) { + printHelpMsg(kspJsArgParserHelp()) + } else { + runWithArgs(args, ::kspJsArgParser) + } + } + } +} diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt new file mode 100644 index 0000000000..c2560dfc7b --- /dev/null +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt @@ -0,0 +1,46 @@ +package com.google.devtools.ksp.cmdline + +import com.google.devtools.ksp.impl.KotlinSymbolProcessing +import com.google.devtools.ksp.processing.KSPConfig +import com.google.devtools.ksp.processing.KspGradleLogger +import com.google.devtools.ksp.processing.SymbolProcessorProvider +import com.google.devtools.ksp.processing.kspJvmArgParser +import com.google.devtools.ksp.processing.kspJvmArgParserHelp +import java.io.File +import java.net.URLClassLoader +import java.util.ServiceLoader + +class KSPJvmMain { + companion object { + @JvmStatic + fun main(args: Array) { + if ("-h" in args || "--help" in args) { + printHelpMsg(kspJvmArgParserHelp()) + } else { + runWithArgs(args, ::kspJvmArgParser) + } + } + } +} + +internal fun printHelpMsg(optionsList: String) { + println("Available options:") + println(optionsList) + println("where:") + println(" * is required") + println(" List is colon separated. E.g., arg1:arg2:arg3") + println(" Map is in the form key1=value1:key2=value2") +} + +internal fun runWithArgs(args: Array, parse: (Array) -> Pair>) { + val logger = KspGradleLogger(KspGradleLogger.LOGGING_LEVEL_WARN) + val (config, classpath) = parse(args) + val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray()) + + val processorProviders = ServiceLoader.load( + processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"), + processorClassloader + ).toList() as List + + KotlinSymbolProcessing(config, processorProviders, logger).execute() +} diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPNativeMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPNativeMain.kt new file mode 100644 index 0000000000..861837e4d0 --- /dev/null +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPNativeMain.kt @@ -0,0 +1,17 @@ +package com.google.devtools.ksp.cmdline + +import com.google.devtools.ksp.processing.kspNativeArgParser +import com.google.devtools.ksp.processing.kspNativeArgParserHelp + +class KSPNativeMain { + companion object { + @JvmStatic + fun main(args: Array) { + if ("-h" in args || "--help" in args) { + printHelpMsg(kspNativeArgParserHelp()) + } else { + runWithArgs(args, ::kspNativeArgParser) + } + } + } +}