From 34b355058d77f6fac531bf8ea57b9de6d1a6d127 Mon Sep 17 00:00:00 2001 From: fedejeanne <2205684+fedejeanne@users.noreply.github.com> Date: Fri, 10 May 2024 14:09:55 +0200 Subject: [PATCH] Reduce complexity of private method FinishedJobs::findJobsToRemove Also make it return an Iterable instead of null to avoid null checks --- .../ui/internal/progress/FinishedJobs.java | 71 ++++++++++--------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java index ffe09de92e8..93bf437599c 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java @@ -14,6 +14,7 @@ package org.eclipse.ui.internal.progress; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashSet; @@ -178,11 +179,8 @@ private void removeDuplicates(GroupInfo info) { private void removeDuplicates(JobTreeElement info) { synchronized (keptjobinfos) { - JobTreeElement[] toBeRemoved = findJobsToRemove(info); - if (toBeRemoved != null) { - for (JobTreeElement element : toBeRemoved) { - remove(element); - } + for (JobTreeElement element : findJobsToRemove(info)) { + remove(element); } } } @@ -231,35 +229,41 @@ static void disposeAction(JobTreeElement jte) { } } - private JobTreeElement[] findJobsToRemove(JobTreeElement info) { - - if (info.isJobInfo()) { - Job myJob = ((JobInfo) info).getJob(); - - if (myJob != null) { - - Object prop = myJob.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY); - if (prop instanceof Boolean && ((Boolean) prop).booleanValue()) { - ArrayList found = null; - JobTreeElement[] all = getKeptElements(); - for (JobTreeElement jobTreeElement : all) { - if (jobTreeElement != info && jobTreeElement.isJobInfo()) { - Job job = ((JobInfo) jobTreeElement).getJob(); - if (job != null && job != myJob && job.belongsTo(myJob)) { - if (found == null) { - found = new ArrayList<>(); - } - found.add(jobTreeElement); - } - } - } - if (found != null) { - return found.toArray(new JobTreeElement[found.size()]); - } + private Iterable findJobsToRemove(JobTreeElement info) { + + if (!info.isJobInfo()) { + return Collections.emptyList(); + } + + Job myJob = ((JobInfo) info).getJob(); + + if (myJob == null) { + return Collections.emptyList(); + } + + if (!(myJob.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY) instanceof Boolean keepOne) || !keepOne) { + return Collections.emptyList(); + } + + ArrayList found = null; + JobTreeElement[] all = getKeptElements(); + for (JobTreeElement jobTreeElement : all) { + if (jobTreeElement == info || !jobTreeElement.isJobInfo()) { + continue; + } + Job job = ((JobInfo) jobTreeElement).getJob(); + if (job != null && job != myJob && job.belongsTo(myJob)) { + if (found == null) { + found = new ArrayList<>(); } + found.add(jobTreeElement); } } - return null; + if (found != null) { + return found; + } + + return Collections.emptyList(); } private void checkTasks(JobInfo info) { @@ -267,17 +271,14 @@ private void checkTasks(JobInfo info) { Optional optional = info.getTaskInfo(); if (optional.isPresent()) { TaskInfo tinfo = optional.get(); - JobTreeElement[] toBeRemoved = null; boolean fire = false; JobInfo element = tinfo.getParent(); synchronized (keptjobinfos) { if (element == info && !keptjobinfos.contains(tinfo)) { - toBeRemoved = findJobsToRemove(element); + Iterable toBeRemoved = findJobsToRemove(element); keptjobinfos.add(tinfo); finishedTime.put(tinfo, Long.valueOf(System.currentTimeMillis())); - } - if (toBeRemoved != null) { for (JobTreeElement jobTreeElement : toBeRemoved) { remove(jobTreeElement); }