Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix duplicate import names when same name used in different contexts
  • Loading branch information
meling committed Nov 9, 2017
commit 563235ae10e9069b3088c63bc9edeb88b7c96065
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ regenerate:
make -C test/issue42order regenerate
make -C proto generate-test-pbs
make -C test/importdedup regenerate
make -C test/importduplicate regenerate
make -C test/custombytesnonstruct regenerate
make -C test/required regenerate
make -C test/casttype regenerate
Expand Down
121 changes: 58 additions & 63 deletions _conformance/conformance_proto/conformance.pb.go

Large diffs are not rendered by default.

64 changes: 30 additions & 34 deletions jsonpb/jsonpb_test_proto/test_objects.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 14 additions & 24 deletions protoc-gen-gogo/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -715,36 +715,26 @@ var pkgNamesInUse = make(map[string][]*FileDescriptor)
// Pkg is the candidate name. If f is nil, it's a builtin package like "proto" and
// has no file descriptor.
func RegisterUniquePackageName(pkg string, f *FileDescriptor) string {
// Ensure that package names across multiple imports are unique, unless they
// are builtin or standard lib packages, in which case they should not conflict.
if f != nil {
// Convert dots to underscores before finding a unique alias.
pkg = strings.Map(badToUnderscore, pkg)
} else {
return pkg[strings.LastIndex(pkg, "/")+1:]
// Ensure that package names across multiple imports are unique.
if f == nil {
pkg = pkg[strings.LastIndex(pkg, "/")+1:]
for i := 0; pkgNamesInUse[pkg] != nil; i++ {
if i > 0 {
pkg = pkg + strconv.Itoa(i)
}
}
return pkg
}

var i = -1
var ptr *FileDescriptor = nil
for i, ptr = range pkgNamesInUse[pkg] {
// Convert dots to underscores before finding a unique alias.
pkg = strings.Map(badToUnderscore, pkg)
for _, ptr := range pkgNamesInUse[pkg] {
if ptr == f {
if i == 0 {
return pkg
}
return pkg + strconv.Itoa(i)
return pkg
}
}

pkgNamesInUse[pkg] = append(pkgNamesInUse[pkg], f)
i += 1

if i > 0 {
pkg = pkg + strconv.Itoa(i)
}

if f != nil {
uniquePackageName[f.FileDescriptorProto] = pkg
}
uniquePackageName[f.FileDescriptorProto] = pkg
return pkg
}

Expand Down
4 changes: 2 additions & 2 deletions test/importduplicate/importduplicate.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 19 additions & 20 deletions test/importduplicate/importduplicatepb_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading