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>
diff --git a/bind/testdata/java.go.golden b/bind/testdata/java.go.golden
index 5e5baa2..48eefad 100644
--- a/bind/testdata/java.go.golden
+++ b/bind/testdata/java.go.golden
@@ -56,7 +56,6 @@
 	// 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.
diff --git a/internal/importers/ast.go b/internal/importers/ast.go
index 3c798c1..9c8ac2a 100644
--- a/internal/importers/ast.go
+++ b/internal/importers/ast.go
@@ -227,7 +227,6 @@
 		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 @@
 				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{}{}
diff --git a/internal/importers/ast_test.go b/internal/importers/ast_test.go
index a26b3c3..b879216 100644
--- a/internal/importers/ast_test.go
+++ b/internal/importers/ast_test.go
@@ -11,6 +11,7 @@
 	file := `package ast_test
 
 import "Prefix/some/pkg/Name"
+import "Prefix/some/pkg/Name2"
 
 const c = Name.Constant
 
@@ -18,6 +19,10 @@
 	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 @@
 	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 @@
 	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)
 	}
 }