Skip to content

Commit

Permalink
Add command line entry points
Browse files Browse the repository at this point in the history
  • Loading branch information
ting-yuan committed May 13, 2024
1 parent 3f9d72c commit 9418d44
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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<String>) {
if ("-h" in args || "--help" in args) {
printHelpMsg(kspCommonArgParserHelp())
} else {
runWithArgs(args, ::kspCommonArgParser)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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<String>) {
if ("-h" in args || "--help" in args) {
printHelpMsg(kspJsArgParserHelp())
} else {
runWithArgs(args, ::kspJsArgParser)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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<String>) {
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<String>, parse: (Array<String>) -> Pair<KSPConfig, List<String>>) {
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<SymbolProcessorProvider>

KotlinSymbolProcessing(config, processorProviders, logger).execute()
}
Original file line number Diff line number Diff line change
@@ -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<String>) {
if ("-h" in args || "--help" in args) {
printHelpMsg(kspNativeArgParserHelp())
} else {
runWithArgs(args, ::kspNativeArgParser)
}
}
}
}

0 comments on commit 9418d44

Please sign in to comment.