• Robert Griesemer's avatar
    go/importer: associate exported field and interface methods with correct package · 75608854
    Robert Griesemer authored
    In gc export data, exported struct field and interface method names appear
    in unqualified form (i.e., w/o package name). The (gc)importer assumed that
    unqualified exported names automatically belong to the package being imported.
    This is not the case if the field or method belongs to a struct or interface
    that was declared in another package and re-exported.
    
    The issue becomes visible if a type T (say an interface with a method M)
    is declared in a package A, indirectly re-exported by a package B (which
    imports A), and then imported in C. If C imports both A and B, if A is
    imported before B, T.M gets associated with the correct package A. If B
    is imported before A, T.M appears to be exported by B (even though T itself
    is correctly marked as coming from A). If T.M is imported again via the
    import of A if gets dropped (as it should) because it was imported already.
    
    The fix is to pass down the parent package when we parse imported types
    so that the importer can use the correct package when creating fields
    and methods.
    
    Fixes #13898.
    
    Change-Id: I7ec2ee2dda15859c582b65db221c3841899776e1
    Reviewed-on: https://go-review.googlesource.com/18549
    
    Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
    75608854
gcimporter.go 25.2 KB