]> Cypherpunks repositories - gostls13.git/commitdiff
go/doc: hide methods on locally-declared predeclared types
authorLarz Conwell <larzconwell@gmail.com>
Sat, 12 Mar 2016 07:57:24 +0000 (02:57 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 6 Oct 2016 00:35:30 +0000 (00:35 +0000)
Currently if you declare a type overwriting a predeclared type
and export methods on it they will be exposed in godoc, even
though the type itself is not exported. This corrects that
by making all methods on these types hidden, since that's
the expected output.

Fixes #9860

Change-Id: I14037bdcef1b4bbefcf299a143bac8bf363718e0
Reviewed-on: https://go-review.googlesource.com/20610
Reviewed-by: Russ Cox <rsc@golang.org>
src/go/doc/reader.go
src/go/doc/testdata/predeclared.0.golden [new file with mode: 0644]
src/go/doc/testdata/predeclared.1.golden [new file with mode: 0644]
src/go/doc/testdata/predeclared.2.golden [new file with mode: 0644]
src/go/doc/testdata/predeclared.go [new file with mode: 0644]

index c09f24d616adc8fac8d8a31de5d5f0e13e5f7021..ca46a047d6af089346eb3157cbee1481a3ec6512 100644 (file)
@@ -645,7 +645,9 @@ func (r *reader) computeMethodSets() {
 func (r *reader) cleanupTypes() {
        for _, t := range r.types {
                visible := r.isVisible(t.name)
-               if t.decl == nil && (predeclaredTypes[t.name] || visible && (t.isEmbedded || r.hasDotImp)) {
+               predeclared := predeclaredTypes[t.name]
+
+               if t.decl == nil && (predeclared || visible && (t.isEmbedded || r.hasDotImp)) {
                        // t.name is a predeclared type (and was not redeclared in this package),
                        // or it was embedded somewhere but its declaration is missing (because
                        // the AST is incomplete), or we have a dot-import (and all bets are off):
@@ -660,10 +662,12 @@ func (r *reader) cleanupTypes() {
                                r.funcs[name] = f
                        }
                        // 3) move methods
-                       for name, m := range t.methods {
-                               // don't overwrite functions with the same name - drop them
-                               if _, found := r.funcs[name]; !found {
-                                       r.funcs[name] = m
+                       if !predeclared {
+                               for name, m := range t.methods {
+                                       // don't overwrite functions with the same name - drop them
+                                       if _, found := r.funcs[name]; !found {
+                                               r.funcs[name] = m
+                                       }
                                }
                        }
                }
diff --git a/src/go/doc/testdata/predeclared.0.golden b/src/go/doc/testdata/predeclared.0.golden
new file mode 100644 (file)
index 0000000..9f37b06
--- /dev/null
@@ -0,0 +1,8 @@
+// Package predeclared is a go/doc test for handling of exported ...
+PACKAGE predeclared
+
+IMPORTPATH
+       testdata/predeclared
+
+FILENAMES
+       testdata/predeclared.go
diff --git a/src/go/doc/testdata/predeclared.1.golden b/src/go/doc/testdata/predeclared.1.golden
new file mode 100644 (file)
index 0000000..2ff8ee6
--- /dev/null
@@ -0,0 +1,22 @@
+// Package predeclared is a go/doc test for handling of exported ...
+PACKAGE predeclared
+
+IMPORTPATH
+       testdata/predeclared
+
+FILENAMES
+       testdata/predeclared.go
+
+TYPES
+       // 
+       type bool int
+
+       // Must not be visible. 
+       func (b bool) String() string
+
+       // 
+       type error struct{}
+
+       // Must not be visible. 
+       func (e error) Error() string
+
diff --git a/src/go/doc/testdata/predeclared.2.golden b/src/go/doc/testdata/predeclared.2.golden
new file mode 100644 (file)
index 0000000..9f37b06
--- /dev/null
@@ -0,0 +1,8 @@
+// Package predeclared is a go/doc test for handling of exported ...
+PACKAGE predeclared
+
+IMPORTPATH
+       testdata/predeclared
+
+FILENAMES
+       testdata/predeclared.go
diff --git a/src/go/doc/testdata/predeclared.go b/src/go/doc/testdata/predeclared.go
new file mode 100644 (file)
index 0000000..c6dd806
--- /dev/null
@@ -0,0 +1,22 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package predeclared is a go/doc test for handling of
+// exported methods on locally-defined predeclared types.
+// See issue 9860.
+package predeclared
+
+type error struct{}
+
+// Must not be visible.
+func (e error) Error() string {
+       return ""
+}
+
+type bool int
+
+// Must not be visible.
+func (b bool) String() string {
+       return ""
+}