diff options
author | lberki <lberki@google.com> | 2017-06-14 10:15:40 +0200 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2017-06-14 13:17:21 +0200 |
commit | 3cc84f2f43b93ff2d909358e5cb32bff16968232 (patch) | |
tree | f03b1fcdc560d29bcdbd9a64b7553563cf4db7d6 /src | |
parent | cbc82e3257894e0bd8cf2a282c29d02641105793 (diff) |
Add a FileProvider (which all ConfiguredTargets should have) to PackageGroupConfiguredTarget.
This fixes a crash when a package_group was referenced in an attribute that requires specific file types.
RELNOTES: None.
PiperOrigin-RevId: 158950996
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java index 181162c97a..a8dd30ccee 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java @@ -14,9 +14,11 @@ package com.google.devtools.build.lib.analysis; +import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.cmdline.Label; 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 com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.PackageGroup; import com.google.devtools.build.lib.packages.PackageSpecification; @@ -28,6 +30,9 @@ import com.google.devtools.build.lib.util.Preconditions; */ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget implements PackageSpecificationProvider { + private static final FileProvider NO_FILES = new FileProvider( + NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); + private final NestedSet<PackageSpecification> packageSpecifications; PackageGroupConfiguredTarget(TargetContext targetContext, PackageGroup packageGroup) { @@ -39,8 +44,8 @@ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget for (Label label : packageGroup.getIncludes()) { TransitiveInfoCollection include = targetContext.maybeFindDirectPrerequisite( label, targetContext.getConfiguration()); - PackageSpecificationProvider provider = include == null ? null : - include.getProvider(PackageSpecificationProvider.class); + PackageSpecificationProvider provider = include == null ? null + : include.getProvider(PackageSpecificationProvider.class); if (provider == null) { targetContext.getAnalysisEnvironment().getEventHandler().handle(Event.error(getTarget().getLocation(), String.format("label '%s' does not refer to a package group", label))); @@ -63,4 +68,13 @@ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget public NestedSet<PackageSpecification> getPackageSpecifications() { return packageSpecifications; } + + @Override + public <P extends TransitiveInfoProvider> P getProvider(Class<P> provider) { + if (provider == FileProvider.class) { + return (P) NO_FILES; + } else { + return super.getProvider(provider); + } + } } |