diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
4 files changed, 7 insertions, 47 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java index 49c5dba321..5c708e479d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java @@ -97,7 +97,7 @@ public class AndroidLocalTestBaseRule implements RuleDefinition { .value(environment.getToolsLabel(AndroidRuleClasses.DEFAULT_RESOURCES_BUSYBOX))) .add( attr(":android_sdk", LABEL) - .allowedRuleClasses("android_sdk", "filegroup") + .allowedRuleClasses("android_sdk") .value( getAndroidSdkLabel(environment.getToolsLabel(AndroidRuleClasses.DEFAULT_SDK)))) /* <!-- #BLAZE_RULE($android_local_test_base).ATTRIBUTE(test_class) --> diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index 084f143f60..e13978ce6c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -541,7 +541,7 @@ public final class AndroidRuleClasses { return builder .add( attr(":android_sdk", LABEL) - .allowedRuleClasses("android_sdk", "filegroup") + .allowedRuleClasses("android_sdk") .value(getAndroidSdkLabel(env.getToolsLabel(AndroidRuleClasses.DEFAULT_SDK)))) /* <!-- #BLAZE_RULE($android_base).ATTRIBUTE(plugins) --> Java compiler plugins to run at compile-time. @@ -1071,7 +1071,7 @@ public final class AndroidRuleClasses { .setUndocumented() .add( attr(":android_sdk", LABEL) - .allowedRuleClasses("android_sdk", "filegroup") + .allowedRuleClasses("android_sdk") .value(getAndroidSdkLabel(environment.getToolsLabel(DEFAULT_SDK)))); if (compatibleWithAndroidEnvironments.length > 0) { builder.compatibleWith(compatibleWithAndroidEnvironments); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java index f4667fb305..5fb856bb8f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java @@ -75,12 +75,7 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider { * not specified. */ public static AndroidSdkProvider fromRuleContext(RuleContext ruleContext) { - TransitiveInfoCollection androidSdkDep = - ruleContext.getPrerequisite(":android_sdk", Mode.TARGET); - AndroidSdkProvider androidSdk = - androidSdkDep == null ? null : androidSdkDep.getProvider(AndroidSdkProvider.class); - - return androidSdk; + return ruleContext.getPrerequisite(":android_sdk", Mode.TARGET, AndroidSdkProvider.class); } /** Throws an error if the Android SDK cannot be found. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidToolsDefaultsJar.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidToolsDefaultsJar.java index 817e0a2bc9..368c37798b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidToolsDefaultsJar.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidToolsDefaultsJar.java @@ -15,17 +15,12 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesProvider; -import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; -import java.util.regex.Pattern; /** * Implementation for the {@code android_tools_defaults_jar} rule. @@ -39,8 +34,6 @@ import java.util.regex.Pattern; * from {@link AndroidConfiguration.Options#getDefaultsRules()}. */ public class AndroidToolsDefaultsJar implements RuleConfiguredTargetFactory { - private static final Pattern ANDROID_JAR_BASENAME_RX = - Pattern.compile("android[a-zA-Z0-9_]*\\.jar$"); @Override public ConfiguredTarget create(RuleContext ruleContext) @@ -53,39 +46,11 @@ public class AndroidToolsDefaultsJar implements RuleConfiguredTargetFactory { return null; } - TransitiveInfoCollection androidSdk = ruleContext.getPrerequisite(":android_sdk", Mode.TARGET); - AndroidSdkProvider sdkProvider = androidSdk.getProvider(AndroidSdkProvider.class); - Artifact androidJar = - sdkProvider != null - ? sdkProvider.getAndroidJar() - : findAndroidJar(androidSdk.getProvider(FileProvider.class).getFilesToBuild()); - - NestedSet<Artifact> filesToBuild = - androidJar == null - ? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER) - : NestedSetBuilder.create(Order.STABLE_ORDER, androidJar); + Artifact androidJar = AndroidSdkProvider.fromRuleContext(ruleContext).getAndroidJar(); return new RuleConfiguredTargetBuilder(ruleContext) - .add(RunfilesProvider.class, RunfilesProvider.EMPTY) - .setFilesToBuild(filesToBuild) + .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY) + .setFilesToBuild(NestedSetBuilder.create(Order.STABLE_ORDER, androidJar)) .build(); } - - private static Artifact findAndroidJar(Iterable<Artifact> fullSdk) { - // We need to do this by sifting through all the files in the Android SDK because we need to - // handle the case when --android_sdk points to a plain filegroup. - // - // We can't avoid adding an android_tools_defaults_jar rule to the defaults package when this is - // the case, because the defaults package is constructed very early and it's not possible to get - // information about the rule class of the target pointed to by --android_sdk earlier, and it's - // doubly impossible to do redirect chasing then. - for (Artifact artifact : fullSdk) { - - if (ANDROID_JAR_BASENAME_RX.matcher(artifact.getExecPath().getBaseName()).matches()) { - return artifact; - } - } - - return null; - } } |