@@ -15,6 +15,7 @@ private[scala2plantuml] object DiagramModifications {
15
15
16
16
import elementsWithNames ._
17
17
18
+ // TODO: This should be redundant.
18
19
def removeHidden (options : Options ): ElementsWithNames =
19
20
options.hide match {
20
21
case Options .HideMatching (patterns) =>
@@ -104,16 +105,7 @@ private[scala2plantuml] object DiagramModifications {
104
105
val owner = member.ownerSymbol
105
106
if (previousType.exists(_.symbol == owner)) loop(tail, previousType, acc :+ member)
106
107
else {
107
- def createClass =
108
- Class (
109
- scalaTypeName(symbolToScalaIdentifier(owner)),
110
- owner,
111
- isObject = false ,
112
- isAbstract = false ,
113
- Seq .empty,
114
- Seq .empty
115
- )
116
- val ownerElement = types.getOrElse(owner, createClass)
108
+ val ownerElement = types.getOrElse(owner, fakeOwner(owner))
117
109
loop(tail, Some (ownerElement), acc :+ ownerElement :+ member)
118
110
}
119
111
case head +: tail =>
@@ -122,9 +114,32 @@ private[scala2plantuml] object DiagramModifications {
122
114
}
123
115
val newElements = loop(elements, None , Vector .empty)
124
116
elementsWithNames.copy(elements = newElements)
125
- case _ => elementsWithNames
117
+ case _ =>
118
+ // Even when unsorted there can be elements without parents, which typically occurs
119
+ // when the starting symbol is a member.
120
+ val types = elements.collect { case typ : Type =>
121
+ typ.symbol
122
+ }.toSet
123
+ val newElements = elements.flatMap {
124
+ case member : Member =>
125
+ val owner = member.ownerSymbol
126
+ if (types.contains(owner)) List (member)
127
+ else List (fakeOwner(owner), member)
128
+ case element => List (element)
129
+ }
130
+ elementsWithNames.copy(elements = newElements)
126
131
}
127
132
133
+ private def fakeOwner (symbol : String ) =
134
+ Class (
135
+ scalaTypeName(symbolToScalaIdentifier(symbol)),
136
+ symbol,
137
+ isObject = symbol.endsWith(" ." ),
138
+ isAbstract = false ,
139
+ Seq .empty,
140
+ Seq .empty
141
+ )
142
+
128
143
def calculateNames (options : Options ): ElementsWithNames = {
129
144
assert(names.isEmpty)
130
145
def typeParameterSymbols (parameters : Seq [TypeParameter ]): Seq [String ] =
0 commit comments