--- old/src/share/classes/java/awt/datatransfer/Clipboard.java 2014-03-18 18:26:14.000000000 +0400 +++ new/src/share/classes/java/awt/datatransfer/Clipboard.java 2014-03-18 18:26:13.000000000 +0400 @@ -33,8 +33,6 @@ import java.io.IOException; -import sun.awt.EventListenerAggregate; - /** * A class that implements a mechanism to transfer data using * cut/copy/paste operations. @@ -68,7 +66,7 @@ * * @since 1.5 */ - private EventListenerAggregate flavorListeners; + private final Set flavorListeners = new HashSet<>(); /** * A set of DataFlavors that is available on @@ -131,11 +129,7 @@ this.contents = contents; if (oldOwner != null && oldOwner != owner) { - EventQueue.invokeLater(new Runnable() { - public void run() { - oldOwner.lostOwnership(Clipboard.this, oldContents); - } - }); + EventQueue.invokeLater(() -> oldOwner.lostOwnership(Clipboard.this, oldContents)); } fireFlavorsChanged(); } @@ -261,9 +255,8 @@ if (listener == null) { return; } - if (flavorListeners == null) { + if (flavorListeners.isEmpty()) { currentDataFlavors = getAvailableDataFlavorSet(); - flavorListeners = new EventListenerAggregate(FlavorListener.class); } flavorListeners.add(listener); } @@ -286,7 +279,7 @@ * @since 1.5 */ public synchronized void removeFlavorListener(FlavorListener listener) { - if (listener == null || flavorListeners == null) { + if (listener == null) { return; } flavorListeners.remove(listener); @@ -305,8 +298,7 @@ * @since 1.5 */ public synchronized FlavorListener[] getFlavorListeners() { - return flavorListeners == null ? new FlavorListener[0] : - (FlavorListener[])flavorListeners.getListenersCopy(); + return flavorListeners.toArray(new FlavorListener[flavorListeners.size()]); } /** @@ -317,24 +309,15 @@ * @since 1.5 */ private void fireFlavorsChanged() { - if (flavorListeners == null) { - return; - } Set prevDataFlavors = currentDataFlavors; currentDataFlavors = getAvailableDataFlavorSet(); - if (prevDataFlavors.equals(currentDataFlavors)) { + if (prevDataFlavors != null && currentDataFlavors != null + && prevDataFlavors.equals(currentDataFlavors)) { return; } - FlavorListener[] flavorListenerArray = - (FlavorListener[])flavorListeners.getListenersInternal(); - for (int i = 0; i < flavorListenerArray.length; i++) { - final FlavorListener listener = flavorListenerArray[i]; - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.flavorsChanged(new FlavorEvent(Clipboard.this)); - } - }); - } + flavorListeners.forEach(listener -> + EventQueue.invokeLater(() -> + listener.flavorsChanged(new FlavorEvent(Clipboard.this)))); } /**