Introduce java_common Google-only interface methods to the Starlark build API
The new interface methods have no Bazel implementation, and are completely unrecognized when --experimental_google_legacy_api is false (the current default). They are introduced as stub methods in Bazel to make different build-API-aware binaries interface-consistent.
RELNOTES: None.
PiperOrigin-RevId: 251318455
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
index 0252a45..f1f1d2e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
@@ -24,7 +24,9 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCommonApi;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Runtime;
@@ -260,4 +262,48 @@
.get(PlatformOptions.class)
.useToolchainResolutionForJavaRules;
}
+
+ @Override
+ public ProviderApi getMessageBundleInfo() {
+ // No implementation in Bazel. This method not callable in Starlark except through
+ // (discouraged) use of --experimental_google_legacy_api.
+ return null;
+ }
+
+ @Override
+ public JavaInfo addConstraints(JavaInfo javaInfo, SkylarkList<String> constraints) {
+ // No implementation in Bazel. This method not callable in Starlark except through
+ // (discouraged) use of --experimental_google_legacy_api.
+ return null;
+ }
+
+ @Override
+ public JavaInfo removeAnnotationProcessors(JavaInfo javaInfo) {
+ // No implementation in Bazel. This method not callable in Starlark except through
+ // (discouraged) use of --experimental_google_legacy_api.
+ return null;
+ }
+
+ @Override
+ public NestedSet<Artifact> getCompileTimeJavaDependencyArtifacts(JavaInfo javaInfo) {
+ // No implementation in Bazel. This method not callable in Starlark except through
+ // (discouraged) use of --experimental_google_legacy_api.
+ return null;
+ }
+
+ @Override
+ public JavaInfo addCompileTimeJavaDependencyArtifacts(
+ JavaInfo javaInfo, SkylarkList<Artifact> compileTimeJavaDependencyArtifacts) {
+ // No implementation in Bazel. This method not callable in Starlark except through
+ // (discouraged) use of --experimental_google_legacy_api.
+ return null;
+ }
+
+ @Override
+ public Label getJavaToolchainLabel(
+ JavaToolchainSkylarkApiProviderApi toolchain, Location location) throws EvalException {
+ // No implementation in Bazel. This method not callable in Starlark except through
+ // (discouraged) use of --experimental_google_legacy_api.
+ return null;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
index 4e92006..d7355de 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
@@ -16,6 +16,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
@@ -30,6 +31,7 @@
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.StarlarkSemantics;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
import javax.annotation.Nullable;
/** Utilities for Java compilation support in Skylark. */
@@ -576,4 +578,104 @@
},
doc = "Returns true if --incompatible_use_toolchain_resolution_for_java_rules is enabled.")
boolean isJavaToolchainResolutionEnabled(SkylarkRuleContextT ruleContext) throws EvalException;
+
+ @SkylarkCallable(
+ name = "MessageBundleInfo",
+ doc = "The provider used to supply message bundles for translation",
+ structField = true,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
+ public ProviderApi getMessageBundleInfo();
+
+ @SkylarkCallable(
+ name = "add_constraints",
+ doc = "Returns a copy of the given JavaInfo with the given constraints added.",
+ parameters = {
+ @Param(
+ name = "java_info",
+ positional = true,
+ named = false,
+ type = JavaInfoApi.class,
+ doc = "The JavaInfo to enhance."),
+ @Param(
+ name = "constraints",
+ type = SkylarkList.class,
+ generic1 = String.class,
+ named = true,
+ positional = false,
+ defaultValue = "[]",
+ doc = "Constraints to add")
+ },
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
+ public JavaInfoT addConstraints(JavaInfoT javaInfo, SkylarkList<String> constraints);
+
+ @SkylarkCallable(
+ name = "experimental_disable_annotation_processing",
+ doc =
+ "Returns a copy of the given JavaInfo with any provided annotation processors disabled."
+ + " Annotation processor classpaths are preserved in case they contain Error Prone"
+ + " plugins, but processor names and data are excluded. For example, it can be"
+ + " used to process the inputs to java_common.compile's deps and plugins parameters.",
+ parameters = {
+ @Param(
+ name = "java_info",
+ positional = true,
+ named = false,
+ type = JavaInfoApi.class,
+ doc = "The JavaInfo to process.")
+ },
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
+ public JavaInfoT removeAnnotationProcessors(JavaInfoT javaInfo);
+
+ @SkylarkCallable(
+ name = "compile_time_jdeps",
+ doc = "Returns a depset of the given JavaInfo's compile-time jdeps files.",
+ parameters = {
+ @Param(
+ name = "java_info",
+ positional = true,
+ named = false,
+ type = JavaInfoApi.class,
+ doc = "The JavaInfo to query."),
+ },
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
+ public NestedSet<FileT> getCompileTimeJavaDependencyArtifacts(JavaInfoT javaInfo);
+
+ @SkylarkCallable(
+ name = "add_compile_time_jdeps",
+ doc = "Returns a copy of the given JavaInfo with the given compile-time jdeps files added.",
+ parameters = {
+ @Param(
+ name = "java_info",
+ positional = true,
+ named = false,
+ type = JavaInfoApi.class,
+ doc = "The JavaInfo to clone."),
+ @Param(
+ name = "compile_time_jdeps",
+ type = SkylarkList.class,
+ generic1 = FileApi.class,
+ named = true,
+ positional = false,
+ defaultValue = "[]",
+ doc = "Compile-time jdeps files to add.")
+ },
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
+ public JavaInfoT addCompileTimeJavaDependencyArtifacts(
+ JavaInfoT javaInfo, SkylarkList<FileT> compileTimeJavaDependencyArtifacts);
+
+ @SkylarkCallable(
+ name = "java_toolchain_label",
+ doc = "Returns the toolchain's label.",
+ parameters = {
+ @Param(
+ name = "java_toolchain",
+ positional = true,
+ named = false,
+ type = JavaToolchainSkylarkApiProviderApi.class,
+ doc = "The toolchain."),
+ },
+ useLocation = true,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
+ public Label getJavaToolchainLabel(
+ JavaToolchainSkylarkApiProviderApi toolchain, Location location) throws EvalException;
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index 22bdb2c..a0da4da 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -44,6 +44,7 @@
EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS(
StarlarkSemantics::experimentalEnableAndroidMigrationApis),
EXPERIMENTAL_BUILD_SETTING_API(StarlarkSemantics::experimentalBuildSettingApi),
+ EXPERIMENTAL_GOOGLE_LEGACY_API(StarlarkSemantics::experimentalGoogleLegacyApi),
EXPERIMENTAL_PLATFORM_API(StarlarkSemantics::experimentalPlatformsApi),
EXPERIMENTAL_STARLARK_CONFIG_TRANSITION(
StarlarkSemantics::experimentalStarlarkConfigTransitions),
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
index e54e347..9c5945d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
@@ -16,12 +16,14 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
import com.google.devtools.build.lib.skylarkbuildapi.SkylarkActionFactoryApi;
import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi;
import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCommonApi;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.SkylarkList;
@@ -152,4 +154,36 @@
public boolean isJavaToolchainResolutionEnabled(SkylarkRuleContextApi ruleContext) {
return false;
}
+
+ @Override
+ public ProviderApi getMessageBundleInfo() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public FakeJavaInfo addConstraints(FakeJavaInfo javaInfo, SkylarkList<String> constraints) {
+ return new FakeJavaInfo();
+ }
+
+ @Override
+ public FakeJavaInfo removeAnnotationProcessors(FakeJavaInfo javaInfo) {
+ return new FakeJavaInfo();
+ }
+
+ @Override
+ public NestedSet<FileApi> getCompileTimeJavaDependencyArtifacts(FakeJavaInfo javaInfo) {
+ return null;
+ }
+
+ @Override
+ public FakeJavaInfo addCompileTimeJavaDependencyArtifacts(
+ FakeJavaInfo javaInfo, SkylarkList<FileApi> compileTimeJavaDependencyArtifacts) {
+ return new FakeJavaInfo();
+ }
+
+ @Override
+ public Label getJavaToolchainLabel(
+ JavaToolchainSkylarkApiProviderApi toolchain, Location location) throws EvalException {
+ return null;
+ }
}