Fix CLI nontermination by wrapping in try catch
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 269a847..0687a7c 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
@@ -47,17 +47,23 @@ val logger = KspGradleLogger(loggingLevel) - val (config, classpath) = parse(args) - val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray()) + 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> + @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) + val exitCode = KotlinSymbolProcessing(config, processorProviders, logger).execute() + exitProcess(exitCode.code) + } catch (t: Throwable) { + logger.exception(t) + t.printStackTrace() + exitProcess(KotlinSymbolProcessing.ExitCode.PROCESSING_ERROR.code) + } }