aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-06-28 10:42:29 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-28 10:43:48 -0700
commitbc374771afe9b210105f97519f37d394633a4f70 (patch)
tree736473c8543091ead93e2e08bd8115bcc8548094 /src/main/java
parentfc6c7425dc86f13d6922254c0efd11eb39b8c215 (diff)
Deduplicate loose paths much earlier so that they create smaller nested sets
and avoid needlessly copying lists. PiperOrigin-RevId: 202504396
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java10
2 files changed, 10 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 451d40020c..856ae0965f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -64,6 +64,7 @@ import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -576,8 +577,8 @@ public final class CcCommon {
* Determines a list of loose include directories that are only allowed to be referenced when
* headers checking is {@link HeadersCheckingMode#LOOSE} or {@link HeadersCheckingMode#WARN}.
*/
- List<PathFragment> getLooseIncludeDirs() {
- List<PathFragment> result = new ArrayList<>();
+ Set<PathFragment> getLooseIncludeDirs() {
+ ImmutableSet.Builder<PathFragment> result = ImmutableSet.builder();
// The package directory of the rule contributes includes. Note that this also covers all
// non-subpackage sub-directories.
PathFragment rulePackage = ruleContext.getLabel().getPackageIdentifier()
@@ -588,9 +589,8 @@ public final class CcCommon {
if (hasAttribute("srcs", BuildType.LABEL_LIST)) {
for (TransitiveInfoCollection src :
ruleContext.getPrerequisitesIf("srcs", Mode.TARGET, FileProvider.class)) {
- PathFragment packageDir = src.getLabel().getPackageIdentifier().getPathUnderExecRoot();
+ result.add(src.getLabel().getPackageIdentifier().getPathUnderExecRoot());
for (Artifact a : src.getProvider(FileProvider.class).getFilesToBuild()) {
- result.add(packageDir);
// Attempt to gather subdirectories that might contain include files.
result.add(a.getRootRelativePath().getParentDirectory());
}
@@ -604,7 +604,7 @@ public final class CcCommon {
// For now, anything with an 'includes' needs a blanket declaration
result.add(packageFragment.getRelative("**"));
}
- return result;
+ return result.build();
}
List<PathFragment> getSystemIncludeDirs() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index 7528d3c126..08ae86068f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -209,7 +209,7 @@ public final class CcCompilationHelper {
private final Set<String> defines = new LinkedHashSet<>();
private final List<TransitiveInfoCollection> deps = new ArrayList<>();
private final List<CcCompilationInfo> ccCompilationInfos = new ArrayList<>();
- private final List<PathFragment> looseIncludeDirs = new ArrayList<>();
+ private Set<PathFragment> looseIncludeDirs = ImmutableSet.of();
private final List<PathFragment> systemIncludeDirs = new ArrayList<>();
private final List<PathFragment> includeDirs = new ArrayList<>();
@@ -324,7 +324,7 @@ public final class CcCompilationHelper {
setCopts(Iterables.concat(common.getCopts(), additionalCopts));
addDefines(common.getDefines());
addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET));
- addLooseIncludeDirs(common.getLooseIncludeDirs());
+ setLooseIncludeDirs(common.getLooseIncludeDirs());
addSystemIncludeDirs(common.getSystemIncludeDirs());
setCoptsFilter(common.getCoptsFilter());
setHeadersCheckingMode(semantics.determineHeadersCheckingMode(ruleContext));
@@ -583,12 +583,12 @@ public final class CcCompilationHelper {
}
/**
- * Adds the given directories to the loose include directories that are only allowed to be
+ * Sets the given directories to by loose include directories that are only allowed to be
* referenced when headers checking is {@link HeadersCheckingMode#LOOSE} or {@link
* HeadersCheckingMode#WARN}.
*/
- private void addLooseIncludeDirs(Iterable<PathFragment> looseIncludeDirs) {
- Iterables.addAll(this.looseIncludeDirs, looseIncludeDirs);
+ private void setLooseIncludeDirs(Set<PathFragment> looseIncludeDirs) {
+ this.looseIncludeDirs = looseIncludeDirs;
}
/**