go/analysis: update internal/facts and unit checker to support all(Package|Object)Facts methods
Change-Id: Ibae7a87417be49941a5e4970c25df2ff48b346a7
Reviewed-on: https://go-review.googlesource.com/c/tools/+/185978
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
diff --git a/go/analysis/internal/facts/facts.go b/go/analysis/internal/facts/facts.go
index 468f148..86f1ce8 100644
--- a/go/analysis/internal/facts/facts.go
+++ b/go/analysis/internal/facts/facts.go
@@ -99,6 +99,16 @@
s.mu.Unlock()
}
+func (s *Set) AllObjectFacts() []analysis.ObjectFact {
+ var facts []analysis.ObjectFact
+ for k, v := range s.m {
+ if k.obj != nil {
+ facts = append(facts, analysis.ObjectFact{k.obj, v})
+ }
+ }
+ return facts
+}
+
// ImportPackageFact implements analysis.Pass.ImportPackageFact.
func (s *Set) ImportPackageFact(pkg *types.Package, ptr analysis.Fact) bool {
if pkg == nil {
@@ -122,6 +132,16 @@
s.mu.Unlock()
}
+func (s *Set) AllPackageFacts() []analysis.PackageFact {
+ var facts []analysis.PackageFact
+ for k, v := range s.m {
+ if k.obj == nil {
+ facts = append(facts, analysis.PackageFact{k.pkg, v})
+ }
+ }
+ return facts
+}
+
// gobFact is the Gob declaration of a serialized fact.
type gobFact struct {
PkgPath string // path of package
diff --git a/go/analysis/unitchecker/unitchecker.go b/go/analysis/unitchecker/unitchecker.go
index ba2e66f..87c3160 100644
--- a/go/analysis/unitchecker/unitchecker.go
+++ b/go/analysis/unitchecker/unitchecker.go
@@ -334,8 +334,10 @@
Report: func(d analysis.Diagnostic) { act.diagnostics = append(act.diagnostics, d) },
ImportObjectFact: facts.ImportObjectFact,
ExportObjectFact: facts.ExportObjectFact,
+ AllObjectFacts: facts.AllObjectFacts,
ImportPackageFact: facts.ImportPackageFact,
ExportPackageFact: facts.ExportPackageFact,
+ AllPackageFacts: facts.AllPackageFacts,
}
t0 := time.Now()