blob: ff75632e9cb3dcd6261c7ba041a2499002302c59 [file] [log] [blame]
# Copyright 2022 Google LLC. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Static flags for kotlinc."""
load("//:visibility.bzl", "RULES_KOTLIN")
_KT_LANG_VERSION = "1.9"
_SHARED_FLAGS = [
# We're supplying JDK in bootclasspath explicitly instead
"-no-jdk",
# stdlib included in merged_deps
"-no-stdlib",
# The bytecode format to emit
"-jvm-target",
"11",
# Emit bytecode with parameter names
"-java-parameters",
# Allow default method declarations, akin to what javac emits (b/110378321).
"-Xjvm-default=all",
# Trust JSR305 nullness type qualifier nicknames the same as @Nonnull/@Nullable
# (see https://kotlinlang.org/docs/reference/java-interop.html#jsr-305-support)
"-Xjsr305=strict",
# Trust annotations on type arguments, etc.
# (see https://kotlinlang.org/docs/java-interop.html#annotating-type-arguments-and-type-parameters)
"-Xtype-enhancement-improvements-strict-mode",
# TODO: Remove this as the default setting (probably Kotlin 1.7)
"-Xenhance-type-parameter-types-to-def-not-null=true",
# Explicitly set language version so we can update compiler separate from language version
"-language-version",
_KT_LANG_VERSION,
# Enable type annotations in the JVM bytecode (b/170647926)
"-Xemit-jvm-type-annotations",
# TODO: Temporarily disable 1.5's sam wrapper conversion
"-Xsam-conversions=class",
# We don't want people to use experimental APIs, but if they do, we want them to use @OptIn
"-opt-in=kotlin.RequiresOptIn",
# Don't complain when using old builds or release candidate builds
"-Xskip-prerelease-check",
# Allows a no source files to create an empty jar.
"-Xallow-no-source-files",
# TODO: Remove this flag
"-Xno-source-debug-extension",
]
_CLI_ADDITIONAL_FLAGS = [
# Silence all warning-level diagnostics
"-nowarn",
]
def _read_one_define_flags(ctx, name):
define = ctx.var.get(name, default = None)
return [f for f in define.split(" ") if f] if define else []
def _read_define_flags(ctx):
return (
_read_one_define_flags(ctx, "extra_kt_jvm_opts")
)
kotlinc_flags = struct(
# go/keep-sorted start
CLI_FLAGS = _SHARED_FLAGS + _CLI_ADDITIONAL_FLAGS,
IDE_FLAGS = _SHARED_FLAGS,
KT_LANG_VERSION = _KT_LANG_VERSION,
read_define_flags = _read_define_flags,
# go/keep-sorted end
)