gopls/internal/lsp/source: eliminate Metadata interface

This change merges the source.Metadata interface with
its sole implementation, cache.Metadata.

One possible concern: the struct cannot have private
fields used only by the cache-package logic that
constructs these structs. We are ok with that.

Change-Id: I93c112f92dc812bd0da07d36e7244d5d77978312
Reviewed-on: https://go-review.googlesource.com/c/tools/+/452035
Run-TryBot: Alan Donovan <adonovan@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
diff --git a/gopls/internal/lsp/cache/snapshot.go b/gopls/internal/lsp/cache/snapshot.go
index 281c5d9..ae5fe28 100644
--- a/gopls/internal/lsp/cache/snapshot.go
+++ b/gopls/internal/lsp/cache/snapshot.go
@@ -1128,12 +1128,12 @@
 	return result
 }
 
-func (s *snapshot) MetadataForFile(ctx context.Context, uri span.URI) ([]source.Metadata, error) {
+func (s *snapshot) MetadataForFile(ctx context.Context, uri span.URI) ([]*source.Metadata, error) {
 	knownIDs, err := s.getOrLoadIDsForURI(ctx, uri)
 	if err != nil {
 		return nil, err
 	}
-	var mds []source.Metadata
+	var mds []*source.Metadata
 	for _, id := range knownIDs {
 		md := s.getMetadata(id)
 		// TODO(rfindley): knownIDs and metadata should be in sync, but existing
@@ -1168,7 +1168,7 @@
 	return pkgs, nil
 }
 
-func (s *snapshot) AllValidMetadata(ctx context.Context) ([]source.Metadata, error) {
+func (s *snapshot) AllValidMetadata(ctx context.Context) ([]*source.Metadata, error) {
 	if err := s.awaitLoaded(ctx); err != nil {
 		return nil, err
 	}
@@ -1176,7 +1176,7 @@
 	s.mu.Lock()
 	defer s.mu.Unlock()
 
-	var meta []source.Metadata
+	var meta []*source.Metadata
 	for _, m := range s.meta.metadata {
 		meta = append(meta, m)
 	}
@@ -1233,7 +1233,7 @@
 	return match
 }
 
-func (s *snapshot) getMetadata(id PackageID) *Metadata {
+func (s *snapshot) getMetadata(id PackageID) *source.Metadata {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 
@@ -1922,7 +1922,7 @@
 	// Compute which metadata updates are required. We only need to invalidate
 	// packages directly containing the affected file, and only if it changed in
 	// a relevant way.
-	metadataUpdates := make(map[PackageID]*Metadata)
+	metadataUpdates := make(map[PackageID]*source.Metadata)
 	for k, v := range s.meta.metadata {
 		invalidateMetadata := idsToInvalidate[k]