Add `merge_without_outputs()` convenience method for java plugin infos
This is pure translation of the java implementation at `JavaPluginInfo.mergeWithoutJavaInputs`
PiperOrigin-RevId: 540378700
Change-Id: I6554bb26931a1a10c4ff357b2e03257084b3dda7
diff --git a/src/main/starlark/builtins_bzl/common/java/java_plugin_info.bzl b/src/main/starlark/builtins_bzl/common/java/java_plugin_info.bzl
index fb8678d..823e2c3 100644
--- a/src/main/starlark/builtins_bzl/common/java/java_plugin_info.bzl
+++ b/src/main/starlark/builtins_bzl/common/java/java_plugin_info.bzl
@@ -96,3 +96,39 @@
},
init = _javaplugininfo_init,
)
+
+def merge_without_outputs(infos):
+ """ Merge plugin information from a list of JavaPluginInfo or JavaInfo
+
+ Args:
+ infos: ([JavaPluginInfo|JavaInfo]) list of providers to merge
+
+ Returns:
+ (JavaPluginInfo)
+ """
+ plugins = []
+ api_generating_plugins = []
+ for info in infos:
+ if _has_plugin_data(info.plugins):
+ plugins.append(info.plugins)
+ if _has_plugin_data(info.api_generating_plugins):
+ api_generating_plugins.append(info.api_generating_plugins)
+ return _new_javaplugininfo(
+ plugins = _merge_plugin_data(plugins),
+ api_generating_plugins = _merge_plugin_data(api_generating_plugins),
+ java_outputs = [],
+ )
+
+def _has_plugin_data(plugin_data):
+ return plugin_data and (
+ plugin_data.processor_classes or
+ plugin_data.processor_jars or
+ plugin_data.processor_data
+ )
+
+def _merge_plugin_data(datas):
+ return _JavaPluginDataInfo(
+ processor_classes = depset(transitive = [p.processor_classes for p in datas]),
+ processor_jars = depset(transitive = [p.processor_jars for p in datas]),
+ processor_data = depset(transitive = [p.processor_data for p in datas]),
+ )