@@ -123,8 +123,14 @@ let rec getType (typeInfo: Type): EntityBodyType =
123
123
match innerTypes with
124
124
| [] -> { Type = " object" ; InnerTypes = []; Name = None }
125
125
| _ ->
126
- printWarning ( " Taking only the first type " + innerTypes.[ 0 ]. Type + " for the entire union type." )
127
- getType innerTypes.[ 0 ] // TODO: generate unions
126
+ let takenType =
127
+ innerTypes
128
+ |> List.sortWith typeSorter
129
+ |> List.head
130
+ match takenType.Name with
131
+ | Some name -> printWarning ( " Taking type " + name + " for the entire union type." )
132
+ | _ -> printWarning ( " Taking type " + takenType.Type + " for the entire union type." )
133
+ getType takenType // TODO: generate unions
128
134
| _ -> { Type = " object" ; InnerTypes = []; Name = None }
129
135
| " intersection" -> { Type = " object" ; InnerTypes = []; Name = None } // TODO: generate intersections
130
136
| " reflection" ->
@@ -191,7 +197,15 @@ and getGenericTypeParameters (nodes: Reflection list) = // TODO: generate consta
191
197
|> List.where( fun x -> x.Kind = ReflectionKind.TypeParameter)
192
198
|> List.map ( fun x -> x.Name)
193
199
types |> List.map ( fun x -> {| Type = x; Constraint = " " |})
194
-
200
+ and typeSorter typeA typeB =
201
+ let typesOrder = [ " array" ; " tuple" ; " reference" ; " intrinsic" ]
202
+ let indexA = typesOrder |> List.tryFindIndex ( fun x -> x = typeA.Type)
203
+ let indexB = typesOrder |> List.tryFindIndex ( fun x -> x = typeB.Type)
204
+ match ( indexA, indexB) with
205
+ | ( None, None) -> 0
206
+ | ( Some _, None) -> - 1
207
+ | ( None, Some _) -> 1
208
+ | ( Some a, Some b) -> a.CompareTo b
195
209
let getMethodParameters ( parameters : Reflection list ) =
196
210
parameters
197
211
|> List.where( fun x -> x.Kind = ReflectionKind.Parameter)
0 commit comments