diff options
author | dbabkin <dbabkin@google.com> | 2018-05-18 05:19:37 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-05-18 05:23:05 -0700 |
commit | cf2f494b2a7b023c88fe12b8fa54f447577a30ca (patch) | |
tree | 77bf24ce177606c6e237bd422499b5234ec2fede /src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java | |
parent | fd44bae268f74e3b308d03b8e3710ee9442cd851 (diff) |
Add support of empty target to LateBoundAlias.
RELNOTES:none
PiperOrigin-RevId: 197132230
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java b/src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java index 3e309c338b..176411b7f6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java +++ b/src/main/java/com/google/devtools/build/lib/rules/LateBoundAlias.java @@ -18,13 +18,17 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.AliasProvider; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +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.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; +import com.google.devtools.build.lib.analysis.Runfiles; +import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.VisibilityProvider; import com.google.devtools.build.lib.analysis.VisibilityProviderImpl; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -36,14 +40,19 @@ import com.google.devtools.build.lib.packages.RuleClass; import java.util.function.Function; /** Implements template for creating custom alias rules. */ -public class LateBoundAlias implements RuleConfiguredTargetFactory { +public final class LateBoundAlias implements RuleConfiguredTargetFactory { private static final String ATTRIBUTE_NAME = ":alias"; @Override - public ConfiguredTarget create(RuleContext ruleContext) { + public ConfiguredTarget create(RuleContext ruleContext) + throws ActionConflictException { ConfiguredTarget actual = (ConfiguredTarget) ruleContext.getPrerequisite(ATTRIBUTE_NAME, Mode.TARGET); + if (actual == null) { + return createEmptyConfiguredTarget(ruleContext); + } + return new AliasConfiguredTarget( ruleContext, actual, @@ -54,10 +63,15 @@ public class LateBoundAlias implements RuleConfiguredTargetFactory { new VisibilityProviderImpl(ruleContext.getVisibility()))); } - /** - * Rule definition for custom alias rules" - */ - public static class CommonAliasRule implements RuleDefinition { + private ConfiguredTarget createEmptyConfiguredTarget(RuleContext ruleContext) + throws ActionConflictException { + return new RuleConfiguredTargetBuilder(ruleContext) + .addProvider(RunfilesProvider.class, RunfilesProvider.simple(Runfiles.EMPTY)) + .build(); + } + + /** Rule definition for custom alias rules */ + public abstract static class CommonAliasRule implements RuleDefinition { private static final String ATTRIBUTE_NAME = ":alias"; |