diff options
author | 2018-06-28 10:42:29 -0700 | |
---|---|---|
committer | 2018-06-28 10:43:48 -0700 | |
commit | bc374771afe9b210105f97519f37d394633a4f70 (patch) | |
tree | 736473c8543091ead93e2e08bd8115bcc8548094 /src/main/java | |
parent | fc6c7425dc86f13d6922254c0efd11eb39b8c215 (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.java | 10 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java | 10 |
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; } /** |