# HG changeset patch # User Vladimir Kvashin # Date 1375888339 -14400 # Node ID b765da771be98558d4144a2029203581c1b826c7 # Parent 143de695576e3849bb0875602cd827d93e2f8210 Do not s schedule multiple refreshed for same object (fixing #226361 - Remote file changed outside IDE is not updated in the editor) diff -r 143de695576e -r b765da771be9 editor/src/org/netbeans/modules/editor/NbEditorUI.java --- a/editor/src/org/netbeans/modules/editor/NbEditorUI.java Wed Aug 07 18:57:24 2013 +0400 +++ b/editor/src/org/netbeans/modules/editor/NbEditorUI.java Wed Aug 07 19:12:19 2013 +0400 @@ -54,6 +54,8 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.prefs.Preferences; import javax.swing.Action; @@ -118,6 +120,29 @@ } private static final RequestProcessor WORKER = new RequestProcessor(NbEditorUI.class.getName(), 1, false, false); + private static final LinkedHashSet objectsToRefresh = new LinkedHashSet<>(); + private static final Object lock = new Object(); + private static final RequestProcessor.Task TASK = WORKER.create(new Runnable() { + @Override + public void run() { + FileObject fo; + do { + synchronized (lock) { + // let's be fair - get 1-st object + Iterator iterator = objectsToRefresh.iterator(); + if (iterator.hasNext()) { + fo = iterator.next(); + objectsToRefresh.remove(fo); + } else { + fo = null; + } + } + if (fo != null) { + fo.refresh(); + } + } while (fo != null); + } + }); public NbEditorUI() { focusL = new FocusAdapter() { @@ -130,11 +155,10 @@ final FileObject fo = dob.getPrimaryFile(); if (fo != null) { // Fixed #48151 - posting the refresh outside of AWT thread - WORKER.post(new Runnable() { - public void run() { - fo.refresh(); - } - }); + synchronized (lock) { + objectsToRefresh.add(fo); + } + TASK.schedule(0); } } }