public List<String> eachDef(def body) {
return order.each { name ->
def bom_def = getDef(name)
if (bom_def.enabled) {
body.call(name, bom_def)
}
}
}
Here is the reverse style function that uses reverseEach:
public List<String> reverseEachDef(def body) {
return order.reverseEach { name ->
def bom_def = getDef(name)
if (bom_def.enabled) {
body.call(name, bom_def)
}
}
}
I even tried an alternative reverse but got the same error:
public List<String> reverseEachDef(def body) {
// NOTE: list.reverse() is not currently whitelisted: org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods reverse java.util.List
return order.iterator().reverse().each { name ->
def bom_def = getDef(name)
if (bom_def.enabled) {
body.call(name, bom_def)
}
}
}
As a workaround, I used a plain for loop and it worked:
public List<String> reverseEachDef(def body) {
// NOTE: reverseEach() caused some weird: java.io.NotSerializableException: org.codehaus.groovy.runtime.ReverseListIterator
for (int i = order.size() - 1; i >= 0; --i) {
String name = order[i]
def bom_def = getDef(name)
if (bom_def.enabled) {
body.call(name, bom_def)
}
}
}
I am running the following versions:
Jenkins: 2.89.3
Pipeline: 2.5
Script Security: 1.50