src/share/classes/java/awt/datatransfer/Clipboard.java

Print this page

        

@@ -25,18 +25,17 @@
 
 package java.awt.datatransfer;
 
 import java.awt.EventQueue;
 
+import java.util.Objects;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Arrays;
 
 import java.io.IOException;
 
-import sun.awt.EventListenerAggregate;
-
 /**
  * A class that implements a mechanism to transfer data using
  * cut/copy/paste operations.
  * <p>
  * {@link FlavorListener}s may be registered on an instance of the

@@ -66,11 +65,11 @@
     /**
      * An aggregate of flavor listeners registered on this local clipboard.
      *
      * @since 1.5
      */
-    private EventListenerAggregate flavorListeners;
+    private final Set<FlavorListener> flavorListeners = new HashSet<>();
 
     /**
      * A set of <code>DataFlavor</code>s that is available on
      * this local clipboard. It is used for tracking changes
      * of <code>DataFlavor</code>s available on this clipboard.

@@ -129,15 +128,11 @@
 
         this.owner = owner;
         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();
     }
 
     /**

@@ -259,13 +254,12 @@
      */
     public synchronized void addFlavorListener(FlavorListener listener) {
         if (listener == null) {
             return;
         }
-        if (flavorListeners == null) {
+        if (flavorListeners.isEmpty()) {
             currentDataFlavors = getAvailableDataFlavorSet();
-            flavorListeners = new EventListenerAggregate(FlavorListener.class);
         }
         flavorListeners.add(listener);
     }
 
     /**

@@ -284,11 +278,11 @@
      * @see FlavorListener
      * @see FlavorEvent
      * @since 1.5
      */
     public synchronized void removeFlavorListener(FlavorListener listener) {
-        if (listener == null || flavorListeners == null) {
+        if (listener == null) {
             return;
         }
         flavorListeners.remove(listener);
     }
 

@@ -303,40 +297,29 @@
      * @see FlavorListener
      * @see FlavorEvent
      * @since 1.5
      */
     public synchronized FlavorListener[] getFlavorListeners() {
-        return flavorListeners == null ? new FlavorListener[0] :
-                (FlavorListener[])flavorListeners.getListenersCopy();
+        return flavorListeners.toArray(new FlavorListener[flavorListeners.size()]);
     }
 
     /**
      * Checks change of the <code>DataFlavor</code>s and, if necessary,
      * notifies all listeners that have registered interest for notification
      * on <code>FlavorEvent</code>s.
      *
      * @since 1.5
      */
     private void fireFlavorsChanged() {
-        if (flavorListeners == null) {
-            return;
-        }
         Set<DataFlavor> prevDataFlavors = currentDataFlavors;
         currentDataFlavors = getAvailableDataFlavorSet();
-        if (prevDataFlavors.equals(currentDataFlavors)) {
+        if (Objects.equals(prevDataFlavors, 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))));
     }
 
     /**
      * Returns a set of <code>DataFlavor</code>s currently available
      * on this clipboard.