internal/lsp/cache: handle a few possible panics in PackageStats
Change-Id: I50dbe8bf7d801e7325bdbe413368e85779511d85
Reviewed-on: https://go-review.googlesource.com/c/tools/+/240183
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
diff --git a/internal/lsp/cache/cache.go b/internal/lsp/cache/cache.go
index 9ae3295..3c8b477 100644
--- a/internal/lsp/cache/cache.go
+++ b/internal/lsp/cache/cache.go
@@ -176,11 +176,21 @@
switch k.(type) {
case packageHandleKey:
v := v.(*packageData)
+ if v.pkg == nil {
+ break
+ }
+ var typsCost, typInfoCost int64
+ if v.pkg.types != nil {
+ typsCost = typesCost(v.pkg.types.Scope())
+ }
+ if v.pkg.typesInfo != nil {
+ typInfoCost = typesInfoCost(v.pkg.typesInfo)
+ }
stat := packageStat{
id: v.pkg.id,
mode: v.pkg.mode,
- types: typesCost(v.pkg.types.Scope()),
- typesInfo: typesInfoCost(v.pkg.typesInfo),
+ types: typsCost,
+ typesInfo: typInfoCost,
}
for _, f := range v.pkg.compiledGoFiles {
fvi := f.handle.Cached()