aboutsummaryrefslogtreecommitdiffhomepage
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
parent6b8c7ca48e9e48a9906c031346dc4a924b7ef559 (diff)
Create a whitelist for android_library rules with deps but not srcs
PiperOrigin-RevId: 203230801
-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
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java2
-rw-r--r--tools/android/BUILD.tools7
8 files changed, 26 insertions, 7 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);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index d64c9b16a3..a176758fe2 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -277,6 +277,8 @@ public final class BazelAnalysisMock extends AnalysisMock {
.add("sh_binary(name = 'instrumentation_test_check', srcs = ['empty.sh'])")
.add("package_group(name = 'android_device_whitelist', packages = ['//...'])")
.add("package_group(name = 'export_deps_whitelist', packages = ['//...'])")
+ .add("package_group(name = 'allow_android_library_deps_without_srcs_whitelist',")
+ .add(" packages=['//...'])")
.add("android_tools_defaults_jar(name = 'android_jar')")
.add("sh_binary(name = 'dex_list_obfuscator', srcs = ['empty.sh'])");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
index 9e6f5f865b..4002abf392 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
@@ -1670,7 +1670,7 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase {
assertThat(
getConfiguration(target)
.getFragment(AndroidConfiguration.class)
- .allowSrcsLessAndroidLibraryDeps())
+ .allowSrcsLessAndroidLibraryDeps(getRuleContext(target)))
.isTrue();
}
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index e0474c942e..fa2e4e938f 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -443,8 +443,13 @@ package_group(
packages = ["//..."],
)
+package_group(
+ name = "allow_android_library_deps_without_srcs_whitelist",
+ packages = ["//..."],
+)
+
sh_binary(
name = "dex_list_obfuscator",
srcs = ["dex_list_obfuscator.sh"],
visibility = ["//visibility:public"],
-) \ No newline at end of file
+)