diff options
author | nickreid <nickreid@google.com> | 2022-12-02 15:54:38 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-12-02 15:55:13 -0800 |
commit | 42f9e63eb0fbfa45c4ecf02d89383738240f1c0b (patch) | |
tree | 6d97fda933921b7a7a8e85ac28fe3ab1cdc4344a | |
parent | d717705108bf8ca922a199de7bff0965044c5982 (diff) | |
download | bazelbuild-kotlin-rules-42f9e63eb0fbfa45c4ecf02d89383738240f1c0b.tar.gz |
Automated rollback of commit d717705108bf8ca922a199de7bff0965044c5982.
PiperOrigin-RevId: 492579855
Change-Id: Ibfea054eb8751f490b4acce653c6eeef6c9c4dfb
-rw-r--r-- | kotlin/common.bzl | 84 |
1 files changed, 38 insertions, 46 deletions
diff --git a/kotlin/common.bzl b/kotlin/common.bzl index 72cb1fe..6172520 100644 --- a/kotlin/common.bzl +++ b/kotlin/common.bzl @@ -15,6 +15,7 @@ """Common Kotlin definitions.""" load("@bazel_skylib//lib:sets.bzl", "sets") +load("@bazel_skylib//lib:structs.bzl", "structs") load("//bazel:stubs.bzl", "BASE_JVMOPTS") load("//bazel:stubs.bzl", "DEFAULT_BUILTIN_PROCESSORS") load(":file_factory.bzl", "FileFactory") @@ -172,10 +173,6 @@ def _kapt( jar = output_jar, manifest = output_manifest, srcjar = output_srcjar, - java_info = JavaInfo( - output_jar = output_jar, - compile_jar = output_jar, - ), ) def _kapt_stubs( @@ -475,15 +472,11 @@ def _run_kotlinc( kt_srcs + common_srcs + coverage_srcs, ) - result = dict( + return struct( output_jar = output, compile_jar = kt_ijar, source_jar = srcjar, ) - return struct( - java_info = JavaInfo(**result), - **result - ) def _get_original_kt_target_label(ctx): label = ctx.label @@ -498,14 +491,18 @@ def _get_original_kt_target_label(ctx): def _run_import_deps_checker( ctx, jars_to_check = [], - deps = [], + merged_deps = None, enforce_strict_deps = True, jdeps_output = None, deps_checker = None, java_toolchain = None): + # Direct compile_jars before transitive not to confuse strict_deps (b/149107867) + full_classpath = depset( + order = "preorder", + transitive = [merged_deps.compile_jars, merged_deps.transitive_compile_time_jars], + ) label = _get_original_kt_target_label(ctx) bootclasspath = java_toolchain.bootclasspath - full_classpath = _get_full_classpath(deps) args = ctx.actions.args() args.add("--jdeps_output", jdeps_output) @@ -513,10 +510,7 @@ def _run_import_deps_checker( args.add_all(bootclasspath, before_each = "--bootclasspath_entry") args.add_all(full_classpath, before_each = "--classpath_entry") if enforce_strict_deps: - args.add_all( - depset(transitive = [dep.compile_jars for dep in deps]), - before_each = "--directdep", - ) + args.add_all(merged_deps.compile_jars, before_each = "--directdep") args.add("--checking_mode=%s" % ("error" if enforce_strict_deps else "silence")) args.add("--nocheck_missing_members") # compiler was happy so no need args.add("--rule_label") @@ -836,7 +830,7 @@ def _kt_jvm_library( fail("Missing or invalid kt_toolchain") file_factory = FileFactory(ctx, output) - deps = deps + codegen_output_java_infos # Defensive copy + deps = list(deps) # Defensive copy # Split sources, as java requires a separate compile step. kt_srcs = [s for s in srcs if _is_kt_src(s)] @@ -857,15 +851,23 @@ def _kt_jvm_library( if srcs or common_srcs or rule_family != _RULE_FAMILY.ANDROID_LIBRARY: deps.extend(kt_toolchain.kotlin_libs) + merged_deps = java_common.merge(deps + codegen_output_java_infos) + # Skip srcs package check for android_library targets with no kotlin sources: b/239725424 if rule_family != _RULE_FAMILY.ANDROID_LIBRARY or kt_srcs: _check_srcs_package(ctx.label.package, srcs, "srcs") _check_srcs_package(ctx.label.package, common_srcs, "common_srcs") _check_srcs_package(ctx.label.package, coverage_srcs, "coverage_srcs") + # Complete classpath including bootclasspath. Like for Javac, explicitly place direct + # compile_jars before transitive not to confuse strict_deps (b/149107867). full_classpath = depset( order = "preorder", - transitive = [java_toolchain.bootclasspath, _get_full_classpath(deps)], + transitive = [ + java_toolchain.bootclasspath, + merged_deps.compile_jars, + merged_deps.transitive_compile_time_jars, + ], ) # Collect all plugin data, including processors to run and all plugin classpaths, @@ -883,12 +885,7 @@ def _kt_jvm_library( out_jars = [] out_srcjars = [] out_compilejars = [] - kapt_outputs = struct( - jar = None, - manifest = None, - srcjar = None, - java_info = java_common.merge([]), - ) + kapt_outputs = struct(jar = None, manifest = None, srcjar = None) # Kotlin compilation requires two passes when annotation processing is # required. The initial pass processes the annotations and generates @@ -918,6 +915,11 @@ def _kt_jvm_library( out_jars.append(kapt_outputs.jar) java_syncer.add_srcjars([kapt_outputs.srcjar]) + merged_deps = java_common.merge([merged_deps, JavaInfo( + output_jar = kapt_outputs.jar, + compile_jar = kapt_outputs.jar, + )]) + kotlinc_result = None if kt_srcs or common_srcs: kotlinc_result = _run_kotlinc( @@ -943,6 +945,13 @@ def _kt_jvm_library( out_srcjars.append(kotlinc_result.source_jar) out_jars.append(kotlinc_result.output_jar) + # Add dep on JaCoCo runtime to merged_deps. + # The latter helps jdeps computation (b/130747644) but could be runtime-only if we computed + # compile-time Jdeps based using the compile Jar (which doesn't contain instrumentation). + # See b/117897097 for why it's still useful to make the (runtime) dep explicit. + if ctx.coverage_instrumented(): + merged_deps = java_common.merge([merged_deps, kt_toolchain.coverage_runtime]) + classpath_resources_dirs, classpath_resources_non_dirs = _partition( classpath_resources, filter = lambda res: res.is_directory, @@ -963,16 +972,6 @@ def _kt_jvm_library( java_genjar = None is_android_library_without_kt_srcs = rule_family == _RULE_FAMILY.ANDROID_LIBRARY and not kt_srcs if java_srcs or java_syncer.srcjars or classpath_resources: - javac_deps = list(deps) - javac_deps.append(kapt_outputs.java_info) - if kotlinc_result: - javac_deps.append(kotlinc_result.java_info) - if ctx.coverage_instrumented(): - # Helps jdeps computation (b/130747644) but could be runtime-only if we computed - # compile-time Jdeps based using the compile Jar (which doesn't contain instrumentation). - # See b/117897097 for why it's still useful to make the (runtime) dep explicit. - javac_deps.append(kt_toolchain.coverage_runtime) - javac_out = output if is_android_library_without_kt_srcs else file_factory.declare_file("-java.jar") javac_java_info = java_common.compile( ctx, @@ -984,7 +983,7 @@ def _kt_jvm_library( exports = exports if is_android_library_without_kt_srcs else [], output = javac_out, exported_plugins = exported_plugins, - deps = javac_deps, + deps = ([JavaInfo(**structs.to_dict(kotlinc_result))] if kotlinc_result else []) + [merged_deps], # Include default_javac_flags, which reflect Blaze's --javacopt flag, so they win over # all sources of default flags (for Ellipsis builds, see b/125452475). # TODO: remove default_javac_flags here once java_common.compile is fixed. @@ -1091,7 +1090,10 @@ def _kt_jvm_import( fail("Must import at least one JAR") file_factory = FileFactory(ctx, jars[0]) - deps = deps + kt_toolchain.kotlin_libs # Defensive copy + deps += list(deps) # Defensive copy + + deps.extend(kt_toolchain.kotlin_libs) + merged_deps = java_common.merge(deps) # Check that any needed deps are declared unless neverlink, in which case Jars won't be used # at runtime so we skip the check, though we'll populate jdeps either way. @@ -1099,7 +1101,7 @@ def _kt_jvm_import( _run_import_deps_checker( ctx, jars_to_check = jars, - deps = deps, + merged_deps = merged_deps, enforce_strict_deps = not neverlink, jdeps_output = jdeps_output, deps_checker = deps_checker, @@ -1176,16 +1178,6 @@ def _collect_providers(provider, deps): """Collects the requested provider from the given list of deps.""" return [dep[provider] for dep in deps if provider in dep] -def _get_full_classpath(deps): - return depset( - order = "preorder", - transitive = ( - # Put direct compile_jars before transitive not to confuse strict_deps (b/149107867) - [dep.compile_jars for dep in deps] + - [dep.transitive_compile_time_jars for dep in deps] - ), - ) - def _partition(sequence, filter): pos, neg = [], [] for element in sequence: |