From cf9f89cf1f818e468da7e2293055ba2b92e45e2f Mon Sep 17 00:00:00 2001 From: ilist Date: Fri, 9 Apr 2021 04:05:13 -0700 Subject: [PATCH] Inline JavaSemantics.addProviders method and only propagate linking and native libraries information. Design document: https://docs.google.com/document/d/10isTEK5W9iCPp4BIyGBrLY5iti3Waaam6EeGVSjq3r8/edit#bookmark=id.xq791hgfxn1o PiperOrigin-RevId: 367606830 --- .../bazel/rules/java/BazelJavaSemantics.java | 27 ------------------- .../devtools/build/lib/rules/java/BUILD | 2 +- .../rules/java/JavaCcLinkParamsProvider.java | 6 ++++- .../build/lib/rules/java/JavaCommon.java | 27 +++++++++++++++++++ .../build/lib/rules/java/JavaImport.java | 1 - .../build/lib/rules/java/JavaLibrary.java | 1 - .../build/lib/rules/java/JavaSemantics.java | 13 --------- 7 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index b5eb17cc265f24..91180a8354848c 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java @@ -22,8 +22,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.AnalysisUtils; -import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.Runfiles.Builder; @@ -42,12 +40,10 @@ import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.Type; -import com.google.devtools.build.lib.rules.cpp.CcInfo; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder; import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression; -import com.google.devtools.build.lib.rules.java.JavaCcLinkParamsProvider; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType; @@ -505,29 +501,6 @@ public ImmutableList getCompatibleJavacOptions( return ImmutableList.of(); } - @Override - public void addProviders( - RuleContext ruleContext, - JavaCommon javaCommon, - Artifact gensrcJar, - RuleConfiguredTargetBuilder ruleBuilder) { - // TODO(plf): Figure out whether we can remove support for C++ dependencies in Bazel. - ImmutableList deps = - javaCommon.targetsTreatedAsDeps(ClasspathType.BOTH); - ImmutableList ccInfos = - ImmutableList.builder() - .addAll(AnalysisUtils.getProviders(deps, CcInfo.PROVIDER)) - .addAll( - AnalysisUtils.getProviders(deps, JavaCcLinkParamsProvider.PROVIDER).stream() - .map(JavaCcLinkParamsProvider::getCcInfo) - .collect(ImmutableList.toImmutableList())) - .build(); - - // TODO(plf): return empty CcLinkingInfo because deps= in Java targets should not contain C++ - // targets. We need to make sure that no one uses this functionality, though. - ruleBuilder.addNativeDeclaredProvider(new JavaCcLinkParamsProvider(CcInfo.merge(ccInfos))); - } - // TODO(dmarting): simplify that logic when we remove the legacy Bazel java_test behavior. private String getPrimaryClassLegacy(RuleContext ruleContext, ImmutableList sources) { boolean createExecutable = ruleContext.attributes().get("create_executable", Type.BOOLEAN); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD index dedf64fddd63a4..10240d27b567de 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD @@ -13,7 +13,6 @@ java_library( srcs = [ "GenericBuildInfoPropertiesTranslator.java", "JavaBinary.java", - "JavaCcLinkParamsProvider.java", "JavaImport.java", "JavaImportBaseRule.java", "JavaInfo.java", @@ -121,6 +120,7 @@ java_library( "DeployArchiveBuilder.java", "ImportDepsCheckActionBuilder.java", "JavaBuildInfoFactory.java", + "JavaCcLinkParamsProvider.java", "JavaCommon.java", "JavaCompilationArgsProvider.java", "JavaCompilationArtifacts.java", diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java index 3bf44124ca0b77..a63738ea2272b8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java @@ -32,7 +32,11 @@ public final class JavaCcLinkParamsProvider private final CcInfo ccInfo; public JavaCcLinkParamsProvider(CcInfo ccInfo) { - this.ccInfo = CcInfo.builder().setCcLinkingContext(ccInfo.getCcLinkingContext()).build(); + this.ccInfo = + CcInfo.builder() + .setCcLinkingContext(ccInfo.getCcLinkingContext()) + .setCcNativeLibraryInfo(ccInfo.getCcNativeLibraryInfo()) + .build(); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 4d6a9ff0a2d175..0e6831f0d79c65 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -13,12 +13,16 @@ // limitations under the License. package com.google.devtools.build.lib.rules.java; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.AnalysisUtils; import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.OutputGroupInfo; import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts; @@ -40,6 +44,7 @@ import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.packages.Type; +import com.google.devtools.build.lib.rules.cpp.CcInfo; import com.google.devtools.build.lib.rules.cpp.LibraryToLink; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType; import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider.JavaPluginInfo; @@ -689,6 +694,28 @@ public void addTransitiveInfoProviders( javaInfoBuilder.addProvider(JavaExportsProvider.class, exportsProvider); javaInfoBuilder.addProvider(JavaCompilationInfoProvider.class, compilationInfoProvider); + + addCcRelatedProviders(builder); + } + + /** Adds Cc related providers to a Java target. */ + private void addCcRelatedProviders(RuleConfiguredTargetBuilder ruleBuilder) { + ImmutableList deps = + targetsTreatedAsDeps(ClasspathType.BOTH); + ImmutableList ccInfos = + Streams.concat( + AnalysisUtils.getProviders(deps, CcInfo.PROVIDER).stream(), + AnalysisUtils.getProviders(deps, JavaCcLinkParamsProvider.PROVIDER).stream() + .map(JavaCcLinkParamsProvider::getCcInfo)) + .collect(toImmutableList()); + + CcInfo mergedCcInfo = CcInfo.merge(ccInfos); + ruleBuilder.addNativeDeclaredProvider( + new JavaCcLinkParamsProvider( + CcInfo.builder() + .setCcLinkingContext(mergedCcInfo.getCcLinkingContext()) + .setCcNativeLibraryInfo(mergedCcInfo.getCcNativeLibraryInfo()) + .build())); } private InstrumentedFilesInfo getInstrumentationFilesProvider( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java index a8b81b4a35bed5..cf9429e61142e1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java @@ -110,7 +110,6 @@ public ConfiguredTarget create(RuleContext ruleContext) ImmutableBiMap compilationToRuntimeJarMap = compilationToRuntimeJarMapBuilder.build(); - semantics.addProviders(ruleContext, common, /* gensrcJar= */ null, ruleBuilder); NestedSet filesToBuild = filesBuilder.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java index 282f3eff8cc197..758880a5166408 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java @@ -155,7 +155,6 @@ final ConfiguredTarget init( RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext); - semantics.addProviders(ruleContext, common, outputs.genSource(), builder); if (generatedExtensionRegistryProvider != null) { builder.addNativeDeclaredProvider(generatedExtensionRegistryProvider); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java index 65bb76b404403d..f826f11c68c66d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java @@ -22,7 +22,6 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.OutputGroupInfo; -import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.analysis.Runfiles; @@ -424,18 +423,6 @@ String addCoverageSupport(JavaCompilationHelper helper, Artifact executable) Iterable getJvmFlags( RuleContext ruleContext, ImmutableList srcsArtifacts, List userJvmFlags); - /** - * Adds extra providers to a Java target. - * - * @throws InterruptedException - */ - void addProviders( - RuleContext ruleContext, - JavaCommon javaCommon, - Artifact gensrcJar, - RuleConfiguredTargetBuilder ruleBuilder) - throws InterruptedException; - /** Translates XMB messages to translations artifact suitable for Java targets. */ ImmutableList translate(RuleContext ruleContext, List messages);