aboutsummaryrefslogtreecommitdiff
path: root/internal/lsp/cache/parse.go
diff options
context:
space:
mode:
authorAlan Donovan <adonovan@google.com>2022-07-05 10:30:58 -0400
committerGopher Robot <gobot@golang.org>2022-07-08 19:22:01 +0000
commit53ead67a981c04bcacdd4f593330c43ee9285578 (patch)
tree76db7cc6d09ab5219bb2175c5fa0a753b90a1b8e /internal/lsp/cache/parse.go
parent8746177218db2b5640e4134ec99a5a905018b50c (diff)
downloadgolang-x-tools-53ead67a981c04bcacdd4f593330c43ee9285578.tar.gz
internal/memoize: delete Generation and Bind
Now that the lifetime of all handles in the store is determined by reference counting, we no longer need the generation feature. The Arg interface, renamed RefCounted, is now optional, and causes the lifetime of the argument to be extended for the duration of the Function call. This is important when the Get(ctx) context is cancelled, causing the function call to outlive Get: if Get's reference to the argument was borrowed, it needs to increase the refcount to prevent premature destruction. Also: - add missing snapshot.release() call in importsState.populateProcessEnv. - remove the --memoize_panic_on_destroyed flag. Change-Id: I0b3d37c16f8b3f550bb10120c066b628c3db244b Reviewed-on: https://go-review.googlesource.com/c/tools/+/416076 Run-TryBot: Alan Donovan <adonovan@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Alan Donovan <adonovan@google.com> Reviewed-by: Robert Findley <rfindley@google.com> gopls-CI: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'internal/lsp/cache/parse.go')
-rw-r--r--internal/lsp/cache/parse.go10
1 files changed, 5 insertions, 5 deletions
diff --git a/internal/lsp/cache/parse.go b/internal/lsp/cache/parse.go
index c8c751f0b..ef588c605 100644
--- a/internal/lsp/cache/parse.go
+++ b/internal/lsp/cache/parse.go
@@ -59,7 +59,7 @@ func (s *snapshot) ParseGo(ctx context.Context, fh source.FileHandle, mode sourc
// cache miss?
if !hit {
- handle, release := s.generation.GetHandle(key, func(ctx context.Context, arg memoize.Arg) interface{} {
+ handle, release := s.store.Handle(key, func(ctx context.Context, arg interface{}) interface{} {
parsed, err := parseGoImpl(ctx, arg.(*snapshot).FileSet(), fh, mode)
return parseGoResult{parsed, err}
})
@@ -77,7 +77,7 @@ func (s *snapshot) ParseGo(ctx context.Context, fh source.FileHandle, mode sourc
}
// Await result.
- v, err := entry.(*memoize.Handle).Get(ctx, s.generation, s)
+ v, err := s.awaitHandle(ctx, entry.(*memoize.Handle))
if err != nil {
return nil, err
}
@@ -93,7 +93,7 @@ func (s *snapshot) peekParseGoLocked(fh source.FileHandle, mode source.ParseMode
if !hit {
return nil, nil // no-one has requested this file
}
- v := entry.(*memoize.Handle).Cached(s.generation)
+ v := entry.(*memoize.Handle).Cached()
if v == nil {
return nil, nil // parsing is still in progress
}
@@ -147,12 +147,12 @@ func (s *snapshot) astCacheData(ctx context.Context, spkg source.Package, pos to
// the search Pos.)
//
// A representative benchmark would help.
- astHandle, release := s.generation.GetHandle(astCacheKey{pkgHandle.key, pgf.URI}, func(ctx context.Context, arg memoize.Arg) interface{} {
+ astHandle, release := s.store.Handle(astCacheKey{pkgHandle.key, pgf.URI}, func(ctx context.Context, arg interface{}) interface{} {
return buildASTCache(pgf)
})
defer release()
- d, err := astHandle.Get(ctx, s.generation, s)
+ d, err := s.awaitHandle(ctx, astHandle)
if err != nil {
return nil, err
}