@@ -2,8 +2,8 @@ package tscfg
2
2
3
3
import com .typesafe .config ._
4
4
import tscfg .generators .tsConfigUtil
5
- import tscfg .model .{AnnType , DURATION , ObjectType , SIZE }
6
5
import tscfg .model .durations .ms
6
+ import tscfg .model .{DURATION , SIZE }
7
7
8
8
import scala .collection .JavaConverters ._
9
9
@@ -42,13 +42,18 @@ class ModelBuilder(assumeAllRequired: Boolean = false) {
42
42
private val warns = collection.mutable.ArrayBuffer [Warning ]()
43
43
44
44
private def fromConfig (namespace : Namespace , conf : Config ): model.ObjectType = {
45
- // do two passes as lightbend config does not necessarily preserve member order:
46
- val ot = fromConfig1(namespace, conf)
47
- fromConfig2(namespace, ot)
48
- }
49
-
50
- private def fromConfig1 (namespace : Namespace , conf : Config ): model.ObjectType = {
51
45
val memberStructs = getMemberStructs(conf)
46
+ // have the `@define`s be traversed first:
47
+ .sortWith { case (childStruct, s2) ⇒
48
+ if (childStruct.isLeaf) false
49
+ else if (s2.isLeaf) true
50
+ else {
51
+ val cv = conf.getValue(childStruct.name)
52
+ val comments = cv.origin().comments().asScala.toList
53
+ comments.exists(_.trim.startsWith(" @define" ))
54
+ }
55
+ }
56
+
52
57
val members : immutable.Map [String , model.AnnType ] = memberStructs.map { childStruct ⇒
53
58
val name = childStruct.name
54
59
val cv = conf.getValue(name)
@@ -121,35 +126,6 @@ class ModelBuilder(assumeAllRequired: Boolean = false) {
121
126
model.ObjectType (members)
122
127
}
123
128
124
- private def fromConfig2 (namespace : Namespace , ot : model.ObjectType ): model.ObjectType = {
125
- val resolvedMembers = ot.members.map { case (name, annType) ⇒
126
- val modAnnType = annType.t match {
127
-
128
- case _:model.STRING .type ⇒
129
- annType.default match {
130
- case Some (strValue) ⇒
131
- namespace.resolveDefine(strValue) match {
132
- case Some (ort) ⇒ AnnType (ort)
133
- case _ ⇒ annType
134
- }
135
-
136
- case None ⇒ annType
137
- }
138
-
139
- // // the following would be part of changes to allow recursive type
140
- // case ot:ObjectType ⇒
141
- // val ot2 = fromConfig2(namespace, ot)
142
- // AnnType(ot2)
143
-
144
- case _ ⇒ annType
145
- }
146
-
147
- name → modAnnType
148
- }
149
-
150
- model.ObjectType (resolvedMembers)
151
- }
152
-
153
129
private case class Struct (name : String , members : mutable.HashMap [String , Struct ] = mutable.HashMap .empty) {
154
130
def isLeaf : Boolean = members.isEmpty
155
131
// $COVERAGE-OFF$
0 commit comments