Skip to content

Commit c23d067

Browse files
committed
8304960: ObservableListBase should defer constructing ListChangeBuilder
Reviewed-by: angorya, mhanl, mstrauss, kcr
1 parent 2a5bf46 commit c23d067

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

modules/javafx.base/src/main/java/javafx/collections/ObservableListBase.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
public abstract class ObservableListBase<E> extends AbstractList<E> implements ObservableList<E> {
9191

9292
private ListListenerHelper<E> listenerHelper;
93-
private final ListChangeBuilder<E> changeBuilder = new ListChangeBuilder<>(this);
93+
private ListChangeBuilder<E> changeBuilder;
9494

9595
/**
9696
* Creates a default {@code ObservableListBase}.
@@ -105,7 +105,7 @@ public ObservableListBase() {
105105
* @param pos the position in the list where the updated element resides.
106106
*/
107107
protected final void nextUpdate(int pos) {
108-
changeBuilder.nextUpdate(pos);
108+
getListChangeBuilder().nextUpdate(pos);
109109
}
110110

111111
/**
@@ -117,7 +117,7 @@ protected final void nextUpdate(int pos) {
117117
* @param old the old value at the {@code idx} position.
118118
*/
119119
protected final void nextSet(int idx, E old) {
120-
changeBuilder.nextSet(idx, old);
120+
getListChangeBuilder().nextSet(idx, old);
121121
}
122122

123123
/**
@@ -130,7 +130,7 @@ protected final void nextSet(int idx, E old) {
130130
* @param removed the list of items that were removed
131131
*/
132132
protected final void nextReplace(int from, int to, List<? extends E> removed) {
133-
changeBuilder.nextReplace(from, to, removed);
133+
getListChangeBuilder().nextReplace(from, to, removed);
134134
}
135135

136136
/**
@@ -141,7 +141,7 @@ protected final void nextReplace(int from, int to, List<? extends E> removed) {
141141
* @param removed the list of items that were removed
142142
*/
143143
protected final void nextRemove(int idx, List<? extends E> removed) {
144-
changeBuilder.nextRemove(idx, removed);
144+
getListChangeBuilder().nextRemove(idx, removed);
145145
}
146146

147147
/**
@@ -152,7 +152,7 @@ protected final void nextRemove(int idx, List<? extends E> removed) {
152152
* @param removed the item that was removed
153153
*/
154154
protected final void nextRemove(int idx, E removed) {
155-
changeBuilder.nextRemove(idx, removed);
155+
getListChangeBuilder().nextRemove(idx, removed);
156156
}
157157

158158
/**
@@ -168,7 +168,7 @@ protected final void nextRemove(int idx, E removed) {
168168
* contain the indexes of the list. Therefore, such permutation would not contain indexes of range {@code (0, from)}
169169
*/
170170
protected final void nextPermutation(int from, int to, int[] perm) {
171-
changeBuilder.nextPermutation(from, to, perm);
171+
getListChangeBuilder().nextPermutation(from, to, perm);
172172
}
173173

174174
/**
@@ -181,7 +181,7 @@ protected final void nextPermutation(int from, int to, int[] perm) {
181181
* @param to marks the end (exclusive) of the range that was added
182182
*/
183183
protected final void nextAdd(int from, int to) {
184-
changeBuilder.nextAdd(from, to);
184+
getListChangeBuilder().nextAdd(from, to);
185185
}
186186

187187
/**
@@ -194,7 +194,7 @@ protected final void nextAdd(int from, int to) {
194194
* @see #endChange()
195195
*/
196196
protected final void beginChange() {
197-
changeBuilder.beginChange();
197+
getListChangeBuilder().beginChange();
198198
}
199199

200200
/**
@@ -207,7 +207,15 @@ protected final void beginChange() {
207207
* @see #beginChange()
208208
*/
209209
protected final void endChange() {
210-
changeBuilder.endChange();
210+
getListChangeBuilder().endChange();
211+
}
212+
213+
private ListChangeBuilder<E> getListChangeBuilder() {
214+
if (changeBuilder == null) {
215+
changeBuilder = new ListChangeBuilder<>(this);
216+
}
217+
218+
return changeBuilder;
211219
}
212220

213221
@Override

0 commit comments

Comments
 (0)