aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-09-16 15:21:39 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2016-09-19 07:34:37 +0000
commit94d35deeb44bdac33d58430d0441b34d5c5c630e (patch)
treee8b217fb0f6c6b033834bf26e816aef3afac8531 /src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java
parentc484f19a2cf7427887d6e4c71c8534806e1ba83e (diff)
Add a specialized TransitiveInfoProviderMap to map TransitiveInfoProviders by class.
TransitiveInfoProviderMap enforces that the provider implements the interface it's keyed by and provides accessors the reduce the amount of casting. This in general reduces boilerplate throughout wherever TransitiveInfoProviders are mapped by their class. Also add shorthand for adding a provider where it only implements TransitiveInfoProvider once, reducing the redundant specification of the TransitiveInfoProvider class. Infer the class as the exclusive direct implementor of TransitiveInfoProvider to account for special cases like AutoValue and LicenseProvider. -- MOS_MIGRATED_REVID=133386336
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java
index 42178bf531..f55298f717 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.analysis;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -33,19 +31,18 @@ public abstract class FileConfiguredTarget extends AbstractConfiguredTarget
implements FileType.HasFilename, LicensesProvider {
private final Artifact artifact;
- private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>
- providers;
+ private final TransitiveInfoProviderMap providers;
FileConfiguredTarget(TargetContext targetContext, Artifact artifact) {
super(targetContext);
NestedSet<Artifact> filesToBuild = NestedSetBuilder.create(Order.STABLE_ORDER, artifact);
this.artifact = artifact;
- Builder<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> builder = ImmutableMap
- .<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>builder()
- .put(VisibilityProvider.class, this)
- .put(LicensesProvider.class, this)
- .put(FileProvider.class, new FileProvider(filesToBuild))
- .put(FilesToRunProvider.class, FilesToRunProvider.fromSingleExecutableArtifact(artifact));
+ TransitiveInfoProviderMap.Builder builder =
+ TransitiveInfoProviderMap.builder()
+ .put(VisibilityProvider.class, this)
+ .put(LicensesProvider.class, this)
+ .add(new FileProvider(filesToBuild))
+ .add(FilesToRunProvider.fromSingleExecutableArtifact(artifact));
if (this instanceof FilesetProvider) {
builder.put(FilesetProvider.class, this);
}
@@ -75,7 +72,7 @@ public abstract class FileConfiguredTarget extends AbstractConfiguredTarget
@Override
public <P extends TransitiveInfoProvider> P getProvider(Class<P> provider) {
AnalysisUtils.checkProvider(provider);
- return provider.cast(providers.get(provider));
+ return providers.getProvider(provider);
}
@Override