@@ -84,6 +84,44 @@ private bool IsValidManifest(Ast ast, string fileName)
84
84
return ! missingManifestRule . AnalyzeScript ( ast , fileName ) . GetEnumerator ( ) . MoveNext ( ) ;
85
85
86
86
}
87
+
88
+ /// <summary>
89
+ /// Checks if the ast contains wildcard character.
90
+ /// </summary>
91
+ /// <param name="ast"></param>
92
+ /// <returns></returns>
93
+ private bool HasWildcardInExpression ( Ast ast )
94
+ {
95
+ var strConstExprAst = ast as StringConstantExpressionAst ;
96
+ if ( strConstExprAst != null && WildcardPattern . ContainsWildcardCharacters ( strConstExprAst . Value ) )
97
+ {
98
+ return true ;
99
+ }
100
+ else
101
+ {
102
+ return false ;
103
+ }
104
+ }
105
+
106
+ /// <summary>
107
+ /// Checks if the ast contains null expression.
108
+ /// </summary>
109
+ /// <param name="ast"></param>
110
+ /// <returns></returns>
111
+ private bool HasNullInExpression ( Ast ast )
112
+ {
113
+ var varExprAst = ast as VariableExpressionAst ;
114
+ if ( varExprAst != null
115
+ && varExprAst . VariablePath . IsUnqualified
116
+ && varExprAst . VariablePath . UserPath . Equals ( "null" , StringComparison . OrdinalIgnoreCase ) )
117
+ {
118
+ return true ;
119
+ }
120
+ else
121
+ {
122
+ return false ;
123
+ }
124
+ }
87
125
88
126
/// <summary>
89
127
/// Checks if the *ToExport fields are explicitly set to arrays, eg. @(...), and the array entries do not contain any wildcard.
@@ -98,48 +136,41 @@ private bool HasAcceptableExportField(string key, HashtableAst hast, string scri
98
136
extent = null ;
99
137
foreach ( var pair in hast . KeyValuePairs )
100
138
{
101
-
102
- var keyStrConstAst = pair . Item1 is StringConstantExpressionAst ? pair . Item1 as StringConstantExpressionAst : null ;
103
-
139
+ var keyStrConstAst = pair . Item1 as StringConstantExpressionAst ;
104
140
if ( keyStrConstAst != null && keyStrConstAst . Value . Equals ( key , StringComparison . OrdinalIgnoreCase ) )
105
141
{
106
142
// Checks for wildcard character in the entry.
107
- var strConstAstElements = from element in pair . Item2 . FindAll ( x => x is StringConstantExpressionAst , false )
108
- select element as StringConstantExpressionAst ;
109
- var elementWithWildcard = strConstAstElements . FirstOrDefault ( x => x != null
110
- && WildcardPattern . ContainsWildcardCharacters ( x . Value ) ) ;
111
-
112
- if ( elementWithWildcard == null )
143
+ var astWithWildcard = pair . Item2 . Find ( HasWildcardInExpression , false ) ;
144
+ if ( astWithWildcard != null )
145
+ {
146
+ extent = astWithWildcard . Extent ;
147
+ return false ;
148
+ }
149
+ else
113
150
{
114
151
// Checks for $null in the entry.
115
- var varAstElements = from element in pair . Item2 . FindAll ( x => x is VariableExpressionAst , false )
116
- select element as VariableExpressionAst ;
117
- // VariablePath property is never null hence we don't need to check for it.
118
- var nullAst = varAstElements . FirstOrDefault ( x => x != null
119
- && x . VariablePath . IsUnqualified
120
- && x . VariablePath . UserPath . Equals ( "null" , StringComparison . OrdinalIgnoreCase ) ) ;
121
-
122
- if ( nullAst == null )
152
+ var astWithNull = pair . Item2 . Find ( HasNullInExpression , false ) ;
153
+ if ( astWithNull != null )
123
154
{
124
- return true ;
155
+ extent = astWithNull . Extent ;
156
+ return false ;
125
157
}
126
158
else
127
159
{
128
- extent = nullAst . Extent ;
129
- return false ;
160
+ return true ;
130
161
}
131
162
}
132
- else
133
- {
134
- extent = elementWithWildcard . Extent ;
135
- return false ;
136
- }
137
163
}
138
-
139
164
}
140
165
return true ;
141
166
}
142
167
168
+
169
+ /// <summary>
170
+ /// Gets the error string of the rule.
171
+ /// </summary>
172
+ /// <param name="field"></param>
173
+ /// <returns></returns>
143
174
public string GetError ( string field )
144
175
{
145
176
return string . Format ( CultureInfo . CurrentCulture , Strings . UseToExportFieldsInManifestError , field ) ;
0 commit comments