Skip to content

Commit

Permalink
Remove JavaNeverlinkInfoProvider.
Browse files Browse the repository at this point in the history
We need to handle neverlink libraries in java_common (see bazelbuild#3735). Therefore JavaInfo needs to store the neverlink information. Instead of wrapping yet
another provider (JavaNeverlinkInfoProvider) into JavaInfo, store the neverlink
value directly.

PiperOrigin-RevId: 179439005
  • Loading branch information
iirina authored and Copybara-Service committed Dec 18, 2017
1 parent b82ea38 commit 64d46e6
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 57 deletions.
1 change: 0 additions & 1 deletion src/main/java/com/google/devtools/build/lib/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,6 @@ java_library(
"rules/java/JavaInfo.java",
"rules/java/JavaLibraryHelper.java",
"rules/java/JavaNativeLibraryProvider.java",
"rules/java/JavaNeverlinkInfoProvider.java",
"rules/java/JavaOptions.java",
"rules/java/JavaPluginConfigurationProvider.java",
"rules/java/JavaPluginInfoProvider.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,9 @@ public static RuleConfiguredTargetBuilder createAndroidBinary(
zipAlignedApk,
apksUnderTest,
nativeLibs,
/* isResourcesOnly = */ false);
/* isResourcesOnly = */ false,
androidCommon.isNeverLink()
);

if (proguardOutput.getMapping() != null) {
builder.add(ProguardMappingProvider.class, ProguardMappingProvider.create(finalProguardMap));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -792,7 +792,8 @@ public RuleConfiguredTargetBuilder addTransitiveInfoProviders(
Artifact zipAlignedApk,
Iterable<Artifact> apksUnderTest,
NativeLibs nativeLibs,
boolean isResourcesOnly) {
boolean isResourcesOnly,
boolean isNeverlink) {

idlHelper.addTransitiveInfoProviders(builder, classJar, manifestProtoOutput);

Expand Down Expand Up @@ -826,12 +827,12 @@ public RuleConfiguredTargetBuilder addTransitiveInfoProviders(
javaCommon.addGenJarsProvider(builder, javaInfoBuilder, genClassJar, genSourceJar);

DataBinding.maybeAddProvider(builder, ruleContext);
JavaInfo javaInfo =
javaInfoBuilder
.addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider)
.addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
.addProvider(JavaSourceJarsProvider.class, sourceJarsProvider)
.build();
JavaInfo javaInfo = javaInfoBuilder
.addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider)
.addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
.addProvider(JavaSourceJarsProvider.class, sourceJarsProvider)
.setNeverlink(isNeverlink)
.build();

return builder
.setFilesToBuild(filesToBuild)
Expand Down Expand Up @@ -1114,3 +1115,4 @@ public static void createZipFilterAction(
.build();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar;
import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType;
import com.google.devtools.build.lib.rules.java.JavaCommon;
import com.google.devtools.build.lib.rules.java.JavaNeverlinkInfoProvider;
import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
Expand Down Expand Up @@ -321,7 +320,9 @@ public ConfiguredTarget create(RuleContext ruleContext)
null,
ImmutableList.<Artifact>of(),
NativeLibs.EMPTY,
isResourcesOnly);
isResourcesOnly,
// TODO(elenairina): Use JavaCommon.isNeverlink(ruleContext) for consistency among rules.
androidCommon.isNeverLink());

NestedSetBuilder<Artifact> transitiveResourcesJars = collectTransitiveResourceJars(ruleContext);
if (androidCommon.getResourceClassJar() != null) {
Expand All @@ -333,9 +334,6 @@ public ConfiguredTarget create(RuleContext ruleContext)
NativeLibsZipsProvider.class,
new NativeLibsZipsProvider(
AndroidCommon.collectTransitiveNativeLibsZips(ruleContext).build()))
.add(
JavaNeverlinkInfoProvider.class,
new JavaNeverlinkInfoProvider(androidCommon.isNeverLink()))
.add(
JavaSourceInfoProvider.class,
JavaSourceInfoProvider.fromJavaTargetAttributes(javaTargetAttributes, javaSemantics))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -316,14 +316,13 @@ public static List<TransitiveInfoCollection> getExports(RuleContext ruleContext)
public static void checkRuntimeDeps(
RuleContext ruleContext, List<TransitiveInfoCollection> runtimeDepInfo) {
for (TransitiveInfoCollection c : runtimeDepInfo) {
JavaNeverlinkInfoProvider neverLinkedness =
c.getProvider(JavaNeverlinkInfoProvider.class);
if (neverLinkedness == null) {
JavaInfo javaInfo = (JavaInfo) c.get(JavaInfo.PROVIDER.getKey());
if (javaInfo == null) {
continue;
}
boolean reportError =
!ruleContext.getFragment(JavaConfiguration.class).getAllowRuntimeDepsOnNeverLink();
if (neverLinkedness.isNeverlink()) {
if (javaInfo.isNeverlink()) {
String msg = String.format("neverlink dep %s not allowed in runtime deps", c.getLabel());
if (reportError) {
ruleContext.attributeError("runtime_deps", msg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ protected void collect(CcLinkParams.Builder builder, boolean linkingStatically,
.addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider)
.addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
.addProvider(JavaSourceJarsProvider.class, sourceJarsProvider)
.setNeverlink(neverLink)
.build();
return ruleBuilder
.setFilesToBuild(filesToBuild)
Expand All @@ -178,7 +179,6 @@ protected void collect(CcLinkParams.Builder builder, boolean linkingStatically,
.add(
JavaRuntimeJarProvider.class,
new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars()))
.add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink))
.add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
.addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore))
.add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ public final class JavaInfo extends NativeInfo {

private final TransitiveInfoProviderMap providers;

// Whether or not this library should be used only for compilation and not at runtime.
private final boolean neverlink;

/** Returns the instance for the provided providerClass, or <tt>null</tt> if not present. */
@Nullable
public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) {
Expand Down Expand Up @@ -203,9 +206,14 @@ public static <T extends TransitiveInfoProvider> List<T> getProvidersFromListOfT
return providersList.build();
}

private JavaInfo(TransitiveInfoProviderMap providers) {
private JavaInfo(TransitiveInfoProviderMap providers, boolean neverlink) {
super(PROVIDER);
this.providers = providers;
this.neverlink = neverlink;
}

public Boolean isNeverlink() {
return neverlink;
}

@SkylarkCallable(
Expand Down Expand Up @@ -421,6 +429,7 @@ public int hashCode() {
*/
public static class Builder {
TransitiveInfoProviderMapBuilder providerMap;
private boolean neverlink;

private Builder(TransitiveInfoProviderMapBuilder providerMap) {
this.providerMap = providerMap;
Expand All @@ -435,6 +444,11 @@ public static Builder copyOf(JavaInfo javaInfo) {
new TransitiveInfoProviderMapBuilder().addAll(javaInfo.getProviders()));
}

public Builder setNeverlink(boolean neverlink) {
this.neverlink = neverlink;
return this;
}

public <P extends TransitiveInfoProvider> Builder addProvider(
Class<P> providerClass, TransitiveInfoProvider provider) {
Preconditions.checkArgument(ALLOWED_PROVIDERS.contains(providerClass));
Expand All @@ -443,7 +457,7 @@ public <P extends TransitiveInfoProvider> Builder addProvider(
}

public JavaInfo build() {
return new JavaInfo(providerMap.build());
return new JavaInfo(providerMap.build(), neverlink);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ protected void collect(CcLinkParams.Builder builder, boolean linkingStatically,
.addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
// TODO(bazel-team): this should only happen for java_plugin
.addProvider(JavaPluginInfoProvider.class, pluginInfoProvider)
.setNeverlink(neverLink)
.build();

builder
Expand All @@ -241,7 +242,6 @@ protected void collect(CcLinkParams.Builder builder, boolean linkingStatically,
RunfilesProvider.simple(
JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink)))
.setFilesToBuild(filesToBuild)
.addProvider(new JavaNeverlinkInfoProvider(neverLink))
.addProvider(transitiveCppDeps)
.addNativeDeclaredProvider(ccLinkParamsInfo)
.addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
Expand Down

This file was deleted.

0 comments on commit 64d46e6

Please sign in to comment.