aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar elenairina <elenairina@google.com>2017-12-18 10:22:20 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-18 10:23:50 -0800
commit64d46e67121e08e2b305b3f3bd4353a9ff49da13 (patch)
treec7c6e8531e18ab60d83a60ce359a8a832bc165ff /src/main/java/com/google/devtools/build/lib/rules
parentb82ea3886d428301484fc88ca7734d5003e47fd7 (diff)
Remove JavaNeverlinkInfoProvider.
We need to handle neverlink libraries in java_common (see #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
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java35
8 files changed, 36 insertions, 56 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index c23e947b87..3b1933cf3d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -583,7 +583,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
zipAlignedApk,
apksUnderTest,
nativeLibs,
- /* isResourcesOnly = */ false);
+ /* isResourcesOnly = */ false,
+ androidCommon.isNeverLink()
+ );
if (proguardOutput.getMapping() != null) {
builder.add(ProguardMappingProvider.class, ProguardMappingProvider.create(finalProguardMap));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index 659bf5e985..c50550c580 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -792,7 +792,8 @@ public class AndroidCommon {
Artifact zipAlignedApk,
Iterable<Artifact> apksUnderTest,
NativeLibs nativeLibs,
- boolean isResourcesOnly) {
+ boolean isResourcesOnly,
+ boolean isNeverlink) {
idlHelper.addTransitiveInfoProviders(builder, classJar, manifestProtoOutput);
@@ -826,12 +827,12 @@ public class AndroidCommon {
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)
@@ -1114,3 +1115,4 @@ public class AndroidCommon {
.build();
}
}
+
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index bcc8fdcaf0..e92828ead0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -32,7 +32,6 @@ import com.google.devtools.build.lib.packages.TriState;
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;
@@ -321,7 +320,9 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
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) {
@@ -334,9 +335,6 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
new NativeLibsZipsProvider(
AndroidCommon.collectTransitiveNativeLibsZips(ruleContext).build()))
.add(
- JavaNeverlinkInfoProvider.class,
- new JavaNeverlinkInfoProvider(androidCommon.isNeverLink()))
- .add(
JavaSourceInfoProvider.class,
JavaSourceInfoProvider.fromJavaTargetAttributes(javaTargetAttributes, javaSemantics))
.add(
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 3549ecfdf1..4b246657c3 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
@@ -316,14 +316,13 @@ public class JavaCommon {
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);
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 b31c79e297..cdd553f414 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
@@ -169,6 +169,7 @@ public class JavaImport implements RuleConfiguredTargetFactory {
.addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider)
.addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
.addProvider(JavaSourceJarsProvider.class, sourceJarsProvider)
+ .setNeverlink(neverLink)
.build();
return ruleBuilder
.setFilesToBuild(filesToBuild)
@@ -178,7 +179,6 @@ public class JavaImport implements RuleConfiguredTargetFactory {
.add(
JavaRuntimeJarProvider.class,
new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars()))
- .add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink))
.add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
.addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore))
.add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index 56c633e1bf..c26679ff51 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -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) {
@@ -203,9 +206,14 @@ public final class JavaInfo extends NativeInfo {
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(
@@ -421,6 +429,7 @@ public final class JavaInfo extends NativeInfo {
*/
public static class Builder {
TransitiveInfoProviderMapBuilder providerMap;
+ private boolean neverlink;
private Builder(TransitiveInfoProviderMapBuilder providerMap) {
this.providerMap = providerMap;
@@ -435,6 +444,11 @@ public final class JavaInfo extends NativeInfo {
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));
@@ -443,7 +457,7 @@ public final class JavaInfo extends NativeInfo {
}
public JavaInfo build() {
- return new JavaInfo(providerMap.build());
+ return new JavaInfo(providerMap.build(), neverlink);
}
}
}
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 2c8ea6de2a..80b2f905f1 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
@@ -231,6 +231,7 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
.addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
// TODO(bazel-team): this should only happen for java_plugin
.addProvider(JavaPluginInfoProvider.class, pluginInfoProvider)
+ .setNeverlink(neverLink)
.build();
builder
@@ -241,7 +242,6 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
RunfilesProvider.simple(
JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink)))
.setFilesToBuild(filesToBuild)
- .addProvider(new JavaNeverlinkInfoProvider(neverLink))
.addProvider(transitiveCppDeps)
.addNativeDeclaredProvider(ccLinkParamsInfo)
.addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java
deleted file mode 100644
index e156133218..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNeverlinkInfoProvider.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.java;
-
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-
-/**
- * A {@link TransitiveInfoProvider} that provides information about whether a Java archive
- * is neverlink.
- */
-@Immutable
-public final class JavaNeverlinkInfoProvider implements TransitiveInfoProvider {
- private final boolean isNeverLink;
-
- public JavaNeverlinkInfoProvider(boolean isNeverLink) {
- this.isNeverLink = isNeverLink;
- }
-
- public boolean isNeverlink() {
- return isNeverLink;
- }
-}