aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2018-07-03 22:28:44 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-03 22:30:09 -0700
commitd292b34b97970b934a1061e13e2d67844bd083e7 (patch)
tree9ef9a60ca79a74a7366eaca72848eb5bdbae2bdc /src/main/java/com/google/devtools/build/lib
parent6b8c7ca48e9e48a9906c031346dc4a924b7ef559 (diff)
Create a whitelist for android_library rules with deps but not srcs
PiperOrigin-RevId: 203230801
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java2
5 files changed, 17 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
index 7e91cdc941..3e6c180a56 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
@@ -70,6 +70,11 @@ public class BazelAndroidBinaryRule implements RuleDefinition {
.add(
Whitelist.getAttributeFromWhitelistName("export_deps")
.value(environment.getToolsLabel("//tools/android:export_deps_whitelist")))
+ .add(
+ Whitelist.getAttributeFromWhitelistName("allow_deps_without_srcs")
+ .value(
+ environment.getToolsLabel(
+ "//tools/android:allow_android_library_deps_without_srcs_whitelist")))
.cfg(
new ConfigFeatureFlagTransitionFactory(AndroidFeatureFlagSetProvider.FEATURE_FLAG_ATTR))
.addRequiredToolchains(CppRuleClasses.ccToolchainTypeAttribute(environment))
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java
index c7651cd08a..7cca4871e9 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.bazel.rules.android;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.whitelisting.Whitelist;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.rules.android.AndroidLibraryBaseRule;
@@ -41,8 +42,12 @@ public class BazelAndroidLibraryRule implements RuleDefinition {
<!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */
.setImplicitOutputsFunction(AndroidRuleClasses.ANDROID_LIBRARY_IMPLICIT_OUTPUTS)
.addRequiredToolchains(CppRuleClasses.ccToolchainTypeAttribute(env))
+ .add(
+ Whitelist.getAttributeFromWhitelistName("allow_deps_without_srcs")
+ .value(
+ env.getToolsLabel(
+ "//tools/android:allow_android_library_deps_without_srcs_whitelist")))
.build();
-
}
@Override
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 76ec398342..88128becae 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
@@ -759,7 +759,7 @@ public class AndroidCommon {
!hasSrcs
&& ruleContext
.getFragment(AndroidConfiguration.class)
- .allowSrcsLessAndroidLibraryDeps();
+ .allowSrcsLessAndroidLibraryDeps(ruleContext);
return javaCommon.collectJavaCompilationArgs(isNeverLink, exportDeps);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 810b2cb8a6..64f2bc88d2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactor
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.whitelisting.Whitelist;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
@@ -1138,8 +1139,9 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment
return useRexToCompressDexFiles;
}
- public boolean allowSrcsLessAndroidLibraryDeps() {
- return allowAndroidLibraryDepsWithoutSrcs;
+ public boolean allowSrcsLessAndroidLibraryDeps(RuleContext ruleContext) {
+ return allowAndroidLibraryDepsWithoutSrcs
+ && Whitelist.isAvailable(ruleContext, "allow_deps_without_srcs");
}
public boolean useAndroidResourceShrinking() {
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 7c142a167e..f65080041d 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
@@ -62,7 +62,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
+ "targets implicitly. Please use android_library.exports to explicitly specify "
+ "targets this rule exports";
AndroidConfiguration androidConfig = ruleContext.getFragment(AndroidConfiguration.class);
- if (androidConfig.allowSrcsLessAndroidLibraryDeps()) {
+ if (androidConfig.allowSrcsLessAndroidLibraryDeps(ruleContext)) {
ruleContext.attributeWarning("deps", message);
} else {
ruleContext.attributeError("deps", message);