switch to JavaInfo as the constructor for the JavaInfo
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt index 75dcab5..4b249cb 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
@@ -38,19 +38,25 @@ class Result(val timings: List<String>, val command: CompilationTask) fun compile(command: CompilationTask): Result { - val context = Context() - val commandWithApSources = context.execute("kapt") { - runAnnotationProcessors(command) + // fix error handling + try { + val context = Context() + val commandWithApSources = context.execute("kapt") { + runAnnotationProcessors(command) + } + compileClasses(context, commandWithApSources) + context.execute("create jar") { + outputJarCreator.createOutputJar(commandWithApSources) + } + produceSourceJar(commandWithApSources) + context.execute("generate jdeps") { + jDepsGenerator.generateJDeps(commandWithApSources) + } + return Result(context.timings, commandWithApSources) + + } catch (ex: Throwable) { + throw RuntimeException(ex) } - compileClasses(context, commandWithApSources) - context.execute("create jar") { - outputJarCreator.createOutputJar(commandWithApSources) - } - produceSourceJar(commandWithApSources) - context.execute("generate jdeps") { - jDepsGenerator.generateJDeps(commandWithApSources) - } - return Result(context.timings, commandWithApSources) } private fun produceSourceJar(command: CompilationTask) {
diff --git a/kotlin/internal/compile.bzl b/kotlin/internal/compile.bzl index 71f1d48..0444853 100644 --- a/kotlin/internal/compile.bzl +++ b/kotlin/internal/compile.bzl
@@ -103,52 +103,6 @@ input_manifests = input_manifests ) -def _select_std_libs(ctx): - return ctx.toolchains[kt.defs.TOOLCHAIN_TYPE].jvm_stdlibs - -def _make_java_provider(ctx, srcs, input_deps=[], auto_deps=[]): - """Creates the java_provider for a Kotlin target. - - This macro is distinct from the kotlin_make_providers as collecting the java_info is useful before the DefaultInfo is - created. - - Args: - ctx: The ctx of the rule in scope when this macro is called. The macro will pick up the following entities from - the rule ctx: - * The default output jar. - * The `deps` for this provider. - * Optionally `exports` (see java rules). - * The `_kotlin_runtime` implicit dependency. - Returns: - A JavaInfo provider. - """ - runtime = ctx.toolchains[kt.defs.TOOLCHAIN_TYPE].jvm_runtime - deps=utils.collect_all_jars(input_deps) - exported_deps=utils.collect_all_jars(getattr(ctx.attr, "exports", [])) - - my_compile_jars = exported_deps.compile_jars + [ctx.outputs.jar] - my_runtime_jars = exported_deps.transitive_runtime_jars + [ctx.outputs.jar] - - my_transitive_compile_jars = my_compile_jars + deps.transitive_compile_time_jars + exported_deps.transitive_compile_time_jars + auto_deps - my_transitive_runtime_jars = my_runtime_jars + deps.transitive_runtime_jars + exported_deps.transitive_runtime_jars + runtime + auto_deps - - # collect the runtime jars from the runtime_deps attribute. - for jar in ctx.attr.runtime_deps: - my_transitive_runtime_jars += jar[JavaInfo].transitive_runtime_jars - - return java_common.create_provider( - use_ijar = False, - # A list or set of output source jars that contain the uncompiled source files including the source files - # generated by annotation processors if the case. - source_jars = [ctx.outputs.srcjar], - # A list or a set of jars that should be used at compilation for a given target. - compile_time_jars = my_compile_jars, - # A list or a set of jars that should be used at runtime for a given target. - runtime_jars = my_runtime_jars, - transitive_compile_time_jars = my_transitive_compile_jars, - transitive_runtime_jars = my_transitive_runtime_jars - ) - def _make_providers(ctx, java_info, module_name, transitive_files=depset(order="default")): kotlin_info=kt.info.KtInfo( srcs=ctx.files.srcs, @@ -159,7 +113,7 @@ jars = [struct( class_jar = ctx.outputs.jar, ijar = None, - source_jars = java_info.source_jars + source_jars = [ctx.outputs.srcjar] )] ), ) @@ -204,21 +158,43 @@ # If we setup indirection than the first entry in the merge list is the result of the kotlin compile action. output_merge_list=[ kt_compile_output_jar ] + output_merge_list - kotlin_auto_deps=_select_std_libs(ctx) - - deps = ctx.attr.deps + getattr(ctx.attr, "friends", []) - srcs = utils.partition_srcs(ctx.files.srcs) if (len(srcs.kt) + len(srcs.java) == 0) and len(srcs.src_jars) == 0: fail("no sources provided") + toolchain=ctx.toolchains[kt.defs.TOOLCHAIN_TYPE] + + deps = [ + d[JavaInfo] + for d in ( + toolchain.jvm_stdlibs + + getattr(ctx.attr, "friends", []) + + ctx.attr.deps + ) + ] + + runtime_deps = [ + d[JavaInfo] + for d in ( + ctx.attr.runtime_deps + + [toolchain.jvm_runtime] + ) + ] + + exports = [ + d[JavaInfo] + for d in ( + getattr(ctx.attr, "exports", []) + ) + ] + # setup the compile action. _kotlin_do_compile_action( ctx, rule_kind = rule_kind, output_jar = kt_compile_output_jar, - compile_jars = utils.collect_jars_for_compile(deps) + kotlin_auto_deps, + compile_jars = java_common.merge(deps).compile_jars, module_name = module_name, friend_paths = friend_paths, srcs = srcs @@ -229,7 +205,17 @@ utils.actions.fold_jars(ctx, rule_kind, output_jar, output_merge_list) # create the java provider but the kotlin and default provider cannot be created here. - return _make_java_provider(ctx, srcs, deps, kotlin_auto_deps) + + return JavaInfo( + output_jar = ctx.outputs.jar, + compile_jar = ctx.outputs.jar, + source_jar = ctx.outputs.srcjar, +# jdeps = ctx.outputs.jdeps, + deps = deps, + runtime_deps = runtime_deps, + exports = exports, + neverlink = getattr(ctx.attr, "neverlink", False) + ) compile = struct( compile_action = _compile_action,
diff --git a/kotlin/internal/utils.bzl b/kotlin/internal/utils.bzl index eaab3db..c141584 100644 --- a/kotlin/internal/utils.bzl +++ b/kotlin/internal/utils.bzl
@@ -52,54 +52,6 @@ all_srcs = kt + java, src_jars = depset(src_jars) ) - -# DEPSET UTILS ################################################################################################################################################# -def _select_compile_jars(dep): - """selects the correct compile time jar from a java provider""" - if not JavaInfo in dep: - return [] - is_kotlin_provider = kt.info.KtInfo in dep - java_provider = dep[JavaInfo] - if is_kotlin_provider: - return java_provider.full_compile_jars - elif dep.label.workspace_root == "external/com_github_jetbrains_kotlin": - return java_provider.full_compile_jars - else: - return java_provider.compile_jars - -def _collect_jars_for_compile(deps): - """creates the compile jar depset, this should be strict including only the output jars of the listed dependencies. - """ - compile_jars = depset() - for d in deps: - compile_jars += _select_compile_jars(d) - return compile_jars - -def _collect_all_jars(deps): - """ - Merges a list of java providers into a struct of depsets. - """ - compile_jars = depset() - runtime_jars = depset() - transitive_runtime_jars = depset() - transitive_compile_time_jars = depset() - - for dep_target in deps: - if JavaInfo in dep_target: - java_provider = dep_target[JavaInfo] - compile_jars += java_provider.compile_jars - # the runtime_jar compile_jar seperation is here to support the exports concept. - runtime_jars += java_provider.full_compile_jars - transitive_compile_time_jars += java_provider.transitive_compile_time_jars - transitive_runtime_jars += java_provider.transitive_runtime_jars - - return struct ( - compile_jars = compile_jars, - runtime_jars = runtime_jars, - transitive_runtime_jars = transitive_runtime_jars, - transitive_compile_time_jars = transitive_compile_time_jars - ) - # RESOURCE JARS ################################################################################################################################################ _CONVENTIONAL_RESOURCE_PATHS = [ "src/main/resources", @@ -217,8 +169,6 @@ fold_jars = _fold_jars_action, write_launcher = _write_launcher_action, ), - collect_all_jars = _collect_all_jars, - collect_jars_for_compile = _collect_jars_for_compile, restore_label = _restore_label, derive_module_name = _derive_module_name, partition_srcs = _partition_srcs
diff --git a/kotlin/kotlin.bzl b/kotlin/kotlin.bzl index acd1b1f..87decf2 100644 --- a/kotlin/kotlin.bzl +++ b/kotlin/kotlin.bzl
@@ -159,7 +159,7 @@ default = [], allow_files = [".srcjar", ".kt", ".java"], ), - "deps": attr.label_list(aspects = [_kt_jvm_plugin_aspect]), + "deps": attr.label_list(aspects = [_kt_jvm_plugin_aspect], providers=[JavaInfo]), "runtime_deps": attr.label_list(default = []), "resources": attr.label_list( default = [], @@ -222,7 +222,8 @@ ######################################################################################################################## kt_jvm_library = rule( attrs = dict(_common_attr.items() + { - "exports": attr.label_list(default = []), + "exports": attr.label_list(default = [], providers=[JavaInfo]), + "neverlink": attr.bool(default=False), }.items()), outputs = _common_outputs, toolchains = [_kt.defs.TOOLCHAIN_TYPE], @@ -247,6 +248,7 @@ deps: A list of dependencies of this rule.See general comments about `deps` at [Attributes common to all build rules](https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes). module_name: The name of the module, if not provided the module name is derived from the label. --e.g., `//some/package/path:label_name` is translated to `some_package_path-label_name`. + neverlink: If true only use this library for compilation and not at runtime. """ kt_jvm_binary = rule( @@ -278,6 +280,7 @@ ), "friends": attr.label_list( default = [], + providers = [JavaInfo] ), "test_class": attr.string(), "main_class": attr.string(default="com.google.testing.junit.runner.BazelTestRunner"),
diff --git a/kotlin/toolchains.bzl b/kotlin/toolchains.bzl index 733bc06..814cc52 100644 --- a/kotlin/toolchains.bzl +++ b/kotlin/toolchains.bzl
@@ -84,13 +84,15 @@ _kt_jvm_attrs = dict(_common_attrs.items() + { "jvm_runtime": attr.label( default = Label("@" + _KT_COMPILER_REPO + "//:kotlin-runtime"), + providers = [JavaInfo] ), "jvm_stdlibs": attr.label_list( default = [ Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib"), Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk7"), Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk8"), - ] + ], + providers = [JavaInfo] ), "jvm_target": attr.string( default = "1.8", @@ -114,8 +116,8 @@ kotlinbuilder = ctx.attr.kotlinbuilder, kotlin_home = ctx.files.kotlin_home, - jvm_runtime = ctx.files.jvm_runtime, - jvm_stdlibs = ctx.files.jvm_stdlibs + jvm_runtime = ctx.attr.jvm_runtime, + jvm_stdlibs = ctx.attr.jvm_stdlibs ) return struct(providers=[toolchain])