aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-02-12 12:31:21 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-12 12:33:35 -0800
commitde47f21212d9534eb0d58176b2d0075b73c4a458 (patch)
treecd91abd1f80e146afd8d3512723bd496d5cb89f6 /src
parent3ea6a557854530c36f170e7a8d868b51663939d1 (diff)
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
Diffstat (limited to 'src')
-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;
- }
- }
}