@@ -38,7 +38,7 @@ class DirectiveSelector {
38
38
}
39
39
40
40
if ((match = _CONTAINS_REGEXP .firstMatch (selector)) != null ) {
41
- textSelector.add (new _ContainsSelector (annotation, match. group ( 1 ) ));
41
+ textSelector.add (new _ContainsSelector (annotation, match[ 1 ] ));
42
42
} else if ((match = _ATTR_CONTAINS_REGEXP .firstMatch (selector)) != null ) {
43
43
attrSelector.add (new _ContainsSelector (annotation, match[1 ]));
44
44
} else if ((selectorParts = _splitCss (selector, type)) != null ){
@@ -223,42 +223,39 @@ class _ElementSelector {
223
223
_ElementSelector (this ._name);
224
224
225
225
void addDirective (List <_SelectorPart > selectorParts, _Directive directive) {
226
- var selectorPart = selectorParts.removeAt ( 0 );
227
- var terminal = selectorParts.isEmpty ;
226
+ assert ( selectorParts.isNotEmpty );
227
+ var elSelector = this ;
228
228
var name;
229
- if ((name = selectorPart.element) != null ) {
230
- if (terminal) {
231
- _elementMap.putIfAbsent (name, () => []).add (directive);
232
- } else {
233
- _elementPartialMap
234
- .putIfAbsent (name, () => new _ElementSelector (name))
235
- .addDirective (selectorParts, directive);
236
- }
237
- } else if ((name = selectorPart.className) != null ) {
238
- if (terminal) {
239
- _classMap
240
- .putIfAbsent (name, () => [])
241
- .add (directive);
242
- } else {
243
- _classPartialMap
244
- .putIfAbsent (name, () => new _ElementSelector (name))
245
- .addDirective (selectorParts, directive);
246
- }
247
- } else if ((name = selectorPart.attrName) != null ) {
248
- if (terminal) {
249
- _attrValueMap
250
- .putIfAbsent (name, () => < String , List <_Directive >> {})
251
- .putIfAbsent (selectorPart.attrValue, () => [])
252
- .add (directive);
229
+ for (var i = 0 ; i < selectorParts.length; i++ ) {
230
+ var part = selectorParts[i];
231
+ var terminal = i == selectorParts.length - 1 ;
232
+ if ((name = part.element) != null ) {
233
+ if (terminal) {
234
+ elSelector._elementMap.putIfAbsent (name, () => []).add (directive);
235
+ } else {
236
+ elSelector = elSelector._elementPartialMap
237
+ .putIfAbsent (name, () => new _ElementSelector (name));
238
+ }
239
+ } else if ((name = part.className) != null ) {
240
+ if (terminal) {
241
+ elSelector._classMap.putIfAbsent (name, () => []).add (directive);
242
+ } else {
243
+ elSelector = elSelector._classPartialMap
244
+ .putIfAbsent (name, () => new _ElementSelector (name));
245
+ }
246
+ } else if ((name = part.attrName) != null ) {
247
+ if (terminal) {
248
+ elSelector._attrValueMap.putIfAbsent (name, () => < String , List <_Directive >> {})
249
+ .putIfAbsent (part.attrValue, () => [])
250
+ .add (directive);
251
+ } else {
252
+ elSelector = elSelector._attrValuePartialMap
253
+ .putIfAbsent (name, () => < String , _ElementSelector > {})
254
+ .putIfAbsent (part.attrValue, () => new _ElementSelector (name));
255
+ }
253
256
} else {
254
- _attrValuePartialMap
255
- .putIfAbsent (name, () => < String , _ElementSelector > {})
256
- .putIfAbsent (selectorPart.attrValue, () =>
257
- new _ElementSelector (name))
258
- .addDirective (selectorParts, directive);
257
+ throw "Unknown selector part '$part '." ;
259
258
}
260
- } else {
261
- throw "Unknown selector part '$selectorPart '." ;
262
259
}
263
260
}
264
261
0 commit comments