internal/lsp/source: fix unexported references of non-workspace packages

qualifiedObjsAtProtocolPos returned too early. Have it keep looking in
the rest of the candidate packages.

This changes the returned error slightly but AFAICT nobody cares.

Updates golang/go#40809.

Change-Id: Ic8199a484f0abcaa48cb6a3bcdd782195802d670
Reviewed-on: https://go-review.googlesource.com/c/tools/+/249637
Run-TryBot: Heschi Kreinick <heschi@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/lsp/regtest/definition_test.go b/internal/lsp/regtest/definition_test.go
index 727b3d5..3f3e3a2 100644
--- a/internal/lsp/regtest/definition_test.go
+++ b/internal/lsp/regtest/definition_test.go
@@ -81,13 +81,21 @@
 		name, _ := env.GoToDefinition("main.go", env.RegexpSearch("main.go", `fmt.(Printf)`))
 		env.OpenFile(name)
 
-		name, pos := env.GoToDefinition(name, env.RegexpSearch(name, `(newPrinter)\(\)`))
+		pos := env.RegexpSearch(name, `:=\s*(newPrinter)\(\)`)
+
+		// Check that we can find references on a reference
+		refs := env.References(name, pos)
+		if len(refs) < 5 {
+			t.Errorf("expected 5+ references to newPrinter, found: %#v", refs)
+		}
+
+		name, pos = env.GoToDefinition(name, pos)
 		content, _ := env.Hover(name, pos)
 		if !strings.Contains(content.Value, "newPrinter") {
 			t.Fatal("definition of newPrinter went to the incorrect place")
 		}
-
-		refs := env.References(name, pos)
+		// And on the definition too.
+		refs = env.References(name, pos)
 		if len(refs) < 5 {
 			t.Errorf("expected 5+ references to newPrinter, found: %#v", refs)
 		}
diff --git a/internal/lsp/source/implementation.go b/internal/lsp/source/implementation.go
index 5227ad0..76a27a0 100644
--- a/internal/lsp/source/implementation.go
+++ b/internal/lsp/source/implementation.go
@@ -216,7 +216,7 @@
 		}
 		path := pathEnclosingObjNode(astFile, pos)
 		if path == nil {
-			return nil, ErrNoIdentFound
+			continue
 		}
 		var objs []types.Object
 		switch leaf := path[0].(type) {