2020import java .io .Serializable ;
2121import java .io .StringReader ;
2222import java .util .ArrayList ;
23+ import java .util .Collections ;
2324import java .util .HashMap ;
2425import java .util .Iterator ;
2526import java .util .LinkedList ;
@@ -372,25 +373,42 @@ public CSSStyleRuleImpl getRule() {
372373
373374 public static class CSSStyleSheetRuleIndex {
374375
376+ private static final class SelectorIndex {
377+
378+ private final Map <String , List <SelectorEntry >> keyToSelectors = new HashMap <>();
379+
380+ void add (final String key , final SelectorEntry selector ) {
381+ List <SelectorEntry > entry = keyToSelectors .get (key );
382+ if (entry == null ) {
383+ entry = new ArrayList <SelectorEntry >();
384+ keyToSelectors .put (key , entry );
385+ }
386+ entry .add (selector );
387+ }
388+
389+ List <SelectorEntry > get (final String key ) {
390+ List <SelectorEntry > entry = keyToSelectors .get (key );
391+ if (entry == null ) {
392+ return Collections .emptyList ();
393+ }
394+ return entry ;
395+ }
396+ }
397+
398+
375399 private static final MediaList DEFAULT_MEDIA_LIST = new MediaListImpl (null );
376400
377401 private final List <CSSStyleSheetRuleIndex > children_ = new ArrayList <>();
378402
379403 private MediaList mediaList_ = DEFAULT_MEDIA_LIST ;
380- private final Map < String , List < SelectorEntry >> elementSelectors_ = new HashMap <> ();
381- private final Map < String , List < SelectorEntry >> classSelectors_ = new HashMap <> ();
404+ private final SelectorIndex elementSelectors_ = new SelectorIndex ();
405+ private final SelectorIndex classSelectors_ = new SelectorIndex ();
382406 private final List <SelectorEntry > otherSelectors_ = new ArrayList <>();
383407
384408 public void addElementSelector (final ElementSelector elementSelector ,
385409 final Selector s , final CSSStyleRuleImpl styleRule ) {
386410 final String elementName = elementSelector .getLocalNameLowerCase ();
387- List <SelectorEntry > entries = elementSelectors_ .get (elementName );
388- if (entries == null ) {
389- entries = new ArrayList <SelectorEntry >();
390- elementSelectors_ .put (elementName , entries );
391- }
392- final SelectorEntry selectorEntry = new SelectorEntry (s , styleRule );
393- entries .add (selectorEntry );
411+ elementSelectors_ .add (elementName , new SelectorEntry (s , styleRule ));
394412 }
395413
396414 public void addClassSelector (final ElementSelector elementSelector , final String className ,
@@ -403,13 +421,7 @@ public void addClassSelector(final ElementSelector elementSelector, final String
403421 else {
404422 key = elementName + "." + className ;
405423 }
406- List <SelectorEntry > entries = classSelectors_ .get (key );
407- if (entries == null ) {
408- entries = new ArrayList <SelectorEntry >();
409- classSelectors_ .put (key , entries );
410- }
411- final SelectorEntry selectorEntry = new SelectorEntry (s , styleRule );
412- entries .add (selectorEntry );
424+ classSelectors_ .add (key , new SelectorEntry (s , styleRule ));
413425 }
414426
415427 public void addOtherSelector (final Selector s , final CSSStyleRuleImpl styleRule ) {
@@ -449,29 +461,32 @@ static final class SelectorEntriesIterator implements Iterator<SelectorEntry> {
449461 private LinkedList <Iterator <SelectorEntry >> iterators_ ;
450462
451463 SelectorEntriesIterator (final CSSStyleSheetRuleIndex index ,
452- final String elementName , final String [] classes ) {
464+ final String elementName ,
465+ final String [] classes ) {
466+
453467 iterators_ = new LinkedList <Iterator <SelectorEntry >>();
454468
455- List <SelectorEntry > sel = index .elementSelectors_ .get (null );
456- if (sel != null && ! sel .isEmpty ()) {
457- iterators_ .add (sel .iterator ());
469+ List <SelectorEntry > selectors = index .elementSelectors_ .get (null );
470+ if (! selectors .isEmpty ()) {
471+ iterators_ .add (selectors .iterator ());
458472 }
459- sel = index .elementSelectors_ .get (elementName );
460- if (sel != null && !sel .isEmpty ()) {
461- iterators_ .add (sel .iterator ());
473+
474+ selectors = index .elementSelectors_ .get (elementName );
475+ if (!selectors .isEmpty ()) {
476+ iterators_ .add (selectors .iterator ());
462477 }
463478
464479 if (classes != null ) {
465480 for (String clazz : classes ) {
466- sel = index .classSelectors_ .get ("." + clazz );
467- if (sel != null && !sel .isEmpty ()) {
468- iterators_ .add (sel .iterator ());
481+ selectors = index .classSelectors_ .get ("." + clazz );
482+ if (selectors != null && !selectors .isEmpty ()) {
483+ iterators_ .add (selectors .iterator ());
469484 }
470485
471486 if (elementName != null ) {
472- sel = index .classSelectors_ .get (elementName + "." + clazz );
473- if (sel != null && !sel .isEmpty ()) {
474- iterators_ .add (sel .iterator ());
487+ selectors = index .classSelectors_ .get (elementName + "." + clazz );
488+ if (selectors != null && !selectors .isEmpty ()) {
489+ iterators_ .add (selectors .iterator ());
475490 }
476491 }
477492 }
0 commit comments