--- old/src/java.desktop/share/classes/javax/swing/AbstractListModel.java 2018-04-06 15:17:29.490781600 +0530 +++ new/src/java.desktop/share/classes/javax/swing/AbstractListModel.java 2018-04-06 15:17:26.374480800 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,11 @@ package javax.swing; -import javax.swing.event.*; +import javax.swing.event.EventListenerList; +import javax.swing.event.ListDataListener; +import javax.swing.event.ListDataEvent; import java.io.Serializable; +import java.util.function.BiConsumer; import java.util.EventListener; /** @@ -97,6 +100,28 @@ /** + * The workhorse function which does the job of calling the listeners + * interested in listening to the appropriate event that has occurred. + * Functions fireContentsChanged, fireIntervalAdded and fireIntervalRemoved + * call this function with appropriate arguments filled. + */ + private void fireUpdates(Object source, int index0, int index1, int eventType, + BiConsumer func) { + Object[] listeners = listenerList.getListenerList(); + ListDataEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ListDataListener.class) { + if (e == null) { + e = new ListDataEvent(source, eventType, index0, index1); + } + func.accept((ListDataListener)listeners[i+1], e); + } + } + } + + + /** * AbstractListModel subclasses must call this method * after * one or more elements of the list change. The changed elements @@ -112,17 +137,8 @@ */ protected void fireContentsChanged(Object source, int index0, int index1) { - Object[] listeners = listenerList.getListenerList(); - ListDataEvent e = null; - - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == ListDataListener.class) { - if (e == null) { - e = new ListDataEvent(source, ListDataEvent.CONTENTS_CHANGED, index0, index1); - } - ((ListDataListener)listeners[i+1]).contentsChanged(e); - } - } + fireUpdates(source, index0, index1, ListDataEvent.CONTENTS_CHANGED, + (l, e) -> l.contentsChanged(e)); } @@ -142,17 +158,8 @@ */ protected void fireIntervalAdded(Object source, int index0, int index1) { - Object[] listeners = listenerList.getListenerList(); - ListDataEvent e = null; - - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == ListDataListener.class) { - if (e == null) { - e = new ListDataEvent(source, ListDataEvent.INTERVAL_ADDED, index0, index1); - } - ((ListDataListener)listeners[i+1]).intervalAdded(e); - } - } + fireUpdates(source, index0, index1, ListDataEvent.INTERVAL_ADDED, + (l, e) -> l.intervalAdded(e)); } @@ -173,17 +180,8 @@ */ protected void fireIntervalRemoved(Object source, int index0, int index1) { - Object[] listeners = listenerList.getListenerList(); - ListDataEvent e = null; - - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == ListDataListener.class) { - if (e == null) { - e = new ListDataEvent(source, ListDataEvent.INTERVAL_REMOVED, index0, index1); - } - ((ListDataListener)listeners[i+1]).intervalRemoved(e); - } - } + fireUpdates(source, index0, index1, ListDataEvent.INTERVAL_REMOVED, + (l, e) -> l.intervalRemoved(e)); } /**