aboutsummaryrefslogtreecommitdiff
path: root/dottydoc/src/dotty/tools/dottydoc/core/AlternateConstructorsPhase.scala
diff options
context:
space:
mode:
Diffstat (limited to 'dottydoc/src/dotty/tools/dottydoc/core/AlternateConstructorsPhase.scala')
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/core/AlternateConstructorsPhase.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/dottydoc/src/dotty/tools/dottydoc/core/AlternateConstructorsPhase.scala b/dottydoc/src/dotty/tools/dottydoc/core/AlternateConstructorsPhase.scala
new file mode 100644
index 000000000..53c96fc87
--- /dev/null
+++ b/dottydoc/src/dotty/tools/dottydoc/core/AlternateConstructorsPhase.scala
@@ -0,0 +1,34 @@
+package dotty.tools
+package dottydoc
+package core
+
+import dotc.core.Contexts.Context
+
+import transform.DocMiniPhase
+import model._
+import model.internal._
+
+/** This DocMiniPhase adds the alternate constructors, currently defined as
+ * methods with the name `<init>`, to the Entity#constructors list
+ */
+class AlternateConstructors extends DocMiniPhase {
+ def partitionMembers(ent: Entity with Constructors with Members): (List[List[ParamList]], List[Entity]) = {
+ val (constructors, members) = ent.members.partition(x => x.name == "<init>")
+
+ val paramLists: List[List[ParamList]] = constructors.collect {
+ case df: Def => df.paramLists
+ }
+
+ (ent.constructors ++ paramLists, members)
+ }
+
+ override def transformClass(implicit ctx: Context) = { case cls: ClassImpl =>
+ val (constructors, members) = partitionMembers(cls)
+ cls.copy(members = members, constructors = constructors)
+ }
+
+ override def transformCaseClass(implicit ctx: Context) = { case cc: CaseClassImpl =>
+ val (constructors, members) = partitionMembers(cc)
+ cc.copy(members = members, constructors = constructors)
+ }
+}