Skip to content

Commit c245756

Browse files
author
volker
committed
StringInterpolationSequence does not need an internal SassList, use a
simple list to reduce object allocation
1 parent 272d233 commit c245756

File tree

2 files changed

+40
-32
lines changed

2 files changed

+40
-32
lines changed

src/main/java/com/inet/sass/parser/SassList.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -167,11 +167,16 @@ public SassList evaluateFunctionsAndExpressions(ScssContext context,
167167
public SassList replaceVariables(ScssContext context) {
168168
// The actual replacing happens in LexicalUnitImpl, which also
169169
// implements SassListItem.
170-
List<SassListItem> list = new ArrayList<SassListItem>();
171-
for (SassListItem item : this) {
172-
list.add(item.replaceVariables(context));
170+
return new SassList(getSeparator(), replaceVariables( context, items ) );
171+
}
172+
173+
static List<SassListItem> replaceVariables( ScssContext context, List<SassListItem> items ) {
174+
int size = items.size();
175+
List<SassListItem> list = new ArrayList<SassListItem>( size );
176+
for( int i = 0; i < size; i++ ) {
177+
list.add( items.get( i ).replaceVariables( context ) );
173178
}
174-
return new SassList(getSeparator(), list);
179+
return list;
175180
}
176181

177182
@Override
@@ -237,19 +242,22 @@ public String getStringWithNesting() {
237242
@Override
238243
public SassList updateUrl(String prefix) {
239244
if (size() > 0) {
240-
ArrayList<SassListItem> newItems = new ArrayList<SassListItem>(
241-
size());
242-
for (SassListItem item : this) {
243-
newItems.add(item.updateUrl(prefix));
244-
}
245-
SassList result = new SassList(getSeparator(), newItems);
246-
result.setSourcePosition(getLineNumber(), getColumnNumber());
245+
SassList result = new SassList( getSeparator(), updateUrl( items, prefix ) );
247246
return result;
248247
} else {
249248
return this;
250249
}
251250
}
252251

252+
static List<SassListItem> updateUrl( List<SassListItem> items, String prefix ) {
253+
int size = items.size();
254+
ArrayList<SassListItem> newItems = new ArrayList<SassListItem>( size );
255+
for( int i = 0; i < size; i++ ) {
256+
newItems.add( items.get( i ).updateUrl( prefix ) );
257+
}
258+
return newItems;
259+
}
260+
253261
@Override
254262
public boolean equals(Object o) {
255263
if (!(o instanceof SassList)) {

src/main/java/com/inet/sass/parser/StringInterpolationSequence.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@
3535
*
3636
*/
3737
public class StringInterpolationSequence {
38-
private boolean containsInterpolation = false;
39-
private SassList items;
38+
private boolean containsInterpolation;
39+
private List<SassListItem> items;
4040
private String toString;
4141

4242
/**
43-
* Creates a new StringInterpolationSequence containing only the given item.
44-
*
43+
* Creates a new StringInterpolationSequence containing only the given item without interpolation.
44+
* @param value single string value
4545
*/
46-
public StringInterpolationSequence(String value) {
47-
this(Collections.<SassListItem> singletonList(new StringItem(value)));
46+
public StringInterpolationSequence( String value ) {
47+
items = Collections.<SassListItem> singletonList( new StringItem( value ) );
4848
}
4949

5050
/**
@@ -61,11 +61,7 @@ public StringInterpolationSequence(List<SassListItem> sequence) {
6161
break;
6262
}
6363
}
64-
items = new SassList(SassList.Separator.SPACE, sequence);
65-
}
66-
67-
private StringInterpolationSequence(SassList list) {
68-
this(list.getItems());
64+
items = sequence;
6965
}
7066

7167
/**
@@ -77,12 +73,12 @@ private StringInterpolationSequence(SassList list) {
7773
* current compilation context
7874
* @return A new StringInterpolationSequence.
7975
*/
80-
public StringInterpolationSequence replaceVariables(ScssContext context) {
76+
public StringInterpolationSequence replaceVariables( ScssContext context ) {
8177
if( !containsInterpolation ) {
8278
return this;
8379
}
84-
SassList resultList = items.replaceVariables( context );
85-
return new StringInterpolationSequence( resultList );
80+
81+
return new StringInterpolationSequence( SassList.replaceVariables( context, items ) );
8682
}
8783

8884
/**
@@ -96,17 +92,21 @@ public StringInterpolationSequence replaceVariables(ScssContext context) {
9692
*/
9793
public StringInterpolationSequence append(StringInterpolationSequence other) {
9894
ArrayList<SassListItem> result = new ArrayList<SassListItem>(
99-
items.getItems());
100-
result.addAll(other.items.getItems());
95+
items);
96+
result.addAll(other.items);
10197
return new StringInterpolationSequence(result);
10298
}
10399

104100
@Override
105101
public String toString() {
106-
if (toString == null) {
102+
if( toString == null ) {
103+
List<SassListItem> items = this.items;
104+
if( items.size() == 1 ) {
105+
return items.get( 0 ).printState();
106+
}
107107
StringBuilder result = new StringBuilder();
108-
for (SassListItem item : items) {
109-
result.append(item.printState());
108+
for( SassListItem item : items ) {
109+
result.append( item.printState() );
110110
}
111111
toString = result.toString();
112112
}
@@ -129,12 +129,12 @@ public boolean containsInterpolation() {
129129
}
130130

131131
public List<SassListItem> getItems() {
132-
return items.getItems();
132+
return items;
133133
}
134134

135135
public StringInterpolationSequence updateUrl(String prefix) {
136136
if( containsInterpolation ) {
137-
return new StringInterpolationSequence(items.updateUrl(prefix));
137+
return new StringInterpolationSequence( SassList.updateUrl( items, prefix ) );
138138
}
139139
return this;
140140
}

0 commit comments

Comments
 (0)