| """Custom @rules_testing subject for the JavaToolchainInfo provider""" |
| |
| load("@rules_testing//lib:truth.bzl", "subjects") |
| load("//java/common:java_common.bzl", "java_common") |
| |
| def _new_java_builder_subject(tool_info, meta): |
| return subjects.struct( |
| struct( |
| data = [f.path for f in tool_info.data.to_list()], |
| jvm_opts = tool_info.jvm_opts.to_list(), |
| ), |
| meta = meta, |
| attrs = { |
| "data": lambda values, *, meta: subjects.collection(values, meta = meta, format = True), |
| "jvm_opts": lambda values, *, meta: subjects.collection(values, meta = meta, format = True), |
| }, |
| ) |
| |
| def _new_java_toolchain_info_subject(info, meta): |
| public = struct( |
| jacocorunner = lambda: subjects.file(info.jacocorunner.executable, meta.derive("jacocorunner.executable")), |
| timezone_data = lambda: subjects.file(info._timezone_data, meta.derive("_timezone_data")), |
| header_compiler_builtin_processors = lambda: subjects.collection(info._header_compiler_builtin_processors.to_list(), meta.derive("_header_compiler_builtin_processors")), |
| reduced_classpath_incompatible_processors = lambda: subjects.collection(info._reduced_classpath_incompatible_processors.to_list(), meta.derive("_reduced_classpath_incompatible_processors")), |
| javabuilder = lambda: _new_java_builder_subject(info._javabuilder, meta.derive("_javabuilder")), |
| label = lambda: subjects.label(info.label, meta.derive("label")), |
| # TODO: hvd - Give label_subject predicate matching support so we don't need this str_subject variant. |
| label_str = lambda: subjects.str(str(info.label), meta.derive("label_str")), |
| default_javacopts = lambda: subjects.collection(info._javacopts_list, meta.derive("default_javacopts")), |
| default_javacopts_depset = lambda: subjects.collection(info._javacopts.to_list(), meta.derive("default_javacopts_depset")), |
| ) |
| return public |
| |
| def _from_target(env, target): |
| return env.expect.that_target(target).provider( |
| java_common.JavaToolchainInfo, |
| factory = _new_java_toolchain_info_subject, |
| provider_name = "JavaToolchainInfo", |
| ) |
| |
| java_toolchain_info_subject = struct( |
| new = _new_java_toolchain_info_subject, |
| from_target = _from_target, |
| ) |