2
0
mirror of synced 2025-02-23 14:58:12 +00:00

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:
Elias Naur 2017-01-17 23:42:53 +01:00
parent 226c1c8284
commit ab8d69d0ab
3 changed files with 19 additions and 10 deletions

View File

@ -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.

View File

@ -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{}{}

View File

@ -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)
}
}