diff options
author | cushon <cushon@google.com> | 2018-07-03 22:28:44 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-03 22:30:09 -0700 |
commit | d292b34b97970b934a1061e13e2d67844bd083e7 (patch) | |
tree | 9ef9a60ca79a74a7366eaca72848eb5bdbae2bdc | |
parent | 6b8c7ca48e9e48a9906c031346dc4a924b7ef559 (diff) |
Create a whitelist for android_library rules with deps but not srcs
PiperOrigin-RevId: 203230801
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 +) |