Skip to content

Commit

Permalink
Inline JavaSemantics.addProviders method and only propagate linking a…
Browse files Browse the repository at this point in the history
…nd native libraries information.

Design document: https://docs.google.com/document/d/10isTEK5W9iCPp4BIyGBrLY5iti3Waaam6EeGVSjq3r8/edit#bookmark=id.xq791hgfxn1o

PiperOrigin-RevId: 367606830
  • Loading branch information
comius authored and copybara-github committed Apr 9, 2021
1 parent 7d3aa77 commit cf9f89c
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -505,29 +501,6 @@ public ImmutableList<String> 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<? extends TransitiveInfoCollection> deps =
javaCommon.targetsTreatedAsDeps(ClasspathType.BOTH);
ImmutableList<CcInfo> ccInfos =
ImmutableList.<CcInfo>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<Artifact> sources) {
boolean createExecutable = ruleContext.attributes().get("create_executable", Type.BOOLEAN);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ java_library(
srcs = [
"GenericBuildInfoPropertiesTranslator.java",
"JavaBinary.java",
"JavaCcLinkParamsProvider.java",
"JavaImport.java",
"JavaImportBaseRule.java",
"JavaInfo.java",
Expand Down Expand Up @@ -121,6 +120,7 @@ java_library(
"DeployArchiveBuilder.java",
"ImportDepsCheckActionBuilder.java",
"JavaBuildInfoFactory.java",
"JavaCcLinkParamsProvider.java",
"JavaCommon.java",
"JavaCompilationArgsProvider.java",
"JavaCompilationArtifacts.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<? extends TransitiveInfoCollection> deps =
targetsTreatedAsDeps(ClasspathType.BOTH);
ImmutableList<CcInfo> 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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@ public ConfiguredTarget create(RuleContext ruleContext)

ImmutableBiMap<Artifact, Artifact> compilationToRuntimeJarMap =
compilationToRuntimeJarMapBuilder.build();
semantics.addProviders(ruleContext, common, /* gensrcJar= */ null, ruleBuilder);

NestedSet<Artifact> filesToBuild = filesBuilder.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -424,18 +423,6 @@ String addCoverageSupport(JavaCompilationHelper helper, Artifact executable)
Iterable<String> getJvmFlags(
RuleContext ruleContext, ImmutableList<Artifact> srcsArtifacts, List<String> 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<Artifact> translate(RuleContext ruleContext, List<Artifact> messages);

Expand Down

0 comments on commit cf9f89c

Please sign in to comment.