This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 243485
Collapse All | Expand All

(-)a/openide.loaders/src/org/openide/loaders/FolderChildren.java (-3 / +28 lines)
Lines 73-79 Link Here
73
final class FolderChildren extends Children.Keys<FolderChildrenPair>
73
final class FolderChildren extends Children.Keys<FolderChildrenPair>
74
implements PropertyChangeListener, ChangeListener, FileChangeListener {
74
implements PropertyChangeListener, ChangeListener, FileChangeListener {
75
    /** the folder */
75
    /** the folder */
76
    private FolderList folder;
76
    private final FolderList folder;
77
    /** filter of objects */
77
    /** filter of objects */
78
    private final DataFilter filter;
78
    private final DataFilter filter;
79
    /** listener on changes in nodes */
79
    /** listener on changes in nodes */
Lines 169-181 Link Here
169
    }
169
    }
170
170
171
    private enum RefreshMode {SHALLOW, SHALLOW_IMMEDIATE, DEEP, DEEP_LATER, CLEAR}
171
    private enum RefreshMode {SHALLOW, SHALLOW_IMMEDIATE, DEEP, DEEP_LATER, CLEAR}
172
    private void refreshChildren(RefreshMode operation) {
172
    private final long[] lastRefreshes
173
            = new long[RefreshMode.values().length];
174
    private void refreshChildren(final RefreshMode operation) {
173
        class R implements Runnable {
175
        class R implements Runnable {
174
            List<FolderChildrenPair> positioned = null;
176
            List<FolderChildrenPair> positioned = null;
175
            RefreshMode op;
177
            RefreshMode op;
176
            Task prevTask = null;
178
            Task prevTask = null;
179
            long creationTime;
177
            @Override
180
            @Override
178
            public void run() {
181
            public void run() {
182
                if (wasCreatedBeforeLastRefresh()) {
183
                    return;
184
                }
179
                if (prevTask != null) {
185
                if (prevTask != null) {
180
                    // We need to ensure that refresh tasks for one
186
                    // We need to ensure that refresh tasks for one
181
                    // FolderChildren do not run in parallel. And because the
187
                    // FolderChildren do not run in parallel. And because the
Lines 208-213 Link Here
208
                } finally {
214
                } finally {
209
                    err.log(Level.FINE, "refreshChildren {0}, done", op);
215
                    err.log(Level.FINE, "refreshChildren {0}, done", op);
210
                }
216
                }
217
                storeLastRefreshTime();
211
            }
218
            }
212
219
213
            private List<FolderChildrenPair> getPositionedFolderChildrenPairs() {
220
            private List<FolderChildrenPair> getPositionedFolderChildrenPairs() {
Lines 228-233 Link Here
228
                }
235
                }
229
                return list;
236
                return list;
230
            }
237
            }
238
239
            /**
240
             * Check if this runnable was created before the last refresh for
241
             * the current operation, and thus it is useless.
242
             *
243
             * @return True if this runnable is too old.
244
             */
245
            private boolean wasCreatedBeforeLastRefresh() {
246
                return creationTime < lastRefreshes[operation.ordinal()];
247
            }
248
249
            /**
250
             * Store last refresh time for the current operation.
251
             */
252
            private void storeLastRefreshTime() {
253
                lastRefreshes[operation.ordinal()] = System.currentTimeMillis();
254
            }
231
        }
255
        }
232
        R run = new R();
256
        R run = new R();
233
        if (operation == RefreshMode.SHALLOW_IMMEDIATE) {
257
        if (operation == RefreshMode.SHALLOW_IMMEDIATE) {
Lines 238-244 Link Here
238
            run.op = operation;
262
            run.op = operation;
239
            synchronized (this) {
263
            synchronized (this) {
240
                run.prevTask = refTask;
264
                run.prevTask = refTask;
241
                refTask = DataNodeUtils.reqProcessor(folder.getPrimaryFile()).post(run);
265
                run.creationTime = System.currentTimeMillis();
266
                refTask = DataNodeUtils.reqProcessor(folder.getPrimaryFile()).post(run, 50);
242
            }
267
            }
243
        }
268
        }
244
    }
269
    }

Return to bug 243485