summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Gourlay <antoine@gourlay.fr>2014-11-04 14:28:48 +0100
committerAntoine Gourlay <antoine@gourlay.fr>2014-11-07 09:44:08 +0100
commit6b9f5437e84b4bbb021dba6af58851ba54c3c0b7 (patch)
treec2a4d9f27aaa1cc075599986ce87256d866431a0
parentf7c3c6bc37228a70e06d5542ed4927bf3614486f (diff)
downloadscala-6b9f5437e84b4bbb021dba6af58851ba54c3c0b7.tar.gz
scala-6b9f5437e84b4bbb021dba6af58851ba54c3c0b7.tar.bz2
scala-6b9f5437e84b4bbb021dba6af58851ba54c3c0b7.zip
SI-5730 hide constructors of sealed abstract classes in scaladoc
Sealed abstract classes (like `List`) have a primary constructor, public by default. It can never be called by external code but it shows up in the scaladoc as a nice `new List()` construtor... If a class is only abstract, the constructor is still useful because people can subclass and call it. If it is only sealed (i.e. effectively final), then it is the normal constructor of a final class. But sealed *and* abstract makes documenting the constructor useless. This should remove the misleading constructors of `List`, `Double`, `Option` and others from the scaladoc.
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/model/ModelFactory.scala6
-rw-r--r--test/scaladoc/run/t5730.check1
-rw-r--r--test/scaladoc/run/t5730.scala36
3 files changed, 41 insertions, 2 deletions
diff --git a/src/scaladoc/scala/tools/nsc/doc/model/ModelFactory.scala b/src/scaladoc/scala/tools/nsc/doc/model/ModelFactory.scala
index ef84ac42ba..7a67055ffa 100644
--- a/src/scaladoc/scala/tools/nsc/doc/model/ModelFactory.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/model/ModelFactory.scala
@@ -753,8 +753,10 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
})
}
else if (bSym.isConstructor)
- if (conversion.isDefined)
- None // don't list constructors inherted by implicit conversion
+ if (conversion.isDefined || (bSym.enclClass.isAbstract && (bSym.enclClass.isSealed || bSym.enclClass.isFinal)))
+ // don't list constructors inherited by implicit conversion
+ // and don't list constructors of abstract sealed types (they cannot be accessed anyway)
+ None
else
Some(new NonTemplateParamMemberImpl(bSym, conversion, useCaseOf, inTpl) with Constructor {
override def isConstructor = true
diff --git a/test/scaladoc/run/t5730.check b/test/scaladoc/run/t5730.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/t5730.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/t5730.scala b/test/scaladoc/run/t5730.scala
new file mode 100644
index 0000000000..cc4c2444b1
--- /dev/null
+++ b/test/scaladoc/run/t5730.scala
@@ -0,0 +1,36 @@
+import scala.tools.nsc.doc.base._
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ package scala.test.scaladoc.T5730
+
+ /**
+ * A link:
+ *
+ * [[scala.Option$ object Option]].
+ */
+ sealed abstract class A
+
+ case object B extends A
+
+ abstract final class C
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ // get the quick access implicit defs in scope (_package(s), _class(es), _trait(s), object(s) _method(s), _value(s))
+ import access._
+
+ val p = rootPackage._package("scala")._package("test")._package("scaladoc")._package("T5730")
+
+ val a = p._class("A")
+ val c = p._class("C")
+
+ assert(a.constructors.isEmpty, s"there should be no constructors, found: ${a.constructors}")
+ assert(c.constructors.isEmpty, s"there should be no constructors, found: ${c.constructors}")
+ }
+}