|
14 | 14 | package org.eclipse.ui.internal.progress; |
15 | 15 |
|
16 | 16 | import java.util.ArrayList; |
| 17 | +import java.util.Collections; |
17 | 18 | import java.util.Date; |
18 | 19 | import java.util.HashMap; |
19 | 20 | import java.util.LinkedHashSet; |
@@ -178,11 +179,8 @@ private void removeDuplicates(GroupInfo info) { |
178 | 179 |
|
179 | 180 | private void removeDuplicates(JobTreeElement info) { |
180 | 181 | synchronized (keptjobinfos) { |
181 | | - JobTreeElement[] toBeRemoved = findJobsToRemove(info); |
182 | | - if (toBeRemoved != null) { |
183 | | - for (JobTreeElement element : toBeRemoved) { |
184 | | - remove(element); |
185 | | - } |
| 182 | + for (JobTreeElement element : findJobsToRemove(info)) { |
| 183 | + remove(element); |
186 | 184 | } |
187 | 185 | } |
188 | 186 | } |
@@ -231,53 +229,56 @@ static void disposeAction(JobTreeElement jte) { |
231 | 229 | } |
232 | 230 | } |
233 | 231 |
|
234 | | - private JobTreeElement[] findJobsToRemove(JobTreeElement info) { |
235 | | - |
236 | | - if (info.isJobInfo()) { |
237 | | - Job myJob = ((JobInfo) info).getJob(); |
238 | | - |
239 | | - if (myJob != null) { |
240 | | - |
241 | | - Object prop = myJob.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY); |
242 | | - if (prop instanceof Boolean && ((Boolean) prop).booleanValue()) { |
243 | | - ArrayList<JobTreeElement> found = null; |
244 | | - JobTreeElement[] all = getKeptElements(); |
245 | | - for (JobTreeElement jobTreeElement : all) { |
246 | | - if (jobTreeElement != info && jobTreeElement.isJobInfo()) { |
247 | | - Job job = ((JobInfo) jobTreeElement).getJob(); |
248 | | - if (job != null && job != myJob && job.belongsTo(myJob)) { |
249 | | - if (found == null) { |
250 | | - found = new ArrayList<>(); |
251 | | - } |
252 | | - found.add(jobTreeElement); |
253 | | - } |
254 | | - } |
255 | | - } |
256 | | - if (found != null) { |
257 | | - return found.toArray(new JobTreeElement[found.size()]); |
258 | | - } |
| 232 | + private Iterable<JobTreeElement> findJobsToRemove(JobTreeElement info) { |
| 233 | + |
| 234 | + if (!info.isJobInfo()) { |
| 235 | + return Collections.emptyList(); |
| 236 | + } |
| 237 | + |
| 238 | + Job myJob = ((JobInfo) info).getJob(); |
| 239 | + |
| 240 | + if (myJob == null) { |
| 241 | + return Collections.emptyList(); |
| 242 | + } |
| 243 | + |
| 244 | + if (!(myJob.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY) instanceof Boolean keepOne) || !keepOne) { |
| 245 | + return Collections.emptyList(); |
| 246 | + } |
| 247 | + |
| 248 | + ArrayList<JobTreeElement> found = null; |
| 249 | + JobTreeElement[] all = getKeptElements(); |
| 250 | + for (JobTreeElement jobTreeElement : all) { |
| 251 | + if (jobTreeElement == info || !jobTreeElement.isJobInfo()) { |
| 252 | + continue; |
| 253 | + } |
| 254 | + Job job = ((JobInfo) jobTreeElement).getJob(); |
| 255 | + if (job != null && job != myJob && job.belongsTo(myJob)) { |
| 256 | + if (found == null) { |
| 257 | + found = new ArrayList<>(); |
259 | 258 | } |
| 259 | + found.add(jobTreeElement); |
260 | 260 | } |
261 | 261 | } |
262 | | - return null; |
| 262 | + if (found != null) { |
| 263 | + return found; |
| 264 | + } |
| 265 | + |
| 266 | + return Collections.emptyList(); |
263 | 267 | } |
264 | 268 |
|
265 | 269 | private void checkTasks(JobInfo info) { |
266 | 270 | if (keep(info)) { |
267 | 271 | Optional<TaskInfo> optional = info.getTaskInfo(); |
268 | 272 | if (optional.isPresent()) { |
269 | 273 | TaskInfo tinfo = optional.get(); |
270 | | - JobTreeElement[] toBeRemoved = null; |
271 | 274 | boolean fire = false; |
272 | 275 | JobInfo element = tinfo.getParent(); |
273 | 276 | synchronized (keptjobinfos) { |
274 | 277 | if (element == info && !keptjobinfos.contains(tinfo)) { |
275 | | - toBeRemoved = findJobsToRemove(element); |
| 278 | + Iterable<JobTreeElement> toBeRemoved = findJobsToRemove(element); |
276 | 279 | keptjobinfos.add(tinfo); |
277 | 280 | finishedTime.put(tinfo, Long.valueOf(System.currentTimeMillis())); |
278 | | - } |
279 | 281 |
|
280 | | - if (toBeRemoved != null) { |
281 | 282 | for (JobTreeElement jobTreeElement : toBeRemoved) { |
282 | 283 | remove(jobTreeElement); |
283 | 284 | } |
|
0 commit comments