@@ -258,16 +258,12 @@ class ExtensionStore {
258
258
259
259
sources[complex] = extension ;
260
260
261
- for (var component in complex.components) {
262
- if (component is CompoundSelector ) {
263
- for (var simple in component.components) {
264
- _extensionsByExtender.putIfAbsent (simple, () => []).add (extension );
265
- // Only source specificity for the original selector is relevant.
266
- // Selectors generated by `@extend` don't get new specificity.
267
- _sourceSpecificity.putIfAbsent (
268
- simple, () => complex.maxSpecificity);
269
- }
270
- }
261
+ for (var simple in _simpleSelectors (complex)) {
262
+ _extensionsByExtender.putIfAbsent (simple, () => []).add (extension );
263
+ // Only source specificity for the original selector is relevant.
264
+ // Selectors generated by `@extend` don't get new specificity.
265
+ _sourceSpecificity.putIfAbsent (
266
+ simple, () => complex.maxSpecificity);
271
267
}
272
268
273
269
if (selectors != null || existingExtensions != null ) {
@@ -292,6 +288,24 @@ class ExtensionStore {
292
288
}
293
289
}
294
290
291
+ /// Returns an iterable of all simple selectors in [complex]
292
+ Iterable <SimpleSelector > _simpleSelectors (ComplexSelector complex) sync * {
293
+ for (var component in complex.components) {
294
+ if (component is CompoundSelector ) {
295
+ for (var simple in component.components) {
296
+ yield simple;
297
+
298
+ if (simple is ! PseudoSelector ) continue ;
299
+ var selector = simple.selector;
300
+ if (selector == null ) continue ;
301
+ for (var complex in selector.components) {
302
+ yield * _simpleSelectors (complex);
303
+ }
304
+ }
305
+ }
306
+ }
307
+ }
308
+
295
309
/// Extend [extensions] using [newExtensions] .
296
310
///
297
311
/// Note that this does duplicate some work done by
0 commit comments