diff options
8 files changed, 108 insertions, 81 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index 994ef13fb7..8d7979ba7c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Multimaps; import com.google.common.collect.Sets; import com.google.devtools.build.lib.actions.Action; @@ -380,6 +381,10 @@ public final class RuleContext extends TargetContext return Lists.transform(targetMap.get(key), ConfiguredTargetAndTarget::getConfiguredTarget); } + private List<ConfiguredTargetAndTarget> getConfiguredTargetAndTargetDeps(String key) { + return targetMap.get(key); + } + /** * Returns an immutable map from attribute name to list of fileset entries. */ @@ -753,6 +758,29 @@ public final class RuleContext extends TargetContext */ public List<? extends TransitiveInfoCollection> getPrerequisites(String attributeName, Mode mode) { + return Lists.transform( + getPrerequisiteConfiguredTargetAndTargets(attributeName, mode), + ConfiguredTargetAndTarget::getConfiguredTarget); + } + + /** + * Returns the a prerequisites keyed by the CPU of their configurations. If the split transition + * is not active (e.g. split() returned an empty list), the key is an empty Optional. + */ + public Map<Optional<String>, ? extends List<? extends TransitiveInfoCollection>> + getSplitPrerequisites(String attributeName) { + return Maps.transformValues( + getSplitPrerequisiteConfiguredTargetAndTargets(attributeName), + (ctatList) -> Lists.transform(ctatList, ConfiguredTargetAndTarget::getConfiguredTarget)); + } + + /** + * Returns the list of ConfiguredTargetsAndTargets that feed into the target through the specified + * attribute. Note that you need to specify the correct mode for the attribute otherwise an + * exception will be raised. + */ + public List<ConfiguredTargetAndTarget> getPrerequisiteConfiguredTargetAndTargets( + String attributeName, Mode mode) { Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName); if ((mode == Mode.TARGET) && (attributeDefinition.hasSplitConfigurationTransition())) { // TODO(bazel-team): If you request a split-configured attribute in the target configuration, @@ -761,30 +789,25 @@ public final class RuleContext extends TargetContext // deeply nested and we can't easily inject the behavior we want. However, we should fix all // such call sites. checkAttribute(attributeName, Mode.SPLIT); - Map<Optional<String>, ? extends List<? extends TransitiveInfoCollection>> map = - getSplitPrerequisites(attributeName); + Map<Optional<String>, List<ConfiguredTargetAndTarget>> map = + getSplitPrerequisiteConfiguredTargetAndTargets(attributeName); return map.isEmpty() ? ImmutableList.of() : map.entrySet().iterator().next().getValue(); } checkAttribute(attributeName, mode); - return getDeps(attributeName); + return getConfiguredTargetAndTargetDeps(attributeName); } - /** - * Returns the a prerequisites keyed by the CPU of their configurations. - * If the split transition is not active (e.g. split() returned an empty - * list), the key is an empty Optional. - */ - public Map<Optional<String>, ? extends List<? extends TransitiveInfoCollection>> - getSplitPrerequisites(String attributeName) { + private Map<Optional<String>, List<ConfiguredTargetAndTarget>> + getSplitPrerequisiteConfiguredTargetAndTargets(String attributeName) { checkAttribute(attributeName, Mode.SPLIT); - Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName); - SplitTransition transition = attributeDefinition.getSplitTransition( - ConfiguredAttributeMapper.of(rule, configConditions)); - List<? extends TransitiveInfoCollection> deps = getDeps(attributeName); - + SplitTransition transition = + attributeDefinition.getSplitTransition( + ConfiguredAttributeMapper.of(rule, configConditions)); List<BuildOptions> splitOptions = transition.split(getConfiguration().getOptions()); + List<ConfiguredTargetAndTarget> deps = getConfiguredTargetAndTargetDeps(attributeName); + if (splitOptions.isEmpty()) { // The split transition is not active. Defer the decision on which CPU to use. return ImmutableMap.of(Optional.<String>absent(), deps); @@ -798,11 +821,11 @@ public final class RuleContext extends TargetContext } // Use an ImmutableListMultimap.Builder here to preserve ordering. - ImmutableListMultimap.Builder<Optional<String>, TransitiveInfoCollection> result = + ImmutableListMultimap.Builder<Optional<String>, ConfiguredTargetAndTarget> result = ImmutableListMultimap.builder(); - for (TransitiveInfoCollection t : deps) { - if (t.getConfiguration() != null) { - result.put(Optional.of(t.getConfiguration().getCpu()), t); + for (ConfiguredTargetAndTarget t : deps) { + if (t.getConfiguredTarget().getConfiguration() != null) { + result.put(Optional.of(t.getConfiguredTarget().getConfiguration().getCpu()), t); } else { // Source files don't have a configuration, so we add them to all architecture entries. for (String cpu : cpus) { @@ -841,23 +864,17 @@ public final class RuleContext extends TargetContext } /** - * For a given attribute, returns all {@link TransitiveInfoProvider}s provided by targets - * of that attribute. Each {@link TransitiveInfoProvider} is keyed by the - * {@link BuildConfiguration} under which the provider was created. + * For a given attribute, returns all the ConfiguredTargetAndTargets of that attribute. Each + * ConfiguredTargetAndTarget is keyed by the {@link BuildConfiguration} that created it. */ - public <C extends TransitiveInfoProvider> ImmutableListMultimap<BuildConfiguration, C> - getPrerequisitesByConfiguration(String attributeName, Mode mode, final Class<C> classType) { - AnalysisUtils.checkProvider(classType); - List<? extends TransitiveInfoCollection> transitiveInfoCollections = - getPrerequisites(attributeName, mode); - - ImmutableListMultimap.Builder<BuildConfiguration, C> result = + public ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget> + getPrerequisiteCofiguredTargetAndTargetsByConfiguration(String attributeName, Mode mode) { + List<ConfiguredTargetAndTarget> ctatCollection = + getPrerequisiteConfiguredTargetAndTargets(attributeName, mode); + ImmutableListMultimap.Builder<BuildConfiguration, ConfiguredTargetAndTarget> result = ImmutableListMultimap.builder(); - for (TransitiveInfoCollection prerequisite : transitiveInfoCollections) { - C prerequisiteProvider = prerequisite.getProvider(classType); - if (prerequisiteProvider != null) { - result.put(prerequisite.getConfiguration(), prerequisiteProvider); - } + for (ConfiguredTargetAndTarget ctat : ctatCollection) { + result.put(ctat.getConfiguredTarget().getConfiguration(), ctat); } return result.build(); } @@ -952,7 +969,6 @@ public final class RuleContext extends TargetContext return AnalysisUtils.filterByProvider(getPrerequisites(attributeName, mode), classType); } - /** * Returns the prerequisite referred to by the specified attribute. Also checks whether * the attribute is marked as executable and that the target referred to can actually be diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java index 284fc7d2fa..cb61b80adf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java @@ -47,6 +47,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.objc.AppleDebugOutputsInfo.OutputType; import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs; import com.google.devtools.build.lib.rules.objc.MultiArchBinarySupport.DependencySpecificConfiguration; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import java.util.Map; import java.util.TreeMap; @@ -142,6 +143,9 @@ public class AppleBinary implements RuleConfiguredTargetFactory { "non_propagated_deps", Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR); ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap = ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT); + ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget> + configToCTATDepsCollectionMap = + ruleContext.getPrerequisiteCofiguredTargetAndTargetsByConfiguration("deps", Mode.SPLIT); ImmutableMap<BuildConfiguration, CcToolchainProvider> childConfigurations = MultiArchBinarySupport.getChildConfigurationsAndToolchains(ruleContext); @@ -154,6 +158,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory { multiArchBinarySupport.getDependencySpecificConfigurations( childConfigurations, configToDepsCollectionMap, + configToCTATDepsCollectionMap, configurationToNonPropagatedObjcMap, getDylibProviderTargets(ruleContext)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index c312e012e7..49cc884ad8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java @@ -26,7 +26,6 @@ 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.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -38,6 +37,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -75,8 +75,9 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { MultiArchSplitTransitionProvider.validateMinimumOs(ruleContext); PlatformType platformType = MultiArchSplitTransitionProvider.getPlatformType(ruleContext); - ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap = - ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT); + ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget> + configToCTATDepsCollectionMap = + ruleContext.getPrerequisiteCofiguredTargetAndTargetsByConfiguration("deps", Mode.SPLIT); ImmutableListMultimap<BuildConfiguration, ObjcProvider> configToObjcAvoidDepsMap = ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR); @@ -134,7 +135,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { ruleContext, childConfig, intermediateArtifacts, - nullToEmptyList(configToDepsCollectionMap.get(childConfig)), + nullToEmptyList(configToCTATDepsCollectionMap.get(childConfig)), protosObjcProvider); ObjcProvider objcProvider = common.getObjcProvider().subtractSubtrees(configToObjcAvoidDepsMap.get(childConfig), @@ -206,7 +207,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { RuleContext ruleContext, BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, - List<TransitiveInfoCollection> propagatedDeps, + List<ConfiguredTargetAndTarget> propagatedConfigredTargetAndTargetDeps, Optional<ObjcProvider> protosObjcProvider) { CompilationArtifacts compilationArtifacts = new CompilationArtifacts.Builder().build(); @@ -215,7 +216,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) .setCompilationArtifacts(compilationArtifacts) - .addDeps(propagatedDeps) + .addDeps(propagatedConfigredTargetAndTargetDeps) .addDepObjcProviders(protosObjcProvider.asSet()) .setIntermediateArtifacts(intermediateArtifacts) .setAlwayslink(false) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java index 61bbb37431..69e42c312d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java @@ -50,8 +50,8 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory { return new ObjcCommon.Builder(ruleContext) .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) - .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)) - .addDeps(ruleContext.getPrerequisites("jre_deps", Mode.TARGET)) + .addDeps(ruleContext.getPrerequisiteConfiguredTargetAndTargets("deps", Mode.TARGET)) + .addDeps(ruleContext.getPrerequisiteConfiguredTargetAndTargets("jre_deps", Mode.TARGET)) .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext)) .setHasModuleMap() .build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java index ef3430cb95..372412f4b2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs; import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import java.util.List; import java.util.Map; import java.util.Set; @@ -210,6 +211,8 @@ public class MultiArchBinarySupport { public ImmutableSet<DependencySpecificConfiguration> getDependencySpecificConfigurations( Map<BuildConfiguration, CcToolchainProvider> childConfigurationsAndToolchains, ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap, + ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget> + configToCTATDepsCollectionMap, ImmutableListMultimap<BuildConfiguration, ObjcProvider> configurationToNonPropagatedObjcMap, Iterable<TransitiveInfoCollection> dylibProviders) throws RuleErrorException, InterruptedException { @@ -255,7 +258,7 @@ public class MultiArchBinarySupport { ruleContext, childConfig, intermediateArtifacts, - nullToEmptyList(configToDepsCollectionMap.get(childConfig)), + nullToEmptyList(configToCTATDepsCollectionMap.get(childConfig)), nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)), additionalDepProviders); ObjcProvider objcProviderWithDylibSymbols = common.getObjcProvider(); @@ -296,19 +299,20 @@ public class MultiArchBinarySupport { RuleContext ruleContext, BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, - List<TransitiveInfoCollection> propagatedDeps, + List<ConfiguredTargetAndTarget> propagatedConfiguredTargetAndTargetDeps, List<ObjcProvider> nonPropagatedObjcDeps, Iterable<ObjcProvider> additionalDepProviders) { - ObjcCommon.Builder commonBuilder = new ObjcCommon.Builder(ruleContext, buildConfiguration) - .setCompilationAttributes( - CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) - .addDeps(propagatedDeps) - .addDepObjcProviders(additionalDepProviders) - .addNonPropagatedDepObjcProviders(nonPropagatedObjcDeps) - .setIntermediateArtifacts(intermediateArtifacts) - .setAlwayslink(false) - .setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary()); + ObjcCommon.Builder commonBuilder = + new ObjcCommon.Builder(ruleContext, buildConfiguration) + .setCompilationAttributes( + CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) + .addDeps(propagatedConfiguredTargetAndTargetDeps) + .addDepObjcProviders(additionalDepProviders) + .addNonPropagatedDepObjcProviders(nonPropagatedObjcDeps) + .setIntermediateArtifacts(intermediateArtifacts) + .setAlwayslink(false) + .setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary()); if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()) { commonBuilder.addDebugArtifacts(DsymOutputType.APP); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index 5c9292969e..b3318cb4fd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -73,6 +73,7 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.cpp.CppModuleMap; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; import com.google.devtools.build.lib.vfs.PathFragment; @@ -249,7 +250,7 @@ public final class ObjcCommon { return this; } - Builder addDeps(List<? extends TransitiveInfoCollection> deps) { + Builder addDeps(List<ConfiguredTargetAndTarget> deps) { ImmutableList.Builder<ObjcProvider> propagatedObjcDeps = ImmutableList.<ObjcProvider>builder(); ImmutableList.Builder<CppCompilationContext> cppDeps = @@ -257,12 +258,13 @@ public final class ObjcCommon { ImmutableList.Builder<CcLinkParamsInfo> cppDepLinkParams = ImmutableList.<CcLinkParamsInfo>builder(); - for (TransitiveInfoCollection dep : deps) { - addAnyProviders(propagatedObjcDeps, dep, ObjcProvider.SKYLARK_CONSTRUCTOR); - addAnyProviders(cppDeps, dep, CppCompilationContext.class); + for (ConfiguredTargetAndTarget dep : deps) { + ConfiguredTarget depCT = dep.getConfiguredTarget(); + addAnyProviders(propagatedObjcDeps, depCT, ObjcProvider.SKYLARK_CONSTRUCTOR); + addAnyProviders(cppDeps, depCT, CppCompilationContext.class); if (isCcLibrary(dep)) { - cppDepLinkParams.add(dep.get(CcLinkParamsInfo.PROVIDER)); - addDefines(dep.getProvider(CppCompilationContext.class).getDefines()); + cppDepLinkParams.add(depCT.get(CcLinkParamsInfo.PROVIDER)); + addDefines(depCT.getProvider(CppCompilationContext.class).getDefines()); } } addDepObjcProviders(propagatedObjcDeps.build()); @@ -572,10 +574,10 @@ public final class ObjcCommon { return new ObjcCommon(objcProvider.build(), compilationArtifacts); } - private static boolean isCcLibrary(TransitiveInfoCollection info) { + private static boolean isCcLibrary(ConfiguredTargetAndTarget info) { try { - ConfiguredTarget target = (ConfiguredTarget) info; - String targetName = target.getTarget().getTargetKind(); + String targetName = info.getTarget().getTargetKind(); + for (String ruleClassName : ObjcRuleClasses.CompilingRule.ALLOWED_CC_DEPS_RULE_CLASSES) { if (targetName.equals(ruleClassName + " rule")) { return true; @@ -719,10 +721,6 @@ public final class ObjcCommon { return notInContainerErrors(artifacts, ImmutableList.of(containerType)); } - @VisibleForTesting - static final String NOT_IN_CONTAINER_ERROR_FORMAT = - "File '%s' is not in a directory of one of these type(s): %s"; - static Iterable<String> notInContainerErrors( Iterable<Artifact> artifacts, Iterable<FileType> containerTypes) { Set<String> errors = new HashSet<>(); @@ -738,4 +736,8 @@ public final class ObjcCommon { } return errors; } + + @VisibleForTesting + static final String NOT_IN_CONTAINER_ERROR_FORMAT = + "File '%s' is not in a directory of one of these type(s): %s"; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 7785f22ee1..1da3faadd0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -44,7 +44,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { .setResourceAttributes(new ResourceAttributes(ruleContext)) .addDefines(ruleContext.getExpander().withDataLocations().tokenized("defines")) .setCompilationArtifacts(CompilationSupport.compilationArtifacts(ruleContext)) - .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)) + .addDeps(ruleContext.getPrerequisiteConfiguredTargetAndTargets("deps", Mode.TARGET)) .addRuntimeDeps(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)) .addDepObjcProviders( ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java index d525817d69..6add80c7df 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java @@ -24,14 +24,13 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.configuredtargets.AbstractConfiguredTarget; 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.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist; import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import java.util.ArrayList; /** Common rule attributes used by an objc_proto_library. */ @@ -92,6 +91,15 @@ final class ProtoAttributes { return ruleContext.attributes().has(ObjcProtoLibraryRule.PORTABLE_PROTO_FILTERS_ATTR); } + private boolean isObjcProtoLibrary(ConfiguredTargetAndTarget dependency) { + try { + String targetName = dependency.getTarget().getTargetKind(); + return targetName.equals("objc_proto_library rule"); + } catch (Exception e) { + return false; + } + } + /** Returns whether to use the protobuf library instead of the PB2 library. */ boolean hasPortableProtoFilters() { return ruleContext @@ -239,21 +247,12 @@ final class ProtoAttributes { } private boolean hasObjcProtoLibraryDependencies() { - for (TransitiveInfoCollection dep : ruleContext.getPrerequisites("deps", Mode.TARGET)) { + for (ConfiguredTargetAndTarget dep : + ruleContext.getPrerequisiteConfiguredTargetAndTargets("deps", Mode.TARGET)) { if (isObjcProtoLibrary(dep)) { return true; } } return false; } - - private boolean isObjcProtoLibrary(TransitiveInfoCollection dependency) { - try { - AbstractConfiguredTarget target = (AbstractConfiguredTarget) dependency; - String targetName = target.getTarget().getTargetKind(); - return targetName.equals("objc_proto_library rule"); - } catch (Exception e) { - return false; - } - } } |