Reduce analysis-time iteration over nested sets
- Avoid Iterable for values that are known to be NestedSet
- Avoid Iterables.* for NestedSet
- Avoid flattening NestedSets for runfiles
- Remove some dead code from MiddlemanFactory
PiperOrigin-RevId: 284061855
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 38116fb..614cd11 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
@@ -1318,9 +1318,9 @@
private Artifact transitiveInfoCollectionToArtifact(
String attributeName, TransitiveInfoCollection target) {
if (target != null) {
- Iterable<Artifact> artifacts = target.getProvider(FileProvider.class).getFilesToBuild();
- if (Iterables.size(artifacts) == 1) {
- return Iterables.getOnlyElement(artifacts);
+ NestedSet<Artifact> artifacts = target.getProvider(FileProvider.class).getFilesToBuild();
+ if (artifacts.isSingleton()) {
+ return artifacts.getSingleton();
} else {
attributeError(attributeName, target.getLabel() + " expected a single artifact");
}
@@ -1730,7 +1730,7 @@
private boolean validateFilesetEntry(FilesetEntry filesetEntry, ConfiguredTargetAndData src) {
NestedSet<Artifact> filesToBuild =
src.getConfiguredTarget().getProvider(FileProvider.class).getFilesToBuild();
- if (filesToBuild.isSingleton() && Iterables.getOnlyElement(filesToBuild).isFileset()) {
+ if (filesToBuild.isSingleton() && filesToBuild.getSingleton().isFileset()) {
return true;
}