diff --git a/src/main/kotlin/com/github/youta1119/kotlin/cli/K2DotNetCompiler.kt b/src/main/kotlin/com/github/youta1119/kotlin/cli/K2DotNetCompiler.kt new file mode 100644 index 0000000..cc70913 --- /dev/null +++ b/src/main/kotlin/com/github/youta1119/kotlin/cli/K2DotNetCompiler.kt @@ -0,0 +1,64 @@ +package com.github.youta1119.kotlin.cli + +import com.github.youta1119.kotlin.compiler.DotNetConfigurationKeys +import com.intellij.openapi.Disposable +import org.jetbrains.kotlin.cli.common.CLICompiler +import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager +import org.jetbrains.kotlin.cli.common.ExitCode +import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.Services +import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion +import org.jetbrains.kotlin.utils.KotlinPaths + +class K2DotNetCompiler : CLICompiler() { + + override val performanceManager: CommonCompilerPerformanceManager by lazy { + K2DotNetCompilerPerformanceManager() + } + + override fun doExecute( + arguments: K2DotNetCompilerArguments, + configuration: CompilerConfiguration, + rootDisposable: Disposable, + paths: KotlinPaths? + ): ExitCode { + return ExitCode.OK + } + + override fun setupPlatformSpecificArgumentsAndServices( + configuration: CompilerConfiguration, + arguments: K2DotNetCompilerArguments, + services: Services + ) { + val commonSources = arguments.commonSources?.toSet().orEmpty() + arguments.freeArgs.forEach { + configuration.addKotlinSourceRoot(it, it in commonSources) + } + with(DotNetConfigurationKeys) { + with(configuration) { + arguments.outputName?.let { put(OUTPUT_NAME, it) } + } + } + } + + override fun createArguments(): K2DotNetCompilerArguments = + K2DotNetCompilerArguments() + + override fun createMetadataVersion(versionArray: IntArray): BinaryVersion = + K2DotNetMetadataVersion() + + override fun executableScriptFileName(): String = "kotlinc-dotnet" + + class K2DotNetCompilerPerformanceManager : CommonCompilerPerformanceManager("Kotlin to .Net Compiler") + class K2DotNetMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) { + override fun isCompatible(): Boolean = false + } + + companion object { + @JvmStatic + fun main(args: Array) { + doMain(K2DotNetCompiler(), args) + } + } +} diff --git a/src/main/kotlin/com/github/youta1119/kotlin/cli/K2DotNetCompilerArguments.kt b/src/main/kotlin/com/github/youta1119/kotlin/cli/K2DotNetCompilerArguments.kt new file mode 100644 index 0000000..84bdb4e --- /dev/null +++ b/src/main/kotlin/com/github/youta1119/kotlin/cli/K2DotNetCompilerArguments.kt @@ -0,0 +1,9 @@ +package com.github.youta1119.kotlin.cli + +import org.jetbrains.kotlin.cli.common.arguments.Argument +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments + +class K2DotNetCompilerArguments: CommonCompilerArguments() { + @Argument(value = "-output", shortName = "-o", valueDescription = "", description = "Output name") + var outputName: String? = null +} diff --git a/src/main/kotlin/com/github/youta1119/kotlin/compiler/DotNetConfigurationKeys.kt b/src/main/kotlin/com/github/youta1119/kotlin/compiler/DotNetConfigurationKeys.kt new file mode 100644 index 0000000..606a0fe --- /dev/null +++ b/src/main/kotlin/com/github/youta1119/kotlin/compiler/DotNetConfigurationKeys.kt @@ -0,0 +1,9 @@ +package com.github.youta1119.kotlin.compiler + +import org.jetbrains.kotlin.config.CompilerConfigurationKey + +class DotNetConfigurationKeys { + companion object { + val OUTPUT_NAME: CompilerConfigurationKey = CompilerConfigurationKey.create("write name") + } +} diff --git a/src/main/kotlin/com/github/youta1119/kotlin/main.kt b/src/main/kotlin/com/github/youta1119/kotlin/main.kt index cc54032..75a17d2 100644 --- a/src/main/kotlin/com/github/youta1119/kotlin/main.kt +++ b/src/main/kotlin/com/github/youta1119/kotlin/main.kt @@ -1,6 +1,6 @@ package com.github.youta1119.kotlin +import com.github.youta1119.kotlin.cli.K2DotNetCompiler -fun main() { - println("hello world") -} + +fun main(args: Array) = K2DotNetCompiler.main(args)