diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt index d2dd9d483..96cb196b9 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt @@ -52,6 +52,7 @@ class KotlinBuilder @Inject internal constructor( enum class KotlinBuilderFlags(override val flag: String) : Flag { TARGET_LABEL("--target_label"), CLASSPATH("--classpath"), + JAVAC_OPTS("--javacopts"), DIRECT_DEPENDENCIES("--direct_dependencies"), DEPS_ARTIFACTS("--deps_artifacts"), SOURCES("--sources"), @@ -306,6 +307,8 @@ class KotlinBuilder @Inject internal constructor( ?.also { addAllSourceJars(it) } + + addAllJavacFlags(argMap.optional(KotlinBuilderFlags.JAVAC_OPTS) ?: emptyList()) } with(root.infoBuilder) { diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt index ebc836178..e7876eb6b 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt @@ -111,6 +111,35 @@ internal fun JvmCompilationTask.preProcessingSteps( return context.execute("expand sources") { expandWithSourceJarSources() } } +internal fun parseJavacArgsToMap(args: List): Map { + val optionsMap = mutableMapOf() + var i = 0 + + while (i < args.size) { + val arg = args[i] + + // map option arguments as key value pairs e.g. --source 8 => ("--source", "8") + // map flag arguments as key with value = "true" e.g. map -nowarn => ("-nowarn", "true") + if (arg.startsWith("-")) { + val hasNext = i + 1 < args.size + val nextArg = if (hasNext) args[i + 1] else null + + if (hasNext && !nextArg!!.startsWith("-")) { + optionsMap[arg] = nextArg + i += 2 + } else { + optionsMap[arg] = "true" + i++ + } + } else { + // Ignore non-option arguments + i++ + } + } + + return optionsMap +} + internal fun encodeMap(options: Map): String { val os = ByteArrayOutputStream() val oos = ObjectOutputStream(os) @@ -131,10 +160,11 @@ internal fun JvmCompilationTask.kaptArgs( plugins: InternalCompilerPlugins, aptMode: String, ): CompilationArgs { - val javacArgs = mapOf( - "-target" to info.toolchainInfo.jvm.jvmTarget, - "-source" to info.toolchainInfo.jvm.jvmTarget, - ) + val javacArgs = parseJavacArgsToMap(listOf( + "-target", info.toolchainInfo.jvm.jvmTarget, + "-source", info.toolchainInfo.jvm.jvmTarget, + ).plus(inputs.javacFlagsList)) + return CompilationArgs().apply { xFlag("plugin", plugins.kapt.jarPath) diff --git a/src/main/starlark/core/options/opts.javac.bzl b/src/main/starlark/core/options/opts.javac.bzl index a6c852b91..dd51ebd3f 100644 --- a/src/main/starlark/core/options/opts.javac.bzl +++ b/src/main/starlark/core/options/opts.javac.bzl @@ -24,7 +24,7 @@ _JOPTS = { ), type = attr.string, value_to_flag = { - "off": ["-nowarn"], + "off": ["-nowarn", "-Xlint:none"], "error": ["-Werror"], "report": None, },