@@ -30,17 +30,26 @@ class IndexScript(universe: doc.Universe) extends Page {
3030 case (pack, templates) => {
3131 val merged = mergeByQualifiedName(templates)
3232
33- val ary = merged.keys.toList.sortBy(_.toLowerCase).map(key => {
33+ val ary = merged.keys.toList.sortBy(_.toLowerCase).map { key =>
34+ /** One pair is generated for the class/trait and one for the
35+ * companion object, both will have the same {"name": key}
36+ *
37+ * As such, we need to distinguish between the members that are
38+ * generated by the object, and the members generated by the
39+ * class/trait instance. Otherwise one of the member objects will be
40+ * overwritten.
41+ */
3442 val pairs = merged(key).flatMap { t : DocTemplateEntity =>
43+ val kind = kindToString(t)
3544 Seq (
36- kindToString(t) -> relativeLinkTo(t),
37- " kind" -> kindToString(t) ,
38- " members " -> membersToJSON(t.members.filter(! _.isShadowedOrAmbiguousImplicit)),
45+ kind -> relativeLinkTo(t),
46+ " kind" -> kind ,
47+ s " members_ $kind " -> membersToJSON(t.members.filter(! _.isShadowedOrAmbiguousImplicit), t ),
3948 " shortDescription" -> shortDesc(t))
4049 }
4150
4251 JSONObject (Map (pairs : _* ) + (" name" -> key))
43- })
52+ }
4453
4554 pack.qualifiedName -> JSONArray (ary)
4655 }
@@ -83,10 +92,10 @@ class IndexScript(universe: doc.Universe) extends Page {
8392 }
8493
8594 /** Returns the json representation of the supplied members */
86- def membersToJSON (entities : List [MemberEntity ]): JSONType =
87- JSONArray (entities map memberToJSON)
95+ def membersToJSON (entities : List [MemberEntity ], parent : DocTemplateEntity ): JSONType =
96+ JSONArray (entities map ( memberToJSON(_, parent)) )
8897
89- private def memberToJSON (mbr : MemberEntity ): JSONObject = {
98+ private def memberToJSON (mbr : MemberEntity , parent : DocTemplateEntity ): JSONObject = {
9099 /** This function takes a member and gets eventual parameters and the
91100 * return type. For example, the definition:
92101 * {{{ def get(key: A): Option[B] }}}
@@ -100,6 +109,7 @@ class IndexScript(universe: doc.Universe) extends Page {
100109 }
101110 .mkString(" (" , " )(" , " ): " + d.resultType.name)
102111 case v : Val => " : " + v.resultType.name
112+ case _ => " "
103113 }
104114
105115 /** This function takes a member entity and return all modifiers in a
@@ -119,15 +129,15 @@ class IndexScript(universe: doc.Universe) extends Page {
119129 */
120130 def jsonObject (m : MemberEntity ): JSONObject =
121131 JSONObject (Map (
122- " label" -> m.definitionName.replaceAll( " .*# " , " " ), // member name
132+ " label" -> " [^ \\ .]* \\ .([^#]+#)? " .r.replaceAllIn(m.definitionName , " " ), // member name
123133 " member" -> m.definitionName.replaceFirst(" #" , " ." ), // full member name
124134 " tail" -> memberTail(m),
125- " kind" -> memberKindToString(m), // modifiers i.e. "abstract def"
126- " link" -> memberToUrl(m))) // permalink to the member
135+ " kind" -> memberKindToString(m), // modifiers i.e. "abstract def"
136+ " link" -> memberToUrl(m))) // permalink to the member
127137
128138 mbr match {
129- case d : Def => jsonObject(d )
130- case v : Val => jsonObject(v )
139+ case x @ ( _ : Def | _ : Val | _ : Object | _ : AliasType ) => jsonObject(x )
140+ case e @ ( _ : Class | _ : Trait ) if parent.isRootPackage || ! parent.isPackage => jsonObject(e )
131141 case m : MemberEntity =>
132142 JSONObject (Map (" member" -> m.definitionName, " error" -> " unsupported entity" ))
133143 }
0 commit comments