@@ -38,7 +38,7 @@ class DirectiveSelector {
3838 }
3939
4040 if ((match = _CONTAINS_REGEXP .firstMatch (selector)) != null ) {
41- textSelector.add (new _ContainsSelector (annotation, match. group ( 1 ) ));
41+ textSelector.add (new _ContainsSelector (annotation, match[ 1 ] ));
4242 } else if ((match = _ATTR_CONTAINS_REGEXP .firstMatch (selector)) != null ) {
4343 attrSelector.add (new _ContainsSelector (annotation, match[1 ]));
4444 } else if ((selectorParts = _splitCss (selector, type)) != null ){
@@ -223,42 +223,39 @@ class _ElementSelector {
223223 _ElementSelector (this ._name);
224224
225225 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 ;
228228 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+ }
253256 } 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 '." ;
259258 }
260- } else {
261- throw "Unknown selector part '$selectorPart '." ;
262259 }
263260 }
264261
0 commit comments