Add a cache for the results of loading all rules in a package PiperOrigin-RevId: 209059428
diff --git a/ts_auto_deps/analyze/loader.go b/ts_auto_deps/analyze/loader.go index 8782bb1..1f4bb66 100644 --- a/ts_auto_deps/analyze/loader.go +++ b/ts_auto_deps/analyze/loader.go
@@ -15,10 +15,31 @@ appb "github.com/bazelbuild/buildtools/build_proto" ) +// pkgCacheEntry represents a set of loaded rules and a mapping from alias +// to rules from a package. +type pkgCacheEntry struct { + // rules is all rules in a package. + rules []*appb.Rule + // aliases is a map from an alias label to the actual rule of the alias. + aliases map[string]*appb.Rule +} + // QueryBasedTargetLoader uses Bazel query to load targets from BUILD files. type QueryBasedTargetLoader struct { workdir string bazelBinary string + + // pkgCache is a mapping from a package to all of the rules in said + // package along with a map from aliases to actual rules. + // + // Keys are of the form of "<visibility>|<package>" where visibility + // is the package that rules in package must be visible to and package + // is the actual package that has been loaded and cached. + // + // Since a new target loader is constructed for each directory being + // analyzed in the "-recursive" case, this cache will be garbage + // collected between directories. + pkgCache map[string]*pkgCacheEntry } // NewQueryBasedTargetLoader constructs a new QueryBasedTargetLoader rooted @@ -27,6 +48,8 @@ return &QueryBasedTargetLoader{ workdir: workdir, bazelBinary: bazelBinary, + + pkgCache: make(map[string]*pkgCacheEntry), } }