From 41c42dba360e7827488ffd59f6c1f3e6bafd5247 Mon Sep 17 00:00:00 2001 From: Hadrien Chauvin Date: Sat, 12 May 2018 17:43:12 +0200 Subject: [PATCH] add support for code coverage --- kotlin/builder/BUILD | 6 +- .../KotlinBuilderActionTests.java | 11 +++ .../KotlinBuilderTestCase.java | 9 +++ .../integrationtests/KotlinBuilderTests.java | 10 +++ .../jars/libkotlin_model_proto-speed.jar | Bin 127068 -> 127633 bytes kotlin/builder/proto/kotlin_model.proto | 2 + .../kotlin/builder/BuildCommandBuilder.kt | 5 +- .../mode/jvm/KotlinJvmCompilationExecutor.kt | 9 ++- .../mode/jvm/actions/JacocoProcessor.kt | 67 ++++++++++++++++++ kotlin/internal/compile.bzl | 17 ++++- kotlin/internal/rules.bzl | 51 +++++++------ kotlin/internal/utils.bzl | 47 +++++++++--- kotlin/kotlin.bzl | 16 +++++ tests/integrationtests/BUILD | 1 + tests/integrationtests/jvm/BUILD | 9 +++ .../jvm/JvmCoverageFunctionalTests.kt | 59 +++++++++++++++ tests/integrationtests/jvm/coverage/BUILD | 28 ++++++++ tests/integrationtests/jvm/coverage/Foo.kt | 6 ++ .../integrationtests/jvm/coverage/FooTest.kt | 11 +++ tests/rules/AssertionTestCase.kt | 4 +- tests/rules/defs.bzl | 3 +- third_party/dependencies.yaml | 9 +++ third_party/jvm/org/jacoco/BUILD | 12 ++++ third_party/jvm/org/ow2/asm/BUILD | 42 +++++++++++ third_party/jvm/workspace.bzl | 4 ++ 25 files changed, 399 insertions(+), 39 deletions(-) create mode 100644 kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JacocoProcessor.kt create mode 100644 tests/integrationtests/jvm/JvmCoverageFunctionalTests.kt create mode 100644 tests/integrationtests/jvm/coverage/BUILD create mode 100644 tests/integrationtests/jvm/coverage/Foo.kt create mode 100644 tests/integrationtests/jvm/coverage/FooTest.kt create mode 100644 third_party/jvm/org/jacoco/BUILD create mode 100644 third_party/jvm/org/ow2/asm/BUILD diff --git a/kotlin/builder/BUILD b/kotlin/builder/BUILD index a8f2e6d79..e39c876f5 100644 --- a/kotlin/builder/BUILD +++ b/kotlin/builder/BUILD @@ -26,13 +26,17 @@ kotlin_worker_lib( "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar", "@io_bazel_rules_kotlin_com_google_guava_guava//jar", "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar", + "@io_bazel_rules_kotlin_org_jacoco_org_jacoco_core//jar", ], exports = ["//kotlin/builder/proto"], runtime_deps = [ "@com_github_jetbrains_kotlin//:kotlin-stdlib", "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7", "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8", - "@com_github_jetbrains_kotlin//:kotlin-reflect" + "@com_github_jetbrains_kotlin//:kotlin-reflect", + "@io_bazel_rules_kotlin_org_ow2_asm_asm_commons//jar", + "@io_bazel_rules_kotlin_org_ow2_asm_asm//jar", + "@io_bazel_rules_kotlin_org_ow2_asm_asm_tree//jar", ] ) diff --git a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java index 59b1fdbed..deeb69f0d 100644 --- a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java +++ b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java @@ -1,5 +1,6 @@ package io.bazel.kotlin.builder; +import io.bazel.kotlin.builder.mode.jvm.actions.JacocoProcessor; import io.bazel.kotlin.builder.mode.jvm.actions.KotlinCompiler; import org.junit.Test; @@ -11,4 +12,14 @@ public void testCompileSimple() { assertFileExists(DirectoryType.CLASSES, "something/AClass.class"); assertFileDoesNotExist(outputs().getOutput()); } + + @Test + public void testCoverage() { + addSource("AClass.kt", "package something;" + "class AClass{}"); + instance(KotlinCompiler.class).compile(builderCommand()); + instance(JacocoProcessor.class).instrument(builderCommand()); + assertFileExists(DirectoryType.CLASSES, "something/AClass.class"); + assertFileExists(DirectoryType.CLASSES, "something/AClass.class.uninstrumented"); + assertFileDoesNotExist(outputs().getOutput()); + } } diff --git a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java index 01ed512dc..937294fe9 100644 --- a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java +++ b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java @@ -29,6 +29,10 @@ abstract class KotlinBuilderTestCase { private String label = null; private Path inputSourceDir = null; + protected void setPostProcessor(String postProcessor) { + builder.setInfo(builder.getInfo().toBuilder().setPostProcessor(postProcessor)); + } + @Before public void setupNext() { resetTestContext("a_test_" + counter.incrementAndGet()); @@ -150,6 +154,11 @@ void assertFileExists(DirectoryType dir, String filePath) { assertFileExists(file.toString()); } + void assertFileDoesNotExist(DirectoryType dir, String filePath) { + Path file = DirectoryType.select(dir, builderCommand()).resolve(filePath); + assertFileDoesNotExist(file.toString()); + } + void assertFileDoesNotExist(String filePath) { assertWithMessage("file exisst: " + filePath).that(new File(filePath).exists()).isFalse(); } diff --git a/kotlin/builder/integrationtests/KotlinBuilderTests.java b/kotlin/builder/integrationtests/KotlinBuilderTests.java index 0d515e9ac..34f577f64 100644 --- a/kotlin/builder/integrationtests/KotlinBuilderTests.java +++ b/kotlin/builder/integrationtests/KotlinBuilderTests.java @@ -19,6 +19,7 @@ public void testSimpleCompile() { addSource("AClass.kt", "package something;" + "class AClass{}"); runCompileTask(); assertFileExists(DirectoryType.CLASSES, "something/AClass.class"); + assertFileDoesNotExist(DirectoryType.CLASSES, "something/AClass.class.uninstrumented"); } @Test @@ -31,6 +32,15 @@ public void testMixedModeCompile() { assertFileExists(outputs().getOutput()); } + @Test + public void testCoverage() { + setPostProcessor("jacoco"); + addSource("AClass.kt", "package something;" + "class AClass{}"); + runCompileTask(); + assertFileExists(DirectoryType.CLASSES, "something/AClass.class"); + assertFileExists(DirectoryType.CLASSES, "something/AClass.class.uninstrumented"); + } + private void runCompileTask() { int timeoutSeconds = 10; KotlinJvmCompilationExecutor executor = instance(KotlinJvmCompilationExecutor.class); diff --git a/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar b/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar index 97f045deca77374db1d125e8550ba26e2dd3210d..3853970bdbae7b52780d5256aa09c323f0b441c3 100755 GIT binary patch delta 65214 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
VMXLFr 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 delta 64480 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 { + override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult { + if (!file.fileName.toString().endsWith(".class")) { + return FileVisitResult.CONTINUE + } + + val uninstrumentedCopy = Paths.get(file.toString() + ".uninstrumented") + Files.move(file, uninstrumentedCopy) + BufferedInputStream(Files.newInputStream(uninstrumentedCopy)).use { input -> + BufferedOutputStream(Files.newOutputStream(file)).use { output -> + instr.instrument(input, output, file.toString()) + } + } + return FileVisitResult.CONTINUE + } + }) + } +} diff --git a/kotlin/internal/compile.bzl b/kotlin/internal/compile.bzl index d3049f2ee..d1e5c4ced 100644 --- a/kotlin/internal/compile.bzl +++ b/kotlin/internal/compile.bzl @@ -71,6 +71,10 @@ def _kotlin_do_compile_action(ctx, rule_kind, output_jar, compile_jars): if len(plugin_info.annotation_processors) > 0: args += [ "--kt-plugins", plugin_info.to_json() ] + # Post-process class files with the Jacoco offline instrumenter, if needed. + if ctx.coverage_instrumented() or ctx.attr.internal_coverage_instrumented: + args += [ "--post_processor", "jacoco" ] + # Declare and write out argument file. args_file = ctx.actions.declare_file(ctx.label.name + ".jar-2.params") ctx.actions.write(args_file, "\n".join(args)) @@ -140,7 +144,7 @@ def _make_java_provider(ctx, auto_deps=[]): transitive_runtime_jars=my_transitive_runtime_jars ) -def _make_providers(ctx, java_info, transitive_files=depset(order="default")): +def _make_providers(ctx, java_info, transitive_files=depset(order="default"), extra_runfiles=[]): kotlin_info=kt.info.KtInfo( srcs=ctx.files.srcs, # intelij aspect needs this. @@ -154,9 +158,13 @@ def _make_providers(ctx, java_info, transitive_files=depset(order="default")): ), ) + files = [ctx.outputs.jar] + if hasattr(ctx.outputs, "executable"): + files.append(ctx.outputs.executable) default_info = DefaultInfo( - files=depset([ctx.outputs.jar]), + files=depset(files), runfiles=ctx.runfiles( + files=extra_runfiles + [ctx.outputs.jar], transitive_files=transitive_files, collect_default=True ), @@ -165,6 +173,11 @@ def _make_providers(ctx, java_info, transitive_files=depset(order="default")): return struct( kt=kotlin_info, providers=[java_info,default_info,kotlin_info], + instrumented_files = struct( + extensions = ['.kt'], + source_attributes = ['srcs'], + dependency_attributes = ['deps', 'runtime_deps'], + ) ) def _compile_action (ctx, rule_kind): diff --git a/kotlin/internal/rules.bzl b/kotlin/internal/rules.bzl index 2647ff05d..9f0babb9e 100644 --- a/kotlin/internal/rules.bzl +++ b/kotlin/internal/rules.bzl @@ -76,44 +76,49 @@ def kt_jvm_import_impl(ctx): return struct(kt = kotlin_info, providers= [default_info, java_info, kotlin_info]) def kt_jvm_library_impl(ctx): - return compile.make_providers(ctx, compile.compile_action(ctx, "kt_jvm_library")) - -def kt_jvm_binary_impl(ctx): - java_info = compile.compile_action(ctx, "kt_jvm_binary") - utils.actions.write_launcher( - ctx, - java_info.transitive_runtime_jars, - ctx.attr.main_class, - ctx.attr.jvm_flags - ) + java_info = compile.compile_action(ctx, "kt_jvm_library") return compile.make_providers( ctx, java_info, depset( order = "default", transitive=[java_info.transitive_runtime_jars], - direct=[ctx.executable._java] ) ) -def kt_jvm_junit_test_impl(ctx): - java_info = compile.compile_action(ctx, "kt_jvm_test") +def _kt_jvm_runnable_impl(ctx, rule_kind, launcher_jvm_flags=[]): + java_info = compile.compile_action(ctx, rule_kind) - transitive_runtime_jars = java_info.transitive_runtime_jars + ctx.files._bazel_test_runner - launcherJvmFlags = ["-ea", "-Dbazel.test_suite=%s"% ctx.attr.test_class] + transitive_runtime_jars = java_info.transitive_runtime_jars + if rule_kind == "kt_jvm_test": + transitive_runtime_jars += ctx.files._bazel_test_runner + if ctx.configuration.coverage_enabled or ctx.attr.internal_coverage_enabled: + transitive_runtime_jars += ctx.files._jacocorunner - utils.actions.write_launcher( + extra_runfiles = utils.actions.write_launcher( ctx, transitive_runtime_jars, main_class = ctx.attr.main_class, - jvm_flags = launcherJvmFlags + ctx.attr.jvm_flags, + jvm_flags = launcher_jvm_flags + ctx.attr.jvm_flags, + ) + transitive_files = depset( + order = "default", + transitive=[transitive_runtime_jars], + direct=[ctx.executable._java], ) return compile.make_providers( ctx, java_info, - depset( - order = "default", - transitive=[transitive_runtime_jars], - direct=[ctx.executable._java] - ) - ) \ No newline at end of file + transitive_files, + extra_runfiles, + ) + +def kt_jvm_binary_impl(ctx): + return _kt_jvm_runnable_impl(ctx, "kt_jvm_binary") + +def kt_jvm_junit_test_impl(ctx): + return _kt_jvm_runnable_impl( + ctx, + "kt_jvm_test", + launcher_jvm_flags = ["-ea", "-Dbazel.test_suite=%s" % ctx.attr.test_class], + ) diff --git a/kotlin/internal/utils.bzl b/kotlin/internal/utils.bzl index 7b6ce2883..a96c845ab 100644 --- a/kotlin/internal/utils.bzl +++ b/kotlin/internal/utils.bzl @@ -182,20 +182,51 @@ def _write_launcher_action(ctx, rjars, main_class, jvm_flags, args="", wrapper_p jvm_flags = " ".join([ctx.expand_location(f, ctx.attr.data) for f in jvm_flags]) template = ctx.attr._java_stub_template.files.to_list()[0] + workspace_prefix = ctx.workspace_name + "/" + substitutions = { + "%classpath%": classpath, + "%javabin%": "JAVABIN=${RUNPATH}" + ctx.executable._java.short_path, + "%jvm_flags%": jvm_flags, + "%workspace_prefix%": workspace_prefix, + } + + extra_runfiles = [] + if ctx.configuration.coverage_enabled or ctx.attr.internal_coverage_enabled: + metadata = ctx.new_file("coverage_runtime_classpath/%s/runtime-classpath.txt" % ctx.attr.name) + extra_runfiles.append(metadata) + # We replace '../' to get a runtime-classpath.txt as close as possible to the one + # produced by java_binary. + metadata_entries = [rjar.short_path.replace("../", "external/") for rjar in rjars] + ctx.file_action(metadata, content="\n".join(metadata_entries)) + substitutions += { + "%java_start_class%": "com.google.testing.coverage.JacocoCoverageRunner", + # %set_jacoco_main_class% and %set_jacoco_java_runfiles_root% are not + # taken into account, so we cram everything with %set_jacoco_metadata%. + "%set_jacoco_metadata%": "\n".join([ + "export JACOCO_METADATA_JAR=${JAVA_RUNFILES}/" + workspace_prefix + metadata.short_path, + "export JACOCO_MAIN_CLASS=" + main_class, + "export JACOCO_JAVA_RUNFILES_ROOT=${JAVA_RUNFILES}/" + workspace_prefix, + ]), + "%set_jacoco_main_class%": "", + "%set_jacoco_java_runfiles_root%": "", + } + else: + substitutions += { + "%java_start_class%": main_class, + "%set_jacoco_metadata%": "", + "%set_jacoco_main_class%": "", + "%set_jacoco_java_runfiles_root%": "", + } + ctx.actions.expand_template( template = template, output = ctx.outputs.executable, - substitutions = { - "%classpath%": classpath, - "%java_start_class%": main_class, - "%javabin%": "JAVABIN=${RUNPATH}" + ctx.executable._java.short_path, - "%jvm_flags%": jvm_flags, - "%set_jacoco_metadata%": "", - "%workspace_prefix%": ctx.workspace_name + "/", - }, + substitutions = substitutions, is_executable = True, ) + return extra_runfiles + # EXPORT ####################################################################################################################################################### utils = struct( actions = struct( diff --git a/kotlin/kotlin.bzl b/kotlin/kotlin.bzl index 0935acfff..09868521f 100644 --- a/kotlin/kotlin.bzl +++ b/kotlin/kotlin.bzl @@ -227,12 +227,28 @@ _common_attr = dict(_implicit_deps.items() + { aspects = [_kt_jvm_plugin_aspect], ), "module_name": attr.string(), + "internal_coverage_instrumented": attr.bool( + default = False, + doc = "visible for testing", + ), }.items()) _runnable_common_attr = dict(_common_attr.items() + { "jvm_flags": attr.string_list( default = [], ), + "_jacocorunner": attr.label( + default = Label("@bazel_tools//tools/jdk:JacocoCoverage"), + ), + "_lcov_merger": attr.label( + default = Label("@bazel_tools//tools/test:LcovMerger"), + executable = True, + cfg = "target", + ), + "internal_coverage_enabled": attr.bool( + default = False, + doc = "visible for testing", + ), }.items()) ######################################################################################################################## diff --git a/tests/integrationtests/BUILD b/tests/integrationtests/BUILD index c0356b1b3..16d855662 100644 --- a/tests/integrationtests/BUILD +++ b/tests/integrationtests/BUILD @@ -18,5 +18,6 @@ test_suite( tests=[ "//tests/integrationtests/jvm:basic_tests", "//tests/integrationtests/jvm:annoation_processing_tests", + "//tests/integrationtests/jvm:coverage_tests", ] ) \ No newline at end of file diff --git a/tests/integrationtests/jvm/BUILD b/tests/integrationtests/jvm/BUILD index 2a56567ef..3136c663b 100644 --- a/tests/integrationtests/jvm/BUILD +++ b/tests/integrationtests/jvm/BUILD @@ -27,3 +27,12 @@ kt_it_assertion_test( test_class="io.bazel.kotlin.testing.jvm.JvmAnnotationProcessingFunctionalTests", data = [ "//examples/dagger:coffee_app"] ) + +kt_it_assertion_test( + name = "coverage_tests", + cases = "//tests/integrationtests/jvm/coverage:cases", + test_class="io.bazel.kotlin.testing.jvm.JvmCoverageFunctionalTests", + deps = [ + "//tests/integrationtests/jvm/coverage:cases", + ], +) diff --git a/tests/integrationtests/jvm/JvmCoverageFunctionalTests.kt b/tests/integrationtests/jvm/JvmCoverageFunctionalTests.kt new file mode 100644 index 000000000..b1a11f9d9 --- /dev/null +++ b/tests/integrationtests/jvm/JvmCoverageFunctionalTests.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2018 The Bazel Authors. 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. + */ +package io.bazel.kotlin.testing.jvm + +import io.bazel.kotlin.testing.AssertionTestCase +import org.junit.Test +import java.io.FileNotFoundException +import java.io.IOException +import java.nio.file.Files +import java.nio.file.Paths +import com.google.common.truth.Truth.assertWithMessage +import java.util.stream.Collectors +import kotlin.test.fail + +class JvmCoverageFunctionalTests : AssertionTestCase("tests/integrationtests/jvm/coverage") { + + @Test + fun testCoverage() { + val coverageOutputDir = Files.createTempDirectory( + Paths.get(System.getenv("TEST_TMPDIR")), + "coverage") + assertExecutableRunfileSucceeds( + "foo_test", + description = "Code coverage should by default be collected for :foo but not :foo_test", + environment = mapOf( + "JAVA_COVERAGE_FILE" to coverageOutputDir.resolve("coverage.dat").toString(), + "RUNPATH" to Paths.get("").toAbsolutePath().toString() + "/")) + val coverageReports = Files.list(coverageOutputDir) + .filter { it.toString().endsWith(".dat") } + .collect(Collectors.toList()) + assertWithMessage("expected one and only one coverage report").that(coverageReports).hasSize(1) + val coverageReportLines = Files.readAllLines(coverageReports[0]) + assertWithMessage("unexpected coverage report").that(coverageReportLines).isEqualTo(listOf( + "SF:simple/Foo.kt", + "FN:4,simple/Foo::exampleA ()Ljava/lang/String;", + "FNDA:1,simple/Foo::exampleA ()Ljava/lang/String;", + "FN:5,simple/Foo::exampleB ()Ljava/lang/String;", + "FNDA:0,simple/Foo::exampleB ()Ljava/lang/String;", + "FN:3,simple/Foo:: ()V", + "FNDA:1,simple/Foo:: ()V", + "DA:3,3", + "DA:4,2", + "DA:5,0", + "end_of_record")) + } +} diff --git a/tests/integrationtests/jvm/coverage/BUILD b/tests/integrationtests/jvm/coverage/BUILD new file mode 100644 index 000000000..b90698797 --- /dev/null +++ b/tests/integrationtests/jvm/coverage/BUILD @@ -0,0 +1,28 @@ +load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_library", "kt_jvm_test") + +kt_jvm_library( + name = "foo", + srcs = ["Foo.kt"], + internal_coverage_instrumented = True, +) + +kt_jvm_test( + name = "foo_test", + srcs = ["FooTest.kt"], + test_class = "simple.FooTest", + deps = [ + ":foo", + "@io_bazel_rules_kotlin_junit_junit//jar", + ], + size = "small", + internal_coverage_enabled = True, +) + +filegroup( + name = "cases", + srcs = [ + ":foo_test", + ], + visibility=["//tests/integrationtests:__subpackages__"], + testonly = True, +) diff --git a/tests/integrationtests/jvm/coverage/Foo.kt b/tests/integrationtests/jvm/coverage/Foo.kt new file mode 100644 index 000000000..d4246a7d4 --- /dev/null +++ b/tests/integrationtests/jvm/coverage/Foo.kt @@ -0,0 +1,6 @@ +package simple + +class Foo { + fun exampleA() = "A" + fun exampleB() = "B" // Not covered +} diff --git a/tests/integrationtests/jvm/coverage/FooTest.kt b/tests/integrationtests/jvm/coverage/FooTest.kt new file mode 100644 index 000000000..44816a3fd --- /dev/null +++ b/tests/integrationtests/jvm/coverage/FooTest.kt @@ -0,0 +1,11 @@ +package simple + +import org.junit.Assert.assertEquals +import org.junit.Test + +class FooTest { + @Test + fun exampleA() { + assertEquals("A", Foo().exampleA()) + } +} diff --git a/tests/rules/AssertionTestCase.kt b/tests/rules/AssertionTestCase.kt index a70176248..99fd627c1 100644 --- a/tests/rules/AssertionTestCase.kt +++ b/tests/rules/AssertionTestCase.kt @@ -66,9 +66,11 @@ abstract class AssertionTestCase(root: String) { else testRunfileRoot.toFile() - protected fun assertExecutableRunfileSucceeds(executable: String, description: String? = null) { + protected fun assertExecutableRunfileSucceeds(executable: String, description: String? = null, environment: Map = emptyMap()) { ProcessBuilder().command("bash", "-c", Paths.get(executable).fileName.toString()) .also { it.directory(executable.resolveDirectory()) } + .also { it.environment().putAll(environment) } + .also { it.inheritIO() } .start().let { it.waitFor(5, TimeUnit.SECONDS) assert(it.exitValue() == 0) { diff --git a/tests/rules/defs.bzl b/tests/rules/defs.bzl index 9a92d3241..8bcfb60e1 100644 --- a/tests/rules/defs.bzl +++ b/tests/rules/defs.bzl @@ -16,7 +16,8 @@ load("//kotlin:kotlin.bzl", "kt_jvm_test") _TEST_COMMON_DEPS=[ "//tests/rules:assertion_test_case", "//third_party/jvm/com/google/truth", - "//third_party/jvm/junit:junit" + "//third_party/jvm/junit:junit", + "@com_github_jetbrains_kotlin//:kotlin-test", ] def kt_it_assertion_test(name, cases, test_class, data = [], deps=[]): diff --git a/third_party/dependencies.yaml b/third_party/dependencies.yaml index ca64699f2..a2cc709ad 100644 --- a/third_party/dependencies.yaml +++ b/third_party/dependencies.yaml @@ -44,6 +44,15 @@ dependencies: modules: ["", "compiler", "producers"] lang: "java" version: "2.9" + org.jacoco: + org.jacoco.core: + lang: "java" + version: "0.7.5.201505241946" + exclude: ["org.ow2.asm:asm-debug-all"] + org.ow2.asm: + asm-commons: + lang: "java" + version: "6.0" replacements: org.jetbrains.kotlin: diff --git a/third_party/jvm/org/jacoco/BUILD b/third_party/jvm/org/jacoco/BUILD new file mode 100644 index 000000000..be35a9f8b --- /dev/null +++ b/third_party/jvm/org/jacoco/BUILD @@ -0,0 +1,12 @@ +licenses(["notice"]) +java_library( + name = "org_jacoco_core", + exports = [ + "//external:jar/io_bazel_rules_kotlin_org/jacoco/org_jacoco_core" + ], + visibility = [ + "//visibility:public" + ] +) + + diff --git a/third_party/jvm/org/ow2/asm/BUILD b/third_party/jvm/org/ow2/asm/BUILD new file mode 100644 index 000000000..d3c8dde57 --- /dev/null +++ b/third_party/jvm/org/ow2/asm/BUILD @@ -0,0 +1,42 @@ +licenses(["notice"]) +java_library( + name = "asm", + exports = [ + "//external:jar/io_bazel_rules_kotlin_org/ow2/asm/asm" + ], + visibility = [ + "//visibility:public" + ] +) + + + +java_library( + name = "asm_commons", + exports = [ + "//external:jar/io_bazel_rules_kotlin_org/ow2/asm/asm_commons" + ], + runtime_deps = [ + ":asm_tree" + ], + visibility = [ + "//visibility:public" + ] +) + + + +java_library( + name = "asm_tree", + exports = [ + "//external:jar/io_bazel_rules_kotlin_org/ow2/asm/asm_tree" + ], + runtime_deps = [ + ":asm" + ], + visibility = [ + "//visibility:public" + ] +) + + diff --git a/third_party/jvm/workspace.bzl b/third_party/jvm/workspace.bzl index bf5d21aa3..295192816 100644 --- a/third_party/jvm/workspace.bzl +++ b/third_party/jvm/workspace.bzl @@ -43,6 +43,10 @@ def list_dependencies(): {"artifact": "org.checkerframework:checker-compat-qual:2.0.0", "lang": "java", "sha1": "fc89b03860d11d6213d0154a62bcd1c2f69b9efa", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_checkerframework_checker_compat_qual", "actual": "@io_bazel_rules_kotlin_org_checkerframework_checker_compat_qual//jar", "bind": "jar/io_bazel_rules_kotlin_org/checkerframework/checker_compat_qual"}, {"artifact": "org.codehaus.mojo:animal-sniffer-annotations:1.14", "lang": "java", "sha1": "775b7e22fb10026eed3f86e8dc556dfafe35f2d5", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_codehaus_mojo_animal_sniffer_annotations", "actual": "@io_bazel_rules_kotlin_org_codehaus_mojo_animal_sniffer_annotations//jar", "bind": "jar/io_bazel_rules_kotlin_org/codehaus/mojo/animal_sniffer_annotations"}, {"artifact": "org.hamcrest:hamcrest-core:1.3", "lang": "java", "sha1": "42a25dc3219429f0e5d060061f71acb49bf010a0", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_hamcrest_hamcrest_core", "actual": "@io_bazel_rules_kotlin_org_hamcrest_hamcrest_core//jar", "bind": "jar/io_bazel_rules_kotlin_org/hamcrest/hamcrest_core"}, + {"artifact": "org.jacoco:org.jacoco.core:0.7.5.201505241946", "lang": "java", "sha1": "1ea906dc5201d2a1bc0604f8650534d4bcaf4c95", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_jacoco_org_jacoco_core", "actual": "@io_bazel_rules_kotlin_org_jacoco_org_jacoco_core//jar", "bind": "jar/io_bazel_rules_kotlin_org/jacoco/org_jacoco_core"}, + {"artifact": "org.ow2.asm:asm-commons:6.0", "lang": "java", "sha1": "f256fd215d8dd5a4fa2ab3201bf653de266ed4ec", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_ow2_asm_asm_commons", "actual": "@io_bazel_rules_kotlin_org_ow2_asm_asm_commons//jar", "bind": "jar/io_bazel_rules_kotlin_org/ow2/asm/asm_commons"}, + {"artifact": "org.ow2.asm:asm-tree:6.0", "lang": "java", "sha1": "a624f1a6e4e428dcd680a01bab2d4c56b35b18f0", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_ow2_asm_asm_tree", "actual": "@io_bazel_rules_kotlin_org_ow2_asm_asm_tree//jar", "bind": "jar/io_bazel_rules_kotlin_org/ow2/asm/asm_tree"}, + {"artifact": "org.ow2.asm:asm:6.0", "lang": "java", "sha1": "bc6fa6b19424bb9592fe43bbc20178f92d403105", "repository": "https://repo.maven.apache.org/maven2/", "name": "io_bazel_rules_kotlin_org_ow2_asm_asm", "actual": "@io_bazel_rules_kotlin_org_ow2_asm_asm//jar", "bind": "jar/io_bazel_rules_kotlin_org/ow2/asm/asm"}, ] def maven_dependencies(callback = declare_maven):