@@ -40,6 +40,7 @@ function New-ParameterTreeNode
40
40
$node | Add-Member - Type NoteProperty - Name Properties - Value @ ();
41
41
$node | Add-Member - Type NoteProperty - Name SubNodes - Value @ ();
42
42
$node | Add-Member - Type NoteProperty - Name IsPrimitive - Value $false ;
43
+ $node | Add-Member - Type NoteProperty - Name IsReference - Value $false ;
43
44
44
45
return $node ;
45
46
}
@@ -53,6 +54,9 @@ function Create-ParameterTreeImpl
53
54
[Parameter (Mandatory = $true )]
54
55
[System.Type ]$TypeInfo ,
55
56
57
+ [Parameter (Mandatory = $true )]
58
+ [System.Collections.Hashtable ]$TypeList ,
59
+
56
60
[Parameter (Mandatory = $false )]
57
61
$Parent = $null ,
58
62
@@ -64,88 +68,110 @@ function Create-ParameterTreeImpl
64
68
{
65
69
return $null ;
66
70
}
67
- elseif (-not $TypeInfo.FullName.StartsWith ($NameSpace + " ." ))
71
+
72
+ if (-not $TypeInfo.FullName.StartsWith ($NameSpace + " ." ))
68
73
{
69
74
$node = New-ParameterTreeNode $ParameterName $TypeInfo $Parent ;
70
75
return $node ;
71
76
}
72
77
else
73
78
{
74
- $treeNode = New-ParameterTreeNode $ParameterName $TypeInfo $Parent ;
75
- if (Contains- OnlyStringFields $TypeInfo )
76
- {
77
- $treeNode.AllStrings = $true ;
78
- }
79
- elseif (Contains- OnlyStringList $TypeInfo )
80
- {
81
- $treeNode.OneStringList = $true ;
82
- }
83
-
84
- if (Contains- OnlySimpleFields $TypeInfo $NameSpace )
85
- {
86
- $treeNode.OnlySimple = $true ;
87
- }
88
-
89
- $padding = ($Depth.ToString () + (' ' * (4 * ($Depth + 1 ))));
90
- if ($Depth -gt 0 )
79
+ if ($TypeList.ContainsKey ($TypeInfo.FullName ))
91
80
{
92
- Write-Verbose ($padding + " -----------------------------------------------------------" );
81
+ $treeNode = New-ParameterTreeNode $ParameterName $TypeInfo $Parent ;
82
+ $treeNode.IsReference = $true ;
83
+ return $treeNode ;
93
84
}
94
-
95
- if ($treeNode.AllStrings )
85
+ else
96
86
{
97
- $annotation = " *" ;
98
- }
99
- elseif ($treeNode.OneStringList )
100
- {
101
- $annotation = " ^" ;
102
- }
87
+ if ($TypeInfo.FullName -like " Microsoft.*Azure.Management.*.*" -and (-not ($typeInfo.FullName -like " Microsoft.*Azure.Management.*.SubResource" )))
88
+ {
89
+ $TypeList.Add ($TypeInfo.FullName , $TypeInfo );
90
+ }
91
+
92
+ $treeNode = New-ParameterTreeNode $ParameterName $TypeInfo $Parent ;
93
+ if (Contains- OnlyStringFields $TypeInfo )
94
+ {
95
+ $treeNode.AllStrings = $true ;
96
+ }
97
+ elseif (Contains- OnlyStringList $TypeInfo )
98
+ {
99
+ $treeNode.OneStringList = $true ;
100
+ }
103
101
104
- Write-Verbose ($padding + " [ Node ] " + $treeNode.Name + $annotation );
105
- Write-Verbose ($padding + " [Parent] " + $Parent.Name );
102
+ if (Contains- OnlySimpleFields $TypeInfo $NameSpace )
103
+ {
104
+ $treeNode.OnlySimple = $true ;
105
+ }
106
106
107
- foreach ($item in $TypeInfo.GetProperties ())
108
- {
109
- $itemProp = [System.Reflection.PropertyInfo ]$item ;
110
- $can_write = ($itemProp.GetSetMethod () -ne $null ) -and $itemProp.CanWrite ;
111
- $nodeProp = @ { Name = $itemProp.Name ; Type = $itemProp.PropertyType ; CanWrite = $can_write };
112
- $treeNode.Properties += $nodeProp ;
107
+ $padding = ($Depth.ToString () + (' ' * (4 * ($Depth + 1 ))));
108
+ if ($Depth -gt 0 )
109
+ {
110
+ Write-Verbose ($padding + " -----------------------------------------------------------" );
111
+ }
113
112
114
- if ($itemProp .PropertyType.FullName.StartsWith ( $NameSpace + " . " ) )
113
+ if ($treeNode .AllStrings )
115
114
{
116
- # Model Class Type - Recursive Call
117
- $subTreeNode = Create- ParameterTreeImpl $itemProp.Name $itemProp.PropertyType $treeNode ($Depth + 1 );
118
- if ($subTreeNode -ne $null )
119
- {
120
- $treeNode.SubNodes += $subTreeNode ;
121
- }
115
+ $annotation = " *" ;
122
116
}
123
- elseif ($itemProp .PropertyType.FullName.StartsWith ( " System.Collections.Generic.IList " ) )
117
+ elseif ($treeNode .OneStringList )
124
118
{
125
- # List Type
126
- $listItemType = $itemProp.PropertyType.GenericTypeArguments [0 ];
127
-
128
- Write-Verbose ($padding + ' -' + $itemProp.Name + ' : [List] ' + $listItemType.Name + " " );
129
-
130
- # ListItem is Model Class Type - Recursive Call
131
- $subTreeNode = Create- ParameterTreeImpl $itemProp.Name $listItemType $treeNode ($Depth + 1 )
132
- $subTreeNode.IsListItem = $true ;
133
- $treeNode.SubNodes += $subTreeNode ;
119
+ $annotation = " ^" ;
134
120
}
135
- else
121
+
122
+ Write-Verbose ($padding + " [ Node ] " + $treeNode.Name + $annotation );
123
+ Write-Verbose ($padding + " [Parent] " + $Parent.Name );
124
+
125
+ foreach ($item in $TypeInfo.GetProperties ())
136
126
{
137
- if ($nodeProp [" Type" ].IsEquivalentTo([System.Nullable [long ]]) -or
138
- $nodeProp [" Type" ].IsEquivalentTo([System.Nullable [bool ]]))
127
+ $itemProp = [System.Reflection.PropertyInfo ]$item ;
128
+ $can_write = ($itemProp.GetSetMethod () -ne $null ) -and $itemProp.CanWrite ;
129
+ $nodeProp = @ { Name = $itemProp.Name ; Type = $itemProp.PropertyType ; CanWrite = $can_write };
130
+ $treeNode.Properties += $nodeProp ;
131
+
132
+ if ($itemProp.PropertyType.FullName.StartsWith ($NameSpace + " ." ))
139
133
{
140
- $nodeProp [" IsPrimitive" ] = $true ;
134
+ # Model Class Type - Recursive Call
135
+ $subTreeNode = Create- ParameterTreeImpl $itemProp.Name $itemProp.PropertyType $TypeList $treeNode ($Depth + 1 );
136
+ if ($subTreeNode -ne $null )
137
+ {
138
+ $treeNode.SubNodes += $subTreeNode ;
139
+ }
140
+ }
141
+ elseif ($itemProp.PropertyType.FullName.StartsWith (" System.Collections.Generic.IList" ))
142
+ {
143
+ # List Type
144
+ $listItemType = $itemProp.PropertyType.GenericTypeArguments [0 ];
145
+ if ($TypeList.ContainsKey ($listItemType.FullName ))
146
+ {
147
+ $refSuffix = " `' " ;
148
+ }
149
+ Write-Verbose ($padding + ' -' + $itemProp.Name + ' : [List] ' + $listItemType.Name + $refSuffix );
150
+
151
+ # ListItem is Model Class Type - Recursive Call
152
+ $subTreeNode = Create- ParameterTreeImpl $itemProp.Name $listItemType $TypeList $treeNode ($Depth + 1 )
153
+ if ($subTreeNode -ne $null )
154
+ {
155
+ $subTreeNode.IsListItem = $true ;
156
+ $treeNode.SubNodes += $subTreeNode ;
157
+ }
158
+ }
159
+ else
160
+ {
161
+ if ($nodeProp [" Type" ].IsEquivalentTo([System.Nullable [long ]]) -or
162
+ $nodeProp [" Type" ].IsEquivalentTo([System.Nullable [bool ]]))
163
+ {
164
+ $nodeProp [" IsPrimitive" ] = $true ;
165
+ }
166
+
167
+ # Primitive Type, e.g. int, string, Dictionary<string, string>, etc.
168
+ Write-Verbose ($padding + ' -' + $nodeProp [" Name" ] + " : " + $nodeProp [" Type" ]);
141
169
}
142
-
143
- # Primitive Type, e.g. int, string, Dictionary<string, string>, etc.
144
- Write-Verbose ($padding + ' -' + $nodeProp [" Name" ] + " : " + $nodeProp [" Type" ]);
145
170
}
171
+
172
+ return $treeNode ;
146
173
}
147
- return $treeNode ;
148
174
}
149
175
}
150
176
151
- Write-Output (Create- ParameterTreeImpl $ParameterName $TypeInfo );
177
+ Write-Output (Create- ParameterTreeImpl $ParameterName $TypeInfo @ {} );
0 commit comments