diff options
author | 2017-05-04 17:16:09 -0400 | |
---|---|---|
committer | 2017-05-04 19:04:04 -0400 | |
commit | 4b7aae4907dc3fa24659444c28ee984c8a519d36 (patch) | |
tree | 62bf41310dacf5c420f283fbf5af4634e1f87d9c /src/main/java | |
parent | e4512805a20234c6dc5775005e9791293ecb108e (diff) |
Make TransitiveInfoProviderMap an interface.
PiperOrigin-RevId: 155125357
Diffstat (limited to 'src/main/java')
11 files changed, 251 insertions, 177 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java index 116df6153d..25f2026458 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java @@ -130,7 +130,7 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider> } public static ConfiguredAspect forNonapplicableTarget(AspectDescriptor descriptor) { - return new ConfiguredAspect(descriptor, TransitiveInfoProviderMap.of()); + return new ConfiguredAspect(descriptor, new TransitiveInfoProviderMapBuilder().add().build()); } public static Builder builder( @@ -142,7 +142,8 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider> * Builder for {@link ConfiguredAspect}. */ public static class Builder { - private final TransitiveInfoProviderMap.Builder providers = TransitiveInfoProviderMap.builder(); + private final TransitiveInfoProviderMapBuilder providers = + new TransitiveInfoProviderMapBuilder(); private final Map<String, NestedSetBuilder<Artifact>> outputGroupBuilders = new TreeMap<>(); private final ImmutableMap.Builder<String, Object> skylarkProviderBuilder = ImmutableMap.builder(); @@ -174,7 +175,7 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider> /** Adds a provider to the aspect. */ public Builder addProvider(TransitiveInfoProvider provider) { Preconditions.checkNotNull(provider); - addProvider(TransitiveInfoProviderMap.getEffectiveProviderClass(provider), provider); + addProvider(TransitiveInfoProviderEffectiveClassHelper.get(provider), provider); return this; } 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 7f3f9f6887..399ef6afe6 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 @@ -40,8 +40,8 @@ public abstract class FileConfiguredTarget extends AbstractConfiguredTarget FileProvider fileProvider = new FileProvider(filesToBuild); FilesToRunProvider filesToRunProvider = FilesToRunProvider.fromSingleExecutableArtifact(artifact); - TransitiveInfoProviderMap.Builder builder = - TransitiveInfoProviderMap.builder() + TransitiveInfoProviderMapBuilder builder = + new TransitiveInfoProviderMapBuilder() .put(VisibilityProvider.class, this) .put(LicensesProvider.class, this) .add(fileProvider) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java index aff014fe55..f2a8781c07 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java @@ -78,7 +78,7 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget { ExtraActionArtifactsProvider mergedExtraActionProviders = ExtraActionArtifactsProvider.merge( getAllProviders(base, aspects, ExtraActionArtifactsProvider.class)); - TransitiveInfoProviderMap.Builder aspectProviders = TransitiveInfoProviderMap.builder(); + TransitiveInfoProviderMapBuilder aspectProviders = new TransitiveInfoProviderMapBuilder(); if (mergedOutputGroupProvider != null) { aspectProviders.add(mergedOutputGroupProvider); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java index 7c285aaf15..4c0785e180 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java @@ -52,7 +52,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { super(ruleContext); // We don't use ImmutableMap.Builder here to allow augmenting the initial list of 'default' // providers by passing them in. - TransitiveInfoProviderMap.Builder providerBuilder = providers.toBuilder(); + TransitiveInfoProviderMapBuilder providerBuilder = providers.toBuilder(); Preconditions.checkState(providerBuilder.contains(RunfilesProvider.class)); Preconditions.checkState(providerBuilder.contains(FileProvider.class)); Preconditions.checkState(providerBuilder.contains(FilesToRunProvider.class)); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java index 512f57654b..a0bf3ad4a1 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java @@ -58,8 +58,8 @@ import java.util.TreeMap; */ public final class RuleConfiguredTargetBuilder { private final RuleContext ruleContext; - private final TransitiveInfoProviderMap.Builder providersBuilder = - TransitiveInfoProviderMap.builder(); + private final TransitiveInfoProviderMapBuilder providersBuilder = + new TransitiveInfoProviderMapBuilder(); private final ImmutableMap.Builder<String, Object> skylarkProviders = ImmutableMap.builder(); private final ImmutableMap.Builder<ClassObjectConstructor.Key, SkylarkClassObject> skylarkDeclaredProviders = ImmutableMap.builder(); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderEffectiveClassHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderEffectiveClassHelper.java new file mode 100644 index 0000000000..c92072f7e7 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderEffectiveClassHelper.java @@ -0,0 +1,93 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.analysis; + +import com.google.common.base.Joiner; +import com.google.common.base.Verify; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.devtools.build.lib.util.Preconditions; +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * Provides the effective class for the provider. The effective class is inferred as the sole class + * in the provider's inheritence hierarchy that implements {@link TransitiveInfoProvider} directly. + * This allows for simple subclasses such as those created by AutoValue, but will fail if there's + * any ambiguity as to which implementor of the {@link TransitiveInfoProvider} is intended. If the + * provider implements multiple TransitiveInfoProvider interfaces, prefer the explicit put builder + * methods. + */ +class TransitiveInfoProviderEffectiveClassHelper { + + private TransitiveInfoProviderEffectiveClassHelper() {} + + private static final LoadingCache< + Class<? extends TransitiveInfoProvider>, Class<? extends TransitiveInfoProvider>> + EFFECTIVE_PROVIDER_CLASS_CACHE = + CacheBuilder.newBuilder() + .build( + new CacheLoader< + Class<? extends TransitiveInfoProvider>, + Class<? extends TransitiveInfoProvider>>() { + + private Set<Class<? extends TransitiveInfoProvider>> getDirectImplementations( + Class<? extends TransitiveInfoProvider> providerClass) { + Set<Class<? extends TransitiveInfoProvider>> result = new LinkedHashSet<>(); + for (Class<?> clazz : providerClass.getInterfaces()) { + if (TransitiveInfoProvider.class.equals(clazz)) { + result.add(providerClass); + } else if (TransitiveInfoProvider.class.isAssignableFrom(clazz)) { + result.addAll( + getDirectImplementations( + (Class<? extends TransitiveInfoProvider>) clazz)); + } + } + + Class<?> superclass = providerClass.getSuperclass(); + if (superclass != null + && TransitiveInfoProvider.class.isAssignableFrom(superclass)) { + result.addAll( + getDirectImplementations( + (Class<? extends TransitiveInfoProvider>) superclass)); + } + return result; + } + + @Override + public Class<? extends TransitiveInfoProvider> load( + Class<? extends TransitiveInfoProvider> providerClass) { + Set<Class<? extends TransitiveInfoProvider>> result = + getDirectImplementations(providerClass); + Verify.verify(!result.isEmpty()); // impossible + Preconditions.checkState( + result.size() == 1, + "Effective provider class for %s is ambiguous (%s), specify explicitly.", + providerClass, + Joiner.on(',').join(result)); + return result.iterator().next(); + } + }); + + // TODO(arielb): see if these can be made private? + static <T extends TransitiveInfoProvider> Class<T> get(T provider) { + return get((Class<T>) provider.getClass()); + } + + static <T extends TransitiveInfoProvider> Class<T> get(Class<T> providerClass) { + return (Class<T>) EFFECTIVE_PROVIDER_CLASS_CACHE.getUnchecked(providerClass); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java index f0460909fb..6319cf7123 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java @@ -14,179 +14,24 @@ package com.google.devtools.build.lib.analysis; -import com.google.common.base.Joiner; -import com.google.common.base.Verify; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableCollection; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.util.Preconditions; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; import java.util.Map; -import java.util.Set; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** Provides a mapping between a TransitiveInfoProvider class and an instance. */ @Immutable -public final class TransitiveInfoProviderMap { - - private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> map; - - private TransitiveInfoProviderMap( - ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> map) { - this.map = map; - } - - /** Initializes a {@link TransitiveInfoProviderMap} from the instances provided. */ - public static TransitiveInfoProviderMap of(TransitiveInfoProvider... providers) { - return builder().add(providers).build(); - } +public interface TransitiveInfoProviderMap { /** Returns the instance for the provided providerClass, or <tt>null</tt> if not present. */ @Nullable - public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) { - return (P) map.get(getEffectiveProviderClass(providerClass)); - } - - public ImmutableSet<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> - entrySet() { - return map.entrySet(); - } - - public ImmutableCollection<TransitiveInfoProvider> values() { - return map.values(); - } - - public Builder toBuilder() { - return builder().addAll(map.values()); - } - - public static Builder builder() { - return new Builder(); - } - - /** A builder for {@link TransitiveInfoProviderMap}. */ - public static class Builder { - - // TODO(arielb): share the instance with the outerclass and copy on write instead? - private final LinkedHashMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> - providers = new LinkedHashMap(); - - /** - * Returns <tt>true</tt> if a {@link TransitiveInfoProvider} has been added for the class - * provided. - */ - public boolean contains(Class<? extends TransitiveInfoProvider> providerClass) { - return providers.containsKey(providerClass); - } - - public <T extends TransitiveInfoProvider> Builder put( - Class<? extends T> providerClass, T provider) { - Preconditions.checkNotNull(providerClass); - Preconditions.checkNotNull(provider); - // TODO(arielb): throw an exception if the providerClass is already present? - // This is enforced by aspects but RuleConfiguredTarget presents violations - // particularly around LicensesProvider - providers.put(providerClass, provider); - return this; - } - - public Builder add(TransitiveInfoProvider provider) { - return put(getEffectiveProviderClass(provider), provider); - } - - public Builder add(TransitiveInfoProvider... providers) { - return addAll(Arrays.asList(providers)); - } - - public Builder addAll(TransitiveInfoProviderMap providers) { - return addAll(providers.values()); - } - - public Builder addAll(Iterable<TransitiveInfoProvider> providers) { - for (TransitiveInfoProvider provider : providers) { - add(provider); - } - return this; - } - - @Nullable - public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) { - return (P) providers.get(providerClass); - } - - public TransitiveInfoProviderMap build() { - return new TransitiveInfoProviderMap(ImmutableMap.copyOf(providers)); - } - } - - private static final LoadingCache< - Class<? extends TransitiveInfoProvider>, Class<? extends TransitiveInfoProvider>> - EFFECTIVE_PROVIDER_CLASS_CACHE = - CacheBuilder.newBuilder() - .build( - new CacheLoader< - Class<? extends TransitiveInfoProvider>, - Class<? extends TransitiveInfoProvider>>() { - - private Set<Class<? extends TransitiveInfoProvider>> getDirectImplementations( - Class<? extends TransitiveInfoProvider> providerClass) { - Set<Class<? extends TransitiveInfoProvider>> result = new LinkedHashSet<>(); - for (Class<?> clazz : providerClass.getInterfaces()) { - if (TransitiveInfoProvider.class.equals(clazz)) { - result.add(providerClass); - } else if (TransitiveInfoProvider.class.isAssignableFrom(clazz)) { - result.addAll( - getDirectImplementations( - (Class<? extends TransitiveInfoProvider>) clazz)); - } - } - - Class<?> superclass = providerClass.getSuperclass(); - if (superclass != null - && TransitiveInfoProvider.class.isAssignableFrom(superclass)) { - result.addAll( - getDirectImplementations( - (Class<? extends TransitiveInfoProvider>) superclass)); - } - return result; - } + <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass); - @Override - public Class<? extends TransitiveInfoProvider> load( - Class<? extends TransitiveInfoProvider> providerClass) { - Set<Class<? extends TransitiveInfoProvider>> result = - getDirectImplementations(providerClass); - Verify.verify(!result.isEmpty()); // impossible - Preconditions.checkState( - result.size() == 1, - "Effective provider class for %s is ambiguous (%s), specify explicitly.", - providerClass, - Joiner.on(',').join(result)); - return result.iterator().next(); - } - }); + ImmutableSet<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> + entrySet(); - /** - * Provides the effective class for the provider. The effective class is inferred as the sole - * class in the provider's inheritence hierarchy that implements {@link TransitiveInfoProvider} - * directly. This allows for simple subclasses such as those created by AutoValue, but will fail - * if there's any ambiguity as to which implementor of the {@link TransitiveInfoProvider} is - * intended. If the provider implements multiple TransitiveInfoProvider interfaces, prefer the - * explicit put builder methods. - */ - // TODO(arielb): see if these can be made private? - static <T extends TransitiveInfoProvider> Class<T> getEffectiveProviderClass(T provider) { - return getEffectiveProviderClass((Class<T>) provider.getClass()); - } + ImmutableCollection<TransitiveInfoProvider> values(); - private static <T extends TransitiveInfoProvider> Class<T> getEffectiveProviderClass( - Class<T> providerClass) { - return (Class<T>) EFFECTIVE_PROVIDER_CLASS_CACHE.getUnchecked(providerClass); - } + TransitiveInfoProviderMapBuilder toBuilder(); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java new file mode 100644 index 0000000000..ac68e3b4a1 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java @@ -0,0 +1,76 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.analysis; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.util.Preconditions; +import java.util.Arrays; +import java.util.LinkedHashMap; +import javax.annotation.Nullable; + +/** A builder for {@link TransitiveInfoProviderMap}. */ +public class TransitiveInfoProviderMapBuilder { + + // TODO(arielb): share the instance with the outerclass and copy on write instead? + private final LinkedHashMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> + providers = new LinkedHashMap(); + + /** + * Returns <tt>true</tt> if a {@link TransitiveInfoProvider} has been added for the class + * provided. + */ + public boolean contains(Class<? extends TransitiveInfoProvider> providerClass) { + return providers.containsKey(providerClass); + } + + public <T extends TransitiveInfoProvider> TransitiveInfoProviderMapBuilder put( + Class<? extends T> providerClass, T provider) { + Preconditions.checkNotNull(providerClass); + Preconditions.checkNotNull(provider); + // TODO(arielb): throw an exception if the providerClass is already present? + // This is enforced by aspects but RuleConfiguredTarget presents violations + // particularly around LicensesProvider + providers.put(providerClass, provider); + return this; + } + + public TransitiveInfoProviderMapBuilder add(TransitiveInfoProvider provider) { + return put(TransitiveInfoProviderEffectiveClassHelper.get(provider), provider); + } + + public TransitiveInfoProviderMapBuilder add(TransitiveInfoProvider... providers) { + return addAll(Arrays.asList(providers)); + } + + public TransitiveInfoProviderMapBuilder addAll(TransitiveInfoProviderMap providers) { + return addAll(providers.values()); + } + + public TransitiveInfoProviderMapBuilder addAll(Iterable<TransitiveInfoProvider> providers) { + for (TransitiveInfoProvider provider : providers) { + add(provider); + } + return this; + } + + @Nullable + public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) { + return (P) providers.get(providerClass); + } + + public TransitiveInfoProviderMap build() { + return new TransitiveInfoProviderMapImmutableMapBased(ImmutableMap.copyOf(providers)); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java new file mode 100644 index 0000000000..dcf27077e5 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java @@ -0,0 +1,57 @@ +// Copyright 2014 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.analysis; + +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import java.util.Map; +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + +/** Provides a mapping between a TransitiveInfoProvider class and an instance. */ +@Immutable +final class TransitiveInfoProviderMapImmutableMapBased implements TransitiveInfoProviderMap { + + private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> map; + + TransitiveInfoProviderMapImmutableMapBased( + ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> map) { + this.map = map; + } + + /** Returns the instance for the provided providerClass, or <tt>null</tt> if not present. */ + @Override + @Nullable + public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) { + return (P) map.get(TransitiveInfoProviderEffectiveClassHelper.get(providerClass)); + } + + @Override + public ImmutableSet<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> + entrySet() { + return map.entrySet(); + } + + @Override + public ImmutableCollection<TransitiveInfoProvider> values() { + return map.values(); + } + + @Override + public TransitiveInfoProviderMapBuilder toBuilder() { + return new TransitiveInfoProviderMapBuilder().addAll(map.values()); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index 3aaab4df24..ca2595d4ef 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; +import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder; import com.google.devtools.build.lib.analysis.actions.SymlinkAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; @@ -182,7 +183,7 @@ public final class CcLibraryHelper { * context. */ public static final class Info { - private final TransitiveInfoProviderMap.Builder providers; + private final TransitiveInfoProviderMapBuilder providers; private final ImmutableMap<String, NestedSet<Artifact>> outputGroups; private final CcCompilationOutputs compilationOutputs; private final CcLinkingOutputs linkingOutputs; @@ -1038,8 +1039,8 @@ public final class CcLibraryHelper { // By very careful when adding new providers here - it can potentially affect a lot of rules. // We should consider merging most of these providers into a single provider. - TransitiveInfoProviderMap.Builder providers = - TransitiveInfoProviderMap.builder() + TransitiveInfoProviderMapBuilder providers = + new TransitiveInfoProviderMapBuilder() .add( new CppRunfilesProvider(cppStaticRunfiles, cppSharedRunfiles), cppCompilationContext, diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java index ff419be5e4..239d99111e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.SkylarkProviders; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; +import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; @@ -170,14 +171,14 @@ public final class JavaProvider extends SkylarkClassObject implements Transitive * A Builder for {@link JavaProvider}. */ public static class Builder { - TransitiveInfoProviderMap.Builder providerMap; - - private Builder(TransitiveInfoProviderMap.Builder providerMap) { + TransitiveInfoProviderMapBuilder providerMap; + + private Builder(TransitiveInfoProviderMapBuilder providerMap) { this.providerMap = providerMap; } public static Builder create() { - return new Builder(new TransitiveInfoProviderMap.Builder()); + return new Builder(new TransitiveInfoProviderMapBuilder()); } public static Builder copyOf(JavaProvider javaProvider) { |