internal,importers: find deeply nested prefixed class references
Before this CL, with code such as import "Java/some/pkg/Class" ... Class.StaticFunc().DoSomething() the reverse generator wouldn't find the the Java/some/pkg.Class reference. Change-Id: I1def4b54589fd1c123767ff59438c647cbced0cd Reviewed-on: https://go-review.googlesource.com/35331 Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
226c1c8284
commit
ab8d69d0ab
1
bind/testdata/java.go.golden
vendored
1
bind/testdata/java.go.golden
vendored
@ -56,7 +56,6 @@ var (
|
||||
// Cast panics if the argument is not a proxy or if the underlying object does
|
||||
// not extend or implement java.lang.Long.
|
||||
Cast func(v interface{}) Java.Java_lang_Long
|
||||
|
||||
)
|
||||
|
||||
// File is generated by gobind. Do not edit.
|
||||
|
@ -227,7 +227,6 @@ func (v *refsSaver) Visit(n ast.Node) ast.Visitor {
|
||||
if v.insideStruct && len(n.Names) == 1 && !n.Names[0].IsExported() {
|
||||
return nil
|
||||
}
|
||||
return v
|
||||
case *ast.SelectorExpr:
|
||||
v.Names[n.Sel.Name] = struct{}{}
|
||||
if ref, ok := v.parseRef(n); ok {
|
||||
@ -235,8 +234,8 @@ func (v *refsSaver) Visit(n ast.Node) ast.Visitor {
|
||||
v.refMap[ref] = struct{}{}
|
||||
v.Refs = append(v.Refs, ref)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
case *ast.FuncDecl:
|
||||
if n.Recv != nil { // Methods
|
||||
v.Names[n.Name.Name] = struct{}{}
|
||||
|
@ -11,6 +11,7 @@ func TestAnalyzer(t *testing.T) {
|
||||
file := `package ast_test
|
||||
|
||||
import "Prefix/some/pkg/Name"
|
||||
import "Prefix/some/pkg/Name2"
|
||||
|
||||
const c = Name.Constant
|
||||
|
||||
@ -18,6 +19,10 @@ type T struct {
|
||||
Name.Type
|
||||
hidden Name.Type2
|
||||
}
|
||||
|
||||
func f() {
|
||||
Name2.Func().Func().Func()
|
||||
}
|
||||
`
|
||||
fset := token.NewFileSet()
|
||||
f, err := parser.ParseFile(fset, "ast_test.go", file, parser.AllErrors)
|
||||
@ -28,12 +33,18 @@ type T struct {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(refs.Refs) != 2 {
|
||||
t.Fatalf("expected 2 references; got %d", len(refs.Refs))
|
||||
exps := []PkgRef{
|
||||
{Pkg: "some/pkg/Name", Name: "Constant"},
|
||||
{Pkg: "some/pkg/Name", Name: "Type"},
|
||||
{Pkg: "some/pkg/Name2", Name: "Func"},
|
||||
}
|
||||
got := refs.Refs[0]
|
||||
if exp := (PkgRef{"some/pkg/Name", "Constant"}); exp != got {
|
||||
t.Errorf("expected ref %v; got %v", exp, got)
|
||||
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")
|
||||
@ -45,9 +56,9 @@ type T struct {
|
||||
exp := Struct{
|
||||
Name: "T",
|
||||
Pkg: "ast_test",
|
||||
Refs: []PkgRef{{"some/pkg/Name", "Type"}},
|
||||
Refs: []PkgRef{{Pkg: "some/pkg/Name", Name: "Type"}},
|
||||
}
|
||||
if !reflect.DeepEqual(exp, s) {
|
||||
t.Errorf("expected struct %v; got %v", exp, got)
|
||||
t.Errorf("expected struct %v; got %v", exp, s)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user