diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java index ef036280601e..a15b0af34b5d 100644 --- a/core/src/main/java/hudson/model/Queue.java +++ b/core/src/main/java/hudson/model/Queue.java @@ -938,7 +938,9 @@ public boolean isPending(Task t) { /** * How many {@link BuildableItem}s are assigned for the given label? - * @param l Label to be checked. If null, any label will be accepted + * @param l Label to be checked. If null, any label will be accepted. + * If you want to count {@link BuildableItem}s without assigned labels, + * use {@link #strictCountBuildableItemsFor(hudson.model.Label)}. * @return Number of {@link BuildableItem}s for the specified label. */ public @Nonnegative int countBuildableItemsFor(@CheckForNull Label l) { @@ -954,6 +956,30 @@ public boolean isPending(Task t) { r++; return r; } + + /** + * How many {@link BuildableItem}s are assigned for the given label? + *

+ * The implementation is quite similar to {@link #countBuildableItemsFor(hudson.model.Label)}, + * but it has another behavior for null parameters. + * @param l Label to be checked. If null, only jobs without assigned labels + * will be taken into the account. + * @return Number of {@link BuildableItem}s for the specified label. + * @since TODO + */ + public @Nonnegative int strictCountBuildableItemsFor(@CheckForNull Label l) { + Snapshot _snapshot = this.snapshot; + int r = 0; + for (BuildableItem bi : _snapshot.buildables) + for (SubTask st : bi.task.getSubTasks()) + if (bi.getAssignedLabelFor(st) == l) + r++; + for (BuildableItem bi : _snapshot.pendings) + for (SubTask st : bi.task.getSubTasks()) + if (bi.getAssignedLabelFor(st) == l) + r++; + return r; + } /** * Counts all the {@link BuildableItem}s currently in the queue. diff --git a/core/src/main/java/jenkins/model/UnlabeledLoadStatistics.java b/core/src/main/java/jenkins/model/UnlabeledLoadStatistics.java index 4f2a490a73ed..008e5d2c743e 100644 --- a/core/src/main/java/jenkins/model/UnlabeledLoadStatistics.java +++ b/core/src/main/java/jenkins/model/UnlabeledLoadStatistics.java @@ -84,16 +84,7 @@ public int computeQueueLength() { if (j == null) { // Consider queue as empty when Jenkins is inactive return 0; } - - int result = 0; - final List buildableItems = j.getQueue().getBuildableItems(); - for (Queue.BuildableItem item : buildableItems) { - for (SubTask st : Tasks.getSubTasksOf(item.task)) { - if (item.getAssignedLabelFor(st) == null) - result++; - } - } - return result; + return j.getQueue().strictCountBuildableItemsFor(null); } @Override