@@ -84,6 +84,44 @@ private bool IsValidManifest(Ast ast, string fileName)
8484 return ! missingManifestRule . AnalyzeScript ( ast , fileName ) . GetEnumerator ( ) . MoveNext ( ) ;
8585
8686 }
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+ }
87125
88126 /// <summary>
89127 /// 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
98136 extent = null ;
99137 foreach ( var pair in hast . KeyValuePairs )
100138 {
101-
102- var keyStrConstAst = pair . Item1 is StringConstantExpressionAst ? pair . Item1 as StringConstantExpressionAst : null ;
103-
139+ var keyStrConstAst = pair . Item1 as StringConstantExpressionAst ;
104140 if ( keyStrConstAst != null && keyStrConstAst . Value . Equals ( key , StringComparison . OrdinalIgnoreCase ) )
105141 {
106142 // 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
113150 {
114151 // 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 )
123154 {
124- return true ;
155+ extent = astWithNull . Extent ;
156+ return false ;
125157 }
126158 else
127159 {
128- extent = nullAst . Extent ;
129- return false ;
160+ return true ;
130161 }
131162 }
132- else
133- {
134- extent = elementWithWildcard . Extent ;
135- return false ;
136- }
137163 }
138-
139164 }
140165 return true ;
141166 }
142167
168+
169+ /// <summary>
170+ /// Gets the error string of the rule.
171+ /// </summary>
172+ /// <param name="field"></param>
173+ /// <returns></returns>
143174 public string GetError ( string field )
144175 {
145176 return string . Format ( CultureInfo . CurrentCulture , Strings . UseToExportFieldsInManifestError , field ) ;
0 commit comments