Move shared entry point functions to KSPCommonMain
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 index e23e237..26af73f 100644 --- 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
@@ -1,7 +1,15 @@ 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.kspCommonArgParser import com.google.devtools.ksp.processing.kspCommonArgParserHelp +import java.io.File +import java.net.URLClassLoader +import java.util.ServiceLoader +import kotlin.system.exitProcess class KSPCommonMain { companion object { @@ -15,3 +23,47 @@ } } } + +internal fun printHelpMsg(optionsList: String) { + println("Available options:") + println(optionsList) + println("where:") + println(" * is required") + println(" List is <path-separator> separated. E.g., arg1:arg2:arg3 on Linux/Mac, or arg1;arg2;arg3 on Windows") + println(" Map is in the form key1=value1:key2=value2 on Linux/Mac or key1=value1;key2=value2 on Windows") +} + +internal fun runWithArgs(args: Array<String>, parse: (Array<String>) -> Pair<KSPConfig, List<String>>) { + + val loggingVerbosity = System.getProperty("ksp.logging", "warn") + val loggingLevel = when (loggingVerbosity.lowercase()) { + "error" -> KspGradleLogger.LOGGING_LEVEL_ERROR + "warn" -> KspGradleLogger.LOGGING_LEVEL_WARN + "warning" -> KspGradleLogger.LOGGING_LEVEL_WARN + "info" -> KspGradleLogger.LOGGING_LEVEL_INFO + "debug" -> KspGradleLogger.LOGGING_LEVEL_LOGGING + else -> KspGradleLogger.LOGGING_LEVEL_WARN + } + + val logger = KspGradleLogger(loggingLevel) + + try { + val (config, classpath) = parse(args) + val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray()) + + @Suppress("UNCHECKED_CAST") + val processorProviders = ServiceLoader + .load( + processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"), + processorClassloader + ) + .toList() as List<SymbolProcessorProvider> + + val exitCode = KotlinSymbolProcessing(config, processorProviders, logger).execute() + exitProcess(exitCode.code) + } catch (t: Throwable) { + logger.exception(t) + t.printStackTrace() + exitProcess(KotlinSymbolProcessing.ExitCode.PROCESSING_ERROR.code) + } +}
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 index 0687a7c..755738c 100644 --- 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
@@ -1,15 +1,7 @@ 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 -import kotlin.system.exitProcess class KSPJvmMain { companion object { @@ -23,47 +15,3 @@ } } } - -internal fun printHelpMsg(optionsList: String) { - println("Available options:") - println(optionsList) - println("where:") - println(" * is required") - println(" List is <path-separator> separated. E.g., arg1:arg2:arg3 on Linux/Mac, or arg1;arg2;arg3 on Windows") - println(" Map is in the form key1=value1:key2=value2 on Linux/Mac or key1=value1;key2=value2 on Windows") -} - -internal fun runWithArgs(args: Array<String>, parse: (Array<String>) -> Pair<KSPConfig, List<String>>) { - - val loggingVerbosity = System.getProperty("ksp.logging", "warn") - val loggingLevel = when (loggingVerbosity.lowercase()) { - "error" -> KspGradleLogger.LOGGING_LEVEL_ERROR - "warn" -> KspGradleLogger.LOGGING_LEVEL_WARN - "warning" -> KspGradleLogger.LOGGING_LEVEL_WARN - "info" -> KspGradleLogger.LOGGING_LEVEL_INFO - "debug" -> KspGradleLogger.LOGGING_LEVEL_LOGGING - else -> KspGradleLogger.LOGGING_LEVEL_WARN - } - - val logger = KspGradleLogger(loggingLevel) - - try { - val (config, classpath) = parse(args) - val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray()) - - @Suppress("UNCHECKED_CAST") - val processorProviders = ServiceLoader - .load( - processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"), - processorClassloader - ) - .toList() as List<SymbolProcessorProvider> - - val exitCode = KotlinSymbolProcessing(config, processorProviders, logger).execute() - exitProcess(exitCode.code) - } catch (t: Throwable) { - logger.exception(t) - t.printStackTrace() - exitProcess(KotlinSymbolProcessing.ExitCode.PROCESSING_ERROR.code) - } -}