Thread ConfiguredTargetAndTarget through objC classes to get rid of references
to ConfiguredTarget.GetTarget(). Also remove equivalence requirements for
the ConfiguredTarget's target and the stored Target since there will soon no
longer be a Target in ConfiguredTarget.
PiperOrigin-RevId: 185417468
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 994ef13..8d7979b 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.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 @@
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 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 @@
// 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 @@
}
// 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 @@
}
/**
- * 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 @@
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 284fc7d..cb61b80 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.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 @@
"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 @@
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 c312e01..49cc884 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.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.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 @@
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 @@
ruleContext,
childConfig,
intermediateArtifacts,
- nullToEmptyList(configToDepsCollectionMap.get(childConfig)),
+ nullToEmptyList(configToCTATDepsCollectionMap.get(childConfig)),
protosObjcProvider);
ObjcProvider objcProvider =
common.getObjcProvider().subtractSubtrees(configToObjcAvoidDepsMap.get(childConfig),
@@ -206,7 +207,7 @@
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 @@
.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 61bbb37..69e42c3 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 @@
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 ef3430c..372412f 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.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 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 @@
ruleContext,
childConfig,
intermediateArtifacts,
- nullToEmptyList(configToDepsCollectionMap.get(childConfig)),
+ nullToEmptyList(configToCTATDepsCollectionMap.get(childConfig)),
nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)),
additionalDepProviders);
ObjcProvider objcProviderWithDylibSymbols = common.getObjcProvider();
@@ -296,19 +299,20 @@
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 5c92929..b3318cb 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.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 @@
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 @@
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 @@
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 @@
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 @@
}
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 7785f22..1da3faa 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 @@
.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 d525817..6add80c 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.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 @@
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 @@
}
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;
- }
- }
}