|
12 | 12 |
|
13 | 13 | using System; |
14 | 14 | using System.Globalization; |
| 15 | +using System.Linq; |
15 | 16 | using System.Management.Automation; |
16 | 17 |
|
17 | 18 | namespace Microsoft.Windows.PowerShell.ScriptAnalyzer.Commands |
@@ -77,20 +78,17 @@ protected override void BeginProcessing() |
77 | 78 | } |
78 | 79 | #endif |
79 | 80 |
|
80 | | - if (Range != null) |
| 81 | + try |
81 | 82 | { |
82 | | - try |
83 | | - { |
84 | | - range = GetRange(Range); |
85 | | - } |
86 | | - catch (Exception e) |
87 | | - { |
88 | | - this.ThrowTerminatingError(new ErrorRecord( |
89 | | - e, |
90 | | - "RANGE_ERROR", |
91 | | - ErrorCategory.InvalidArgument, |
92 | | - Range)); |
93 | | - } |
| 83 | + range = GetRange(); |
| 84 | + } |
| 85 | + catch (Exception e) |
| 86 | + { |
| 87 | + this.ThrowTerminatingError(new ErrorRecord( |
| 88 | + e, |
| 89 | + "RANGE_ERROR", |
| 90 | + ErrorCategory.InvalidArgument, |
| 91 | + Range)); |
94 | 92 | } |
95 | 93 |
|
96 | 94 | try |
@@ -126,26 +124,50 @@ protected override void ProcessRecord() |
126 | 124 | this.WriteObject(formattedScriptDefinition); |
127 | 125 | } |
128 | 126 |
|
129 | | - private static Range GetRange(object rangeObj) |
| 127 | + private Range GetRange() |
130 | 128 | { |
131 | | - var range = rangeObj as Range; |
132 | | - if (range == null) |
| 129 | + if (Range == null) |
| 130 | + { |
| 131 | + return null; |
| 132 | + } |
| 133 | + |
| 134 | + var range = Range as Range; |
| 135 | + if (range != null) |
| 136 | + { |
| 137 | + return range; |
| 138 | + } |
| 139 | + |
| 140 | + var objArr = Range as object[]; |
| 141 | + int[] intArr; |
| 142 | + if (objArr == null) |
133 | 143 | { |
134 | | - var intArr = rangeObj as int[]; |
| 144 | + // todo check passing int[] casted parameter |
| 145 | + intArr = Range as int[]; |
135 | 146 | if (intArr == null) |
136 | 147 | { |
137 | | - throw new ArgumentException("Argument should be of type Range or int[]."); |
| 148 | + throw new ArgumentException( |
| 149 | + "Argument should be of type Range or object[] or int[].", |
| 150 | + nameof(Range)); |
138 | 151 | } |
| 152 | + } |
139 | 153 |
|
140 | | - if (intArr.Length != 4) |
141 | | - { |
142 | | - throw new ArgumentException("Integer array should be of length 4."); |
143 | | - } |
| 154 | + if (objArr.Length != 4) |
| 155 | + { |
| 156 | + throw new ArgumentException( |
| 157 | + "Array should be of length 4.", |
| 158 | + nameof(Range)); |
| 159 | + } |
144 | 160 |
|
145 | | - range = new Range(intArr[0], intArr[1], intArr[2], intArr[3]); |
| 161 | + if (!objArr.All(x => x is int)) |
| 162 | + { |
| 163 | + throw new ArgumentException( |
| 164 | + "Array should contain integer elements.", |
| 165 | + nameof(Range)); |
146 | 166 | } |
147 | 167 |
|
148 | | - return range; |
| 168 | + intArr = new int[objArr.Length]; |
| 169 | + objArr.CopyTo(intArr, 0); |
| 170 | + return new Range(intArr[0], intArr[1], intArr[2], intArr[3]); |
149 | 171 | } |
150 | 172 |
|
151 | 173 | private void ValidateInputSettings() |
|
0 commit comments