oracle: referrers: display the selected object relative to the current package

Added test.  (Its previous output was "references to type
referrers.s", with s package-qualified.)

Change-Id: Ifd70246bf5976d5f59ed85e7bbded618286ec6bc
Reviewed-on: https://go-review.googlesource.com/9294
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/oracle/referrers.go b/oracle/referrers.go
index 893668b..b805ba2 100644
--- a/oracle/referrers.go
+++ b/oracle/referrers.go
@@ -35,6 +35,7 @@
 	var obj types.Object
 	var lprog *loader.Program
 	var pass2 bool
+	var qpos *queryPos
 	for {
 		// Load/parse/type-check the program.
 		var err error
@@ -44,7 +45,7 @@
 		}
 		q.Fset = lprog.Fset
 
-		qpos, err := parseQueryPos(lprog, q.Pos, false)
+		qpos, err = parseQueryPos(lprog, q.Pos, false)
 		if err != nil {
 			return err
 		}
@@ -104,7 +105,7 @@
 	sort.Sort(byNamePos{q.Fset, refs})
 
 	q.result = &referrersResult{
-		fset:  q.Fset,
+		qpos:  qpos,
 		query: id,
 		obj:   obj,
 		refs:  refs,
@@ -152,14 +153,14 @@
 }
 
 type referrersResult struct {
-	fset  *token.FileSet
+	qpos  *queryPos
 	query *ast.Ident   // identifier of query
 	obj   types.Object // object it denotes
 	refs  []*ast.Ident // set of all other references to it
 }
 
 func (r *referrersResult) display(printf printfFunc) {
-	printf(r.obj, "%d references to %s", len(r.refs), r.obj)
+	printf(r.obj, "%d references to %s", len(r.refs), r.qpos.objectString(r.obj))
 
 	// Show referring lines, like grep.
 	type fileinfo struct {
@@ -172,7 +173,7 @@
 
 	// First pass: start the file reads concurrently.
 	for _, ref := range r.refs {
-		posn := r.fset.Position(ref.Pos())
+		posn := r.qpos.fset.Position(ref.Pos())
 		fi := fileinfosByName[posn.Filename]
 		if fi == nil {
 			fi = &fileinfo{data: make(chan []byte)}
diff --git a/oracle/testdata/src/referrers/main.go b/oracle/testdata/src/referrers/main.go
index f551ee0..968c138 100644
--- a/oracle/testdata/src/referrers/main.go
+++ b/oracle/testdata/src/referrers/main.go
@@ -6,7 +6,7 @@
 
 import "lib"
 
-type s struct {
+type s struct { // @referrers ref-type " s "
 	f int
 }
 
diff --git a/oracle/testdata/src/referrers/main.golden b/oracle/testdata/src/referrers/main.golden
index 06cab17..3e8629b 100644
--- a/oracle/testdata/src/referrers/main.golden
+++ b/oracle/testdata/src/referrers/main.golden
@@ -1,3 +1,8 @@
+-------- @referrers ref-type --------
+2 references to type s struct{f int}
+	_ = s{}.f // @referrers ref-field "f"
+	var s2 s
+
 -------- @referrers ref-package --------
 2 references to package lib
 	var v lib.Type = lib.Const // @referrers ref-package "lib"