Add android constraints inside java_lite_proto_library
I’ve extended internal java semantics with add_constraints function (open source version doesn’t need it - empty function is enough).
In order to use internal add_constraint in tests (which depends on java_common.add_contraints -> experimental only), I've added experimental_google_legacy_api build option to all tests which depends on android constraint and java_lite_proto_library.
Resolved not allowed dependencies on .jar artifacts in Android binaries by adding JavaInfo inside 'provides' in java_lite_proto_library rule.
I've also added java_lite_proto_aspect as an artifact name for JavaLiteProtoLibrary inside GoogleJavaSematics.
PiperOrigin-RevId: 430192660
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
index 252b5af..a2d21a8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
@@ -31,8 +31,10 @@
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
+import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import net.starlark.java.eval.EvalException;
import net.starlark.java.eval.Module;
import net.starlark.java.eval.Sequence;
@@ -270,9 +272,12 @@
@Override
public JavaInfo addConstraints(JavaInfo javaInfo, Sequence<?> constraints) throws EvalException {
- // No implementation in Bazel. This method not callable in Starlark except through
- // (discouraged) use of --experimental_google_legacy_api.
- return null;
+ List<String> constraintStrings = Sequence.cast(constraints, String.class, "constraints");
+ ImmutableList<String> mergedConstraints =
+ Stream.concat(javaInfo.getJavaConstraints().stream(), constraintStrings.stream())
+ .distinct()
+ .collect(toImmutableList());
+ return JavaInfo.Builder.copyOf(javaInfo).setJavaConstraints(mergedConstraints).build();
}
@Override
diff --git a/src/main/starlark/builtins_bzl/common/java/java_semantics.bzl b/src/main/starlark/builtins_bzl/common/java/java_semantics.bzl
index e6e7b1f..104c400 100644
--- a/src/main/starlark/builtins_bzl/common/java/java_semantics.bzl
+++ b/src/main/starlark/builtins_bzl/common/java/java_semantics.bzl
@@ -35,6 +35,9 @@
# wrap the jar in JavaInfo so we can add it to deps for java_common.compile()
return JavaInfo(output_jar = runner_jar, compile_jar = runner_jar)
+def _add_constraints(java_info, constraints):
+ return java_info
+
semantics = struct(
JAVA_TOOLCHAIN_LABEL = "@bazel_tools//tools/jdk:current_java_toolchain",
JAVA_PLUGINS_FLAG_ALIAS_LABEL = "@bazel_tools//tools/jdk:java_plugins_flag_alias",
@@ -57,4 +60,5 @@
LINT_PROGRESS_MESSAGE = "Running Android Lint for: %{label}",
check_proto_registry_collision = _check_proto_registry_collision,
get_coverage_runner = _get_coverage_runner,
+ add_constraints = _add_constraints,
)
diff --git a/src/main/starlark/builtins_bzl/common/java/proto/java_lite_proto_library.bzl b/src/main/starlark/builtins_bzl/common/java/proto/java_lite_proto_library.bzl
index c152d4d..b3d0f72 100644
--- a/src/main/starlark/builtins_bzl/common/java/proto/java_lite_proto_library.bzl
+++ b/src/main/starlark/builtins_bzl/common/java/proto/java_lite_proto_library.bzl
@@ -116,6 +116,7 @@
java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo],
enable_jspecify = False,
)
+ java_info = semantics.add_constraints(java_info, ["android"])
else:
# If there are no proto sources just pass along the compilation dependencies.
java_info = java_common.merge(deps)
@@ -148,4 +149,5 @@
default = configuration_field(fragment = "proto", name = "proto_toolchain_for_java_lite"),
),
},
+ provides = [JavaInfo],
)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
index ba281a4..4f1a1c2 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
@@ -70,7 +70,9 @@
@Before
public final void setupStarlarkRule() throws Exception {
- setBuildLanguageOptions("--experimental_builtins_injection_override=+java_lite_proto_library");
+ setBuildLanguageOptions(
+ "--experimental_builtins_injection_override=+java_lite_proto_library",
+ "--experimental_google_legacy_api");
}
private void mockToolchains() throws IOException {