aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java86
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java25
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;
- }
- }
}