Avoid Set.removeAll(List), which is quadratic if set.size() <= list.size().
RELNOTES: None.
PiperOrigin-RevId: 210117999
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index 0e05539..e3f4d2d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -209,8 +209,12 @@
}
}
}
- modularHeaders.removeAll(headerInfo.modularHeaders);
- modularHeaders.removeAll(headerInfo.textualHeaders);
+ for (Artifact a : headerInfo.modularHeaders) {
+ modularHeaders.remove(a);
+ }
+ for (Artifact a : headerInfo.textualHeaders) {
+ modularHeaders.remove(a);
+ }
return new IncludeScanningHeaderData(
Collections.unmodifiableMap(pathToLegalOutputArtifact),
Collections.unmodifiableSet(modularHeaders));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index bd7bcde..6387161 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -404,27 +404,25 @@
cppConfiguration.isStrictSystemIncludes()
? getBuiltInIncludeDirectories()
: getValidationIgnoredDirs();
- ArrayList<Artifact> found = new ArrayList<>();
+ Set<Artifact> missing = Sets.newHashSet();
// Lazily initialize, so that compiles that properly declare all their files profit.
Set<PathFragment> declaredIncludeDirs = null;
for (Artifact header : undeclaredHeaders) {
if (FileSystemUtils.startsWithAny(header.getExecPath(), ignoreDirs)) {
- found.add(header);
continue;
}
if (declaredIncludeDirs == null) {
declaredIncludeDirs = ccCompilationContext.getDeclaredIncludeDirs().toSet();
}
- if (isDeclaredIn(actionExecutionContext, header, declaredIncludeDirs)) {
- found.add(header);
+ if (!isDeclaredIn(actionExecutionContext, header, declaredIncludeDirs)) {
+ missing.add(header);
}
}
- undeclaredHeaders.removeAll(found);
- if (undeclaredHeaders.isEmpty()) {
+ if (missing.isEmpty()) {
return headers;
}
- return Iterables.filter(headers, header -> !undeclaredHeaders.contains(header));
+ return Iterables.filter(headers, header -> !missing.contains(header));
}
@Nullable