Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[8.0.0] Update rules_java v8.5.0 and stop exporting builtins java rules and symbols #24414

Merged
merged 15 commits into from
Nov 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ bazel_dep(name = "zstd-jni", version = "1.5.2-3.bcr.1")
bazel_dep(name = "blake3", version = "1.5.1.bcr.1")
bazel_dep(name = "zlib", version = "1.3.1.bcr.3")
bazel_dep(name = "rules_cc", version = "0.0.16")
bazel_dep(name = "rules_java", version = "8.3.2")
bazel_dep(name = "rules_java", version = "8.5.0")
bazel_dep(name = "rules_graalvm", version = "0.11.1")
bazel_dep(name = "rules_proto", version = "7.0.2")
bazel_dep(name = "rules_jvm_external", version = "6.0")
Expand Down
31 changes: 6 additions & 25 deletions MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/MODULE.tools
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ use_repo(buildozer_binary, "buildozer_binary")
# Dependencies used to auto-load removed symbols and rules from Bazel (due to Starlarkification)
# See also: --incompatible_autoload_externally, AutoloadSymbols
bazel_dep(name = "protobuf", version = "29.0-rc3", repo_name = "com_google_protobuf")
bazel_dep(name = "rules_java", version = "8.3.2")
bazel_dep(name = "rules_java", version = "8.5.0")
bazel_dep(name = "rules_cc", version = "0.0.16")
bazel_dep(name = "rules_python", version = "0.40.0")
bazel_dep(name = "rules_shell", version = "0.2.0")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,14 @@ gen_workspace_stanza(
name = "rules_suffix",
out = "rules_suffix.WORKSPACE",
postamble = """
load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains")
load("@rules_java//java:rules_java_deps.bzl", "rules_java_dependencies")
rules_java_dependencies()
rules_java_toolchains()
load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
load("@rules_java//java:repositories.bzl", "rules_java_toolchains")
rules_java_toolchains()
""",
preamble = """
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,13 @@ public JavaInfo enableImplicitSourcelessDepsExportsCompatibility(Info javaInfo,
? JavaCompilationArgsProvider.ClasspathType.COMPILE_ONLY
: JavaCompilationArgsProvider.ClasspathType.BOTH;
JavaInfo.Builder builder = JavaInfo.Builder.create();
JavaInfo.PROVIDER
.wrap(javaInfo)
JavaInfo.wrap(javaInfo)
.compilationArgsProvider()
.ifPresent(
args ->
builder.javaCompilationArgs(
JavaCompilationArgsProvider.builder().addExports(args, type).build()));
return builder.setNeverlink(neverlink).build();
return builder.setProvider(javaInfo.getProvider()).setNeverlink(neverlink).build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/skyframe:bzl_load_value",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
Expand Down Expand Up @@ -107,7 +108,6 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/analysis:config/invalid_configuration_exception",
"//src/main/java/com/google/devtools/build/lib/analysis:config/toolchain_type_requirement",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
"//src/main/java/com/google/devtools/build/lib/analysis:file_provider",
"//src/main/java/com/google/devtools/build/lib/analysis:platform_options",
"//src/main/java/com/google/devtools/build/lib/analysis:provider_collection",
"//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.java;

import static com.google.devtools.build.lib.skyframe.BzlLoadValue.keyForBuild;
import static com.google.devtools.build.lib.skyframe.BzlLoadValue.keyForBuiltins;

import com.google.devtools.build.lib.actions.Artifact;
Expand All @@ -27,6 +28,7 @@
import com.google.devtools.build.lib.packages.StarlarkInfoWithSchema;
import com.google.devtools.build.lib.packages.StarlarkProviderWrapper;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.skyframe.BzlLoadValue;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Optional;
import net.starlark.java.eval.Starlark;
Expand All @@ -36,7 +38,14 @@
public class BootClassPathInfo extends StarlarkInfoWrapper {

/** Provider singleton constant. */
public static final StarlarkProviderWrapper<BootClassPathInfo> LEGACY_BUILTINS_PROVIDER =
new BuiltinsProvider();

public static final StarlarkProviderWrapper<BootClassPathInfo> PROVIDER = new Provider();
public static final StarlarkProviderWrapper<BootClassPathInfo> RULES_JAVA_PROVIDER =
new RulesJavaProvider();
public static final StarlarkProviderWrapper<BootClassPathInfo> WORKSPACE_PROVIDER =
new WorkspaceProvider();

private static final BootClassPathInfo EMPTY =
new BootClassPathInfo(null) {
Expand Down Expand Up @@ -74,6 +83,21 @@ private BootClassPathInfo(StructImpl underlying) {
super(underlying);
}

public static BootClassPathInfo wrap(Info info) throws RuleErrorException {
com.google.devtools.build.lib.packages.Provider.Key key = info.getProvider().getKey();
if (key.equals(PROVIDER.getKey())) {
return PROVIDER.wrap(info);
} else if (key.equals(LEGACY_BUILTINS_PROVIDER.getKey())) {
return LEGACY_BUILTINS_PROVIDER.wrap(info);
} else if (key.equals(RULES_JAVA_PROVIDER.getKey())) {
return RULES_JAVA_PROVIDER.wrap(info);
} else if (key.equals(WORKSPACE_PROVIDER.getKey())) {
return WORKSPACE_PROVIDER.wrap(info);
} else {
throw new RuleErrorException("expected BootClassPathInfo, got: " + key);
}
}

/** The jar files containing classes for system APIs, i.e. a Java <= 8 bootclasspath. */
public NestedSet<Artifact> bootclasspath() throws RuleErrorException {
return getUnderlyingNestedSet("bootclasspath", Artifact.class);
Expand Down Expand Up @@ -105,12 +129,40 @@ && systemInputs().isEmpty()
&& systemPath().isEmpty();
}

private static class Provider extends StarlarkProviderWrapper<BootClassPathInfo> {
private Provider() {
private static class BuiltinsProvider extends Provider {
private BuiltinsProvider() {
super(
keyForBuiltins(
Label.parseCanonicalUnchecked("@_builtins//:common/java/boot_class_path_info.bzl")),
"BootClassPathInfo");
Label.parseCanonicalUnchecked("@_builtins//:common/java/boot_class_path_info.bzl")));
}
}

private static class RulesJavaProvider extends Provider {
private RulesJavaProvider() {
super(keyForBuild(Label.parseCanonicalUnchecked("//java/private:boot_class_path_info.bzl")));
}
}

private static class WorkspaceProvider extends Provider {
private WorkspaceProvider() {
super(
keyForBuild(
Label.parseCanonicalUnchecked(
"@@rules_java//java/private:boot_class_path_info.bzl")));
}
}

private static class Provider extends StarlarkProviderWrapper<BootClassPathInfo> {
private Provider() {
this(
keyForBuild(
Label.parseCanonicalUnchecked(
JavaSemantics.RULES_JAVA_PROVIDER_LABELS_PREFIX
+ "java/private:boot_class_path_info.bzl")));
}

private Provider(BzlLoadValue.Key key) {
super(key, "BootClassPathInfo");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,17 @@

import com.google.auto.value.AutoValue;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.collect.nestedset.Depset.TypeException;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.StructImpl;
import com.google.devtools.build.lib.rules.java.JavaInfo.JavaInfoInternalProvider;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
import com.google.devtools.build.lib.util.FileType;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.util.Iterator;
import java.util.Optional;
import javax.annotation.Nullable;
import net.starlark.java.eval.EvalException;

Expand Down Expand Up @@ -107,40 +102,6 @@ private static JavaCompilationArgsProvider create(
*/
public abstract NestedSet<Artifact> getCompileTimeJavaDependencyArtifacts();

/**
* Returns a {@link JavaCompilationArgsProvider} for the given {@link TransitiveInfoCollection}s.
*
* <p>If the given targets have a {@link JavaCompilationArgsProvider}, the information from that
* provider will be returned. Otherwise, any jar files provided by the targets will be wrapped in
* the returned provider.
*
* @deprecated The handling of raw jar files is present for legacy compatibility. All new
* Java-based rules should require their dependencies to provide {@link
* JavaCompilationArgsProvider}, and that precompiled jar files be wrapped in {@code
* java_import}. New rules should not use this method, and existing rules should be cleaned up
* to disallow jar files in their deps.
*/
// TODO(b/11285003): disallow jar files in deps, require java_import instead
@Deprecated
public static JavaCompilationArgsProvider legacyFromTargets(
Iterable<? extends TransitiveInfoCollection> infos) throws RuleErrorException {
Builder argsBuilder = builder();
for (TransitiveInfoCollection info : infos) {
Optional<JavaCompilationArgsProvider> provider = JavaInfo.getCompilationArgsProvider(info);
if (provider.isPresent()) {
argsBuilder.addExports(provider.get());
} else {
NestedSet<Artifact> filesToBuild = info.getProvider(FileProvider.class).getFilesToBuild();
for (Artifact jar : FileType.filter(filesToBuild.toList(), JavaSemantics.JAR)) {
argsBuilder
.addRuntimeJar(jar)
.addDirectCompileTimeJar(/* interfaceJar= */ jar, /* fullJar= */ jar);
}
}
}
return argsBuilder.build();
}

/** Enum to specify transitive compilation args traversal */
public enum ClasspathType {
/* treat the same for compile time and runtime */
Expand Down
Loading
Loading