2626 */
2727package com .inet .lib .less ;
2828
29+ import java .util .ArrayDeque ;
2930import java .util .Arrays ;
3031import java .util .LinkedHashSet ;
3132import java .util .List ;
@@ -42,6 +43,15 @@ class LessExtendMap {
4243 // use a LinkedHashSet as cache to remove duplicates and hold the original order
4344 private final LinkedHashSet <String > selectorList = new LinkedHashSet <>();
4445
46+ private final ArrayDeque <SelectorTokenizer > tokenizers = new ArrayDeque <SelectorTokenizer >() {
47+ public SelectorTokenizer pollLast () {
48+ if ( size () == 0 ) {
49+ return new SelectorTokenizer ();
50+ }
51+ return super .pollLast ();
52+ }
53+ };
54+
4555 /**
4656 * Default constructor
4757 */
@@ -75,14 +85,15 @@ void add( LessExtend lessExtend, String[] mainSelector ) {
7585 String extendingSelector = lessExtend .getExtendingSelector ();
7686 if ( lessExtend .isAll () ) {
7787 LessExtendResult extend = new LessExtendResult ( mainSelector , extendingSelector );
78- SelectorTokenizer tokenizer = new SelectorTokenizer ( extendingSelector );
88+ SelectorTokenizer tokenizer = tokenizers . pollLast (). init ( extendingSelector );
7989 do {
8090 String token = tokenizer .next ();
8191 if ( token == null ) {
8292 break ;
8393 }
8494 all .add ( token , extend );
8595 } while ( true );
96+ tokenizers .addLast ( tokenizer );
8697 } else {
8798 exact .add ( extendingSelector , mainSelector );
8899 }
@@ -145,7 +156,7 @@ private void concatenateExtendsRecursive( String selector, boolean isReference,
145156 }
146157 }
147158 }
148- SelectorTokenizer tokenizer = new SelectorTokenizer ( allSelector );
159+ SelectorTokenizer tokenizer = tokenizers . pollLast (). init ( allSelector );
149160 do {
150161 String token = tokenizer .next ();
151162 if ( token == null ) {
@@ -167,5 +178,6 @@ private void concatenateExtendsRecursive( String selector, boolean isReference,
167178 }
168179 }
169180 } while ( true );
181+ tokenizers .addLast ( tokenizer );
170182 }
171183}
0 commit comments