Author: bobtarling
Date: 2008-11-04 14:56:20-0800
New Revision: 15966

Modified:
   trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java
   trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java
   trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java

Log:
The remove list need doesn't need to be synchronized as it is a copy passed to 
other threads.

Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java?view=diff&rev=15966&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java&r1=15965&r2=15966
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java       
(original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java       
2008-11-04 14:56:20-0800
@@ -163,8 +163,8 @@
      * items on the list are still valid.
      */
     public void run() {
-        List<ToDoItem> removes = 
-            Collections.synchronizedList(new ArrayList<ToDoItem>());
+        final List<ToDoItem> removes = new ArrayList<ToDoItem>();
+        
         while (true) {
 
             // the validity checking thread should wait if disabled.
@@ -195,8 +195,7 @@
      * button via forceValidityCheck().
      */
     public void forceValidityCheck() {
-        List<ToDoItem> removes = 
-            Collections.synchronizedList(new ArrayList<ToDoItem>());
+        final List<ToDoItem> removes = new ArrayList<ToDoItem>();
         forceValidityCheck(removes);
     }
 
@@ -210,9 +209,10 @@
      * <em>Warning: Fragile code!</em> No method that this method calls can
      * synchronized the Designer, otherwise there will be deadlock.
      * 
-     * @param removes a synchronized list containing the items to be removed
+     * @param removes a list containing the items to be removed
      */
-    protected synchronized void forceValidityCheck(List<ToDoItem> removes) {
+    protected synchronized void forceValidityCheck(
+            final List<ToDoItem> removes) {
         synchronized (items) {
             for (ToDoItem item : items) {
                 boolean valid;
@@ -236,18 +236,16 @@
             }
         }
 
-        synchronized (removes) {
-            for (ToDoItem item : removes) {
-                removeE(item);
-                // History.TheHistory.addItemResolution(item,
-                // "no longer valid");
-                // ((ToDoItem)item).resolve("no longer valid");
-                // notifyObservers("removeElement", item);
-            }
-            recomputeAllOffenders();
-            recomputeAllPosters();
-            fireToDoItemsRemoved(removes);
+        for (ToDoItem item : removes) {
+            removeE(item);
+            // History.TheHistory.addItemResolution(item,
+            // "no longer valid");
+            // ((ToDoItem)item).resolve("no longer valid");
+            // notifyObservers("removeElement", item);
         }
+        recomputeAllOffenders();
+        recomputeAllPosters();
+        fireToDoItemsRemoved(removes);
     }
 
     /**

Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java?view=diff&rev=15966&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java&r1=15965&r2=15966
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java  
(original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ToDoListEvent.java  
2008-11-04 14:56:20-0800
@@ -25,6 +25,7 @@
 
 package org.argouml.cognitive;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Vector;
@@ -53,7 +54,8 @@
      * @param toDoItems the List of ToDoItems that were changed/added/removed 
      */
     public ToDoListEvent(final List<ToDoItem> toDoItems) {
-        items = Collections.unmodifiableList(toDoItems);
+        items =
+            Collections.unmodifiableList(new ArrayList<ToDoItem>(toDoItems));
     }
     
     /**

Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java?view=diff&rev=15966&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java&r1=15965&r2=15966
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java    
(original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java    
2008-11-04 14:56:20-0800
@@ -31,7 +31,6 @@
 import java.awt.event.ItemListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
-import java.lang.reflect.InvocationTargetException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
@@ -377,20 +376,7 @@
         if (SwingUtilities.isEventDispatchThread()) {
             task.run();
         } else {
-            // TODO: We really want to use invokeLater here but there is some
-            // threading problem with doing so. I assume we have some problem
-            // with the GUI querying the todo list as a reaction to a todo
-            // event instead of only using the information contained within
-            // that event.
-            // With the current invokeAndWait solution we are blocking the GUI
-            // in the todo thread - Bob.
-            try {
-                SwingUtilities.invokeAndWait(task);
-            } catch (InterruptedException e) {
-                LOG.error("Exception", e);
-            } catch (InvocationTargetException e) {
-                LOG.error("Exception", e);
-            }
+            SwingUtilities.invokeLater(task);
         }
     }
     

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to