Before this CL, unexported fields were ignored for the purposes of determining which classes a Go struct should extend or implement. However, the field types were also ignored, resulting in the types not being generated at all. This CL adds the types of unexported fields to the set of types to be generated. Fixes golang/go#17945 Change-Id: I5c6c44b7cdfe0c3d4c4dc44863ae201dca7ae9a4 Reviewed-on: https://go-review.googlesource.com/38635 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package importers
|
|
|
|
import (
|
|
"go/parser"
|
|
"go/token"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestAnalyzer(t *testing.T) {
|
|
file := `package ast_test
|
|
|
|
import "Prefix/some/pkg/Name"
|
|
import "Prefix/some/pkg/Name2"
|
|
|
|
const c = Name.Constant
|
|
|
|
type T struct {
|
|
Name.Type
|
|
unexported Name.Type2
|
|
}
|
|
|
|
func f() {
|
|
Name2.Func().Func().Func()
|
|
}
|
|
`
|
|
fset := token.NewFileSet()
|
|
f, err := parser.ParseFile(fset, "ast_test.go", file, parser.AllErrors)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
refs, err := AnalyzeFile(f, "Prefix/")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
exps := []PkgRef{
|
|
{Pkg: "some/pkg/Name", Name: "Constant"},
|
|
{Pkg: "some/pkg/Name", Name: "Type"},
|
|
{Pkg: "some/pkg/Name2", Name: "Func"},
|
|
{Pkg: "some/pkg/Name", Name: "Type2"},
|
|
}
|
|
if len(refs.Refs) != len(exps) {
|
|
t.Fatalf("expected %d references; got %d", len(exps), len(refs.Refs))
|
|
}
|
|
for i, exp := range exps {
|
|
if got := refs.Refs[i]; exp != got {
|
|
t.Errorf("expected ref %v; got %v", exp, got)
|
|
}
|
|
}
|
|
if _, exists := refs.Names["Constant"]; !exists {
|
|
t.Errorf("expected \"Constant\" in the names set")
|
|
}
|
|
if len(refs.Embedders) != 1 {
|
|
t.Fatalf("expected 1 struct; got %d", len(refs.Embedders))
|
|
}
|
|
s := refs.Embedders[0]
|
|
exp := Struct{
|
|
Name: "T",
|
|
Pkg: "ast_test",
|
|
Refs: []PkgRef{{Pkg: "some/pkg/Name", Name: "Type"}},
|
|
}
|
|
if !reflect.DeepEqual(exp, s) {
|
|
t.Errorf("expected struct %v; got %v", exp, s)
|
|
}
|
|
}
|